虚拟机中使用kubernetes难免会经常关机,再启动的时候,发现有一些核心组件启动失败,尝试了一下把状态是已退出的容器清理掉,核心组件启动正常。

一般情况下,可以手动执行命令:docker rm $(docker ps -a -q --filter status=exited)去清理已退出的容器。

但是,手动清理太麻烦了,写一个service让它在开机的时候(docker启动完成时)就自动清理,岂不美哉。

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
cat <<'EOF' > /etc/systemd/system/docker-clean.service
[Unit]
Description=docker containers clean
After=docker.service
ConditionFileNotEmpty=/usr/bin/docker
[Service]
Type=oneshot
RemainAfterExit=true
ExecStart=/bin/sh -c '/usr/bin/docker rm $(/usr/bin/docker ps -a -q --filter status=exited) 2>/dev/null || :'
[Install]
WantedBy=multi-user.target
EOF

systemctl daemon-reload
systemctl enable docker-clean.service
systemctl start docker-clean.service
systemctl status docker-clean.service

经过我多次反复启动kubernetes集群虚拟机,核心组件都可以正常启动,阔以~