场景

在k8s+containerd的环境上删除容器失败,容器一直保持在terminating状态。

containerd日志显示”failed to check network namespace closed: remove netns:unlinkat *: device or resource busy” ,不影响新创建的容器运行。

ip netns list 
报错 Invalid argument

寻找解决办法

百度搜索出来
mount信息显示netns还是被mount的,但是umount时又显示not mount
查看代码,测试验证都无效果。
真的坑!
根因其实时 ip netns add命令搞的鬼,和这个命令的行为有关,之前执行过这个命令导致containerd创建的netns不可见。
解决办法其实只有umount下/run/netns就好了。

能解决就不会单独写一篇文章了,还是Google搜索引擎强大!

echo 1 > /proc/sys/fs/may_detach_mounts 

注:在CentOS7.4引入了一个新的参数来控制内核的行为。 /proc/sys/fs/may_detach_mounts 默认设置为0;当系统有容器运行的时候,需要将该值设置为1。