k8s删除pod时,docker服务出现挂载点泄漏问题的解决

时间:2023-12-30 08:20:14

k8s更新版本后,老的POD一直出现Terminating,多久都不能删除。

然后,进入具体的节点机器之后,查看日志输出如下类似:

ERROR: driver "overlay" failed to remove root filesystem for 738f492a57f80951b279c3bd82f59b6230275a298ab74d7f26c4564cf3d1cf2c: remove /var/lib/docker/overlay/6031651302dba6053c5fde07937f4fd00dfc063577fa343b12c83f1c26b77887/merged: device or resource busy

然后,docker ps -a输出:

xxx Removal In Progress

然后,查看了网上的帖子,这个最有用:

http://www.jiangjiang.space/2017/09/25/%E8%A7%A3%E5%86%B3docker%E5%AE%B9%E5%99%A8%E5%88%A0%E9%99%A4%E5%90%8E%E5%A4%84%E4%BA%8Eremoval-in-progress-%E7%8A%B6%E6%80%81%E4%B8%8D%E9%87%8A%E6%94%BE/

我的追查的输出一样的。ntpd进程作怪。

k8s删除pod时,docker服务出现挂载点泄漏问题的解决

解决:

先手工停掉ntpd,清除docker。

# 报错为此docker卷无法umount
/var/lib/docker/devicemapper/mnt/85ced908cf8fcc4704a581fcc84724b5f6de232610b28e40b2be6f1ff159ead7
# 搜索所有进程是否有打开此卷的
grep -l 85ced908cf /proc/*/mountinfo
/proc/18683/mountinfo

# 看这个进程是什么进程

ps -f 18683
UID        PID  PPID  C STIME TTY      STAT   TIME CMD
ntp      18683     1  0 03:33 ?        Ss     0:00 /usr/sbin/ntpd -u ntp:ntp -g

# 很惊讶竟然是ntp
# ntpd 会打开所有挂在的卷,原因和原理还不得而知。但是能确定的是ntpd阻止了容器卷的umount,同时容器删除动作就hang住了
# 停掉ntpd
systemctl stop ntpd

# 卷被释放了
grep -l 85ced908cf /proc/*/mountinfo

# 成功删除
rm -rf/var/lib/docker/devicemapper/mnt/85ced908cf8fcc4704a581fcc84724b5f6de232610b28e40b2be6f1ff159ead7

  

然后,再编辑docker.service文件,重启服务。

#手工编辑
/etc/systemd/system/multi-user.target.wants/docker.service

# 在 Service 段最后加入私有挂在参数
[Service]
MountFlags=private

# 重新加载systemd
systemctl daemon-reload

# 重启docker
systemctl restart docker.service