docker - 列出使用 docker 本地卷的 Kubernetes 容器
问题描述
部署VOLUME
在 Dockerfile 中具有 的工作负载时,该卷可能不会映射到 Kubernetes 中的持久卷 (PV/PVC)。
实际上,除非将 Kubernetes 卷附加到该工作负载,否则 docker 守护程序容器将在启动容器时临时创建一个 docker-volume(驱动程序类型:) local
。Kubernetes 不会意识到这一点。请参阅:Dockerfile 中的 VOLUME 是否持久存在于 kubernetes 中。当 pod 被移除或重新部署时,这个 docker 卷将被销毁。
使用 kubernetes 卷,甚至是临时卷(或通用临时卷......在 1.19 中仍处于 alpha 版本)当然是一种好习惯
问:如何列出使用此类本地卷的 pod/容器?
这非常重要,因为重新启动工作负载/部署/有状态集会导致中断(丢失临时卷)。
解决方案
这是一个可以在 Kubernetes 节点上运行的小脚本(用于使用 Docker 守护程序的安装)。
for d in $(docker volume ls -q --filter driver=local ) ; do
echo "=== volume $d "
CID=$(docker ps -q -a --filter volume=$d)
docker container inspect -f ' Namespace : {{ index .Config.Labels "io.kubernetes.pod.namespace"}}{{ printf "\n" }} contnr ID : {{.ID}}{{ printf "\n" }} Name : {{.Name}}{{ printf "\n" }}{{ range .Mounts }}{{if eq .Driver "local" }} Mountpoint: {{ .Destination }} (RW:{{.RW}}){{end}}{{ end }}' $CID
du -ms /var/lib/docker/volumes/$d/_data | sed -e 's/^\([0-9]\+\).*/ Size : \1 MiB/';
echo
echo
done
例子:
=== volume c975149a17753393c543e25e4391af849d14d6d0cf2db4f4e873901ff05fea96
Namespace :
contnr ID : 01457a869b5a849952710a1bb023b10cf1f2dbf5779326d9c39a409b127a1437
Name : /nginx-proxy
Mountpoint: /opt/rke-tools (RW:true)
Size : 25 MiB
=== volume f8dbc7f9f06e82253ee882e19b72cbef5b30ba134230543aa34605cafcb6b082
Namespace : foo
contnr ID : 71758f3de8ab04b8547554eaf43e9ff54410feef597c55e628b8a3bb19c50e12
Name : /k8s_pgadmin4_foo-bar-001-pgadmin4-6d867f44d8-t566l_foo-bar_36715dd4-b858-4e8e-bc1c-c65cd7004e41_0
Mountpoint: /var/lib/pgadmin (RW:true)
Size : 1 MiB
请注意,某些系统 pod/容器没有命名空间。
此脚本应在您要审核的每个节点上运行。
使用 ssh 从中央服务器扫描多个主机的一种简单方法是将上面的脚本复制到文件local_volumes.sh
中,然后执行类似的命令cat local_volumes.sh | ssh node001 sudo bash -
对于牧场主用户,此代码段审核所有封锁节点:
for s in $(rancher nodes ls | grep cordoned | cut -d " " -f 1 ); do cat local_volumes.sh | rancher ssh $s sudo bash - ;done
推荐阅读
- javascript - 如何在客户端 js 中使用 node.js 中定义的变量?
- javascript - 如何通过在下拉列表中选择项目来检索文本框中的数据库值
- python - 如何限制 python pandas 数据框中的操作区域?
- html - Button :focus 样式在手机上不起作用?
- c# - NServiceBus 升级大版本策略
- docker - Jenkinsfile - 构建代理问题
- r - R help - 在特定条件下更改每一行的最大值
- python - 通过在 Python 中删除旧的条形图,用新的条形图替换现有的条形图
- laravel-5.2 - 如何在 laravel 5.2 中生成全新的迁移
- python - Django 规则对象权限