删除 deployment 资源后, 某些 pod 资源的状态一直显示 Terminating, 进入到该 pod 所在的宿主机, 查看 kubelet 日志:
1 | journalctl -u kubelet -f |
会发现有删除某些目录/文件 device or resource busy
的错误出现, 说明有其他的进程在挂载容器内使用的目录
使用如下脚本, 检查目录挂载情况
1 | [root@k8s-node ~]# cat leak.sh |
执行脚本, 后跟device or resource busy
的目录绝对路径
1 | sh leak.sh /var/lib/kubelet/pods/81791176-a505-11e7-accf-5254fe5a9007/volumes/kubernetes.io~secret/default-token-pzyxh |
执行后, 可以看到该目录被哪些进程所挂载
1 | 8392 mnt:[4026532536] /bin/bash/start.sh--logtostderr -v=2 /var/lib/kubelet/pods/81791176-a505-11e7-accf-5254fe5a9007/volumes/kubernetes.io~secret/default-token-pzyxh |
一级一级往上追踪父进程
1 | [root@k8s-node ~]# ps -ef | grep 8392 |
我遇到的情况是另一个专门用于收集日志的容器, 挂载了这个容器中的数据目录, 导致删除该容器时, 报device or resource busy
的错误
这种情况下, 你可以是用kubectl exec
或docker exec
进入到容器中, 将该目录 umount 掉, 过一会儿, 该 pod 即可被 Kubernetes 正确删除
参考文档: