Kubernetes Pod无法删除

问题发现

在node节点断电 重启后,发现有的pod节点状态不正常,之前的回收策略也都做了,就调研下是什么原因导致的

pod一直处于Terminated: ExitCode 状态

解决

直接删除,无法飘移

1
2
3
kubectl delete pod <podname> --namespace=<namspacer> --grace-period=0 --force
发现pod无法漂移
docker ps -a查看对应docker容器的状态,发现这两个Pod的docker容器处于Dead状态。使用docker rm <container id>,提示Device is Busy,无法删除。

现象是由于systemd服务PrivateTmp=true引起

最根本的方法是,当机器加入时,在 docker.service 中加上:

1
2
[Service]
MountFlags=slave

关于Systemd的MountFlags

1
2
3
4
5
6
7
MountFlags: 配置Systemd服务的Mount Namespace配置。会影响服务进程上下文中挂载点的信息,即服务是否会继承主机上已有的挂载点,以及如果服务运行时执行了挂载或卸载设备的操作,是否会真实地在主机上产生效果。可选值为shared、slave和private

shared:服务与主机共用一个Mount Namespace,会继承主机挂载点,服务挂载或卸载设备时会真实地反映到主机上

slave:服务使用独立的Mount Namespace,会继承主机挂载点,但服务对挂载点的操作只在自己的Namespace内生效,不会反映到主机上

private: 服务使用独立的Mount Namespace,在启动时没有任何挂载点,服务对挂载点的操作也不会反映到主机上
Donate