内容纲要
概要描述
本文主要为了解决当docker服务出现问题,导致TOS Master的etcd,api,controller等容器无法正常启动的终极解决方法。
详细说明
1 TOS Master状态为not running
docker ps | grep etcd
docker ps | grep apiserver
docker ps | grep scheduler
以上服务均没有docker container启动。
2 查看docker服务的状态
systemctl status docker
3 查看docker的日志信息
journalctl -u docker
和docker的服务状态都报错:
time="2020-01-10T15:59:01.088526607+08:00" level=error msg="Handler for GET /v1.31/images/sha256:128c9e26297acce8f97b36462f2a94042a283821761c915ed07228c815b11861/json returned error: stat /var/lib/docker/overlay2/0b338cc678565baa32fa0c82523d26eea517f0d08de7efa92b454827bfe6ad97: no such file or directory"
4 修复方法:
systemctl stop docker
kill $(ps -aux|grep docker |awk '{print $2}')
kill $(ps -ef | grep docker-containerd-shim | awk '{ print $2 }')
rm -rf /var/lib/docker/*
docker-storage-setup --reset (可跳过)
docker-storage-setup (可跳过)
systemctl restart docker
docker load -i /etc/tos/conf/tos.tar.gz
5 修复方法说明
docker创建的容器是无状态的,一些状态信息(例如数据、配置文件等)其实都已经挂载进宿主机或者持久化到其他地方;这个时候可以通过上面的修复方法,关闭docker相关容器和进程,删除/var/lib/docker/下面容器相关的无状态信息;然后重启docker和kubelet,这个时候k8s会自动将之前的容器调度起来;