列出使用docker本地卷的Kubernetes容器
部署Dockerfile中具有列出使用docker本地卷的Kubernetes容器,docker,kubernetes,docker-volume,kubernetes-statefulset,Docker,Kubernetes,Docker Volume,Kubernetes Statefulset,部署Dockerfile中具有卷的工作负载时,该卷可能不会映射到Kubernetes中的持久卷(PV/PVC) 实际上,除非Kubernetes卷附加到该工作负载,否则docker daemon容器将在启动容器时临时创建docker卷(类型:local)。库伯内特斯不会意识到的。请参阅:。移除或重新部署pod时,此docker卷将被销毁 使用kubernetes卷当然是一个很好的实践,甚至(或者…在1.19中仍然是alpha) Q:如何列出使用此类本地卷的吊舱/容器 这非常重要,因为重新启动wo
卷的工作负载时,该卷可能不会映射到Kubernetes中的持久卷(PV/PVC)
实际上,除非Kubernetes卷附加到该工作负载,否则docker daemon容器将在启动容器时临时创建docker卷(类型:local
)。库伯内特斯不会意识到的。请参阅:。移除或重新部署pod时,此docker卷将被销毁
使用kubernetes卷当然是一个很好的实践,甚至(或者…在1.19中仍然是alpha)
Q:如何列出使用此类本地卷的吊舱/容器
这非常重要,因为重新启动workload/deployment/stateful集将导致中断(暂时卷丢失)。这里有一个小脚本,您可以在Kubernetes节点上运行(用于使用Docker守护程序的安装)
用于d(以美元为单位)(docker卷ls-q——过滤器驱动程序=本地);做
echo“==卷$d”
CID=$(docker ps-q-a--过滤器卷=$d)
docker容器检查-f'名称空间:{index.Config.Labels“io.kubernetes.pod.Namespace”}{{printf”\n}}控制ID:{{.ID}}{{{printf”\n}名称:{.Name}{{printf”\n}{{range.Mounts}{{if.Driver“local”}挂载点:{{.Destination}(RW:{.Name}{printf
du-ms/var/lib/docker/volumes/$d/| sed-e's/^\([0-9]\+\).*/Size:\1 MiB/;
回响
回响
完成
例如:
=== 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
请注意,一些系统吊舱/容器没有名称空间
此脚本应在要审核的每个节点上运行
使用ssh从中央服务器扫描多个主机的一种简单方法是将上面的脚本复制到文件local\u volumes.sh
,然后执行类似cat local\u volumes.sh | ssh node001 sudo bash-
对于rancher用户,此代码段审核所有封锁节点:
<代码>用于s,单位为$(rancher节点ls | grep-cordened | cut-d”“-f1);do cat local_volumes.sh | rancher ssh$s sudo bash-;完成
您正在部署什么,需要持久数据,而在映像文档中没有这样做?你能使用像头盔图表这样的东西来自己管理这些细节吗?@DavidMaze,使用kubernetes卷是一种最佳实践(持久或短暂)。这里的问题是关于如何处理没有遵循这一最佳实践的情况。关注你的最后一句可能的干扰。容器应设计为短暂的。重新启动Pod
(例如由于重新安排)不应影响工作负载。如果您的工作负载希望数据不会丢失,您应该使用Kubernetes知道的资源(PVC
)和PV
)。您需要知道哪些pod
的卷是Kubernetes不知道的,有什么具体原因吗。这会有什么变化?这能回答你的问题吗?值得注意的是,脚本需要在每个worker节点上运行这在除了“卧室”安装之外的任何地方都是毫无用处的。一旦你到达3个以上的节点,它就变成了一个真正的PITA(疼痛…)。最好编写一个变异许可控制器,检查每个部署中的所有卷是否都有相关的PVC,如果没有,则停止它们。那你一开始就不会遇到这种情况。例如,看看Portworx软件包。