报错描述:重启Guardian时失败,步骤为“通过TOS停止server”,显示内容为”Guardian_server has no ready pod”
查看日志详情,显示如下:
Guardian_server 的pod在ce24节点处于Terminating状态。
通过服务详情查看状态:
在这里说明一下,常见pod的几种状态
然后,在服务器端,查看集群中pod的状态,发现guardian的一个pod处于Terminating,同时排除其他pod报错。到目前为止,需要对其进行强制删除,并重启该pod以恢复Guardian运行。
定位到pod以后,使用kubectl logs <pod-names>查看pod的日志信息。此时看到无法查看日志。
随后,通过systemctl status命令查看是否存在失败的服务,发现有1个失败的服务。
通过systemctl --failed命令查看失败的服务
判断是由于docker.socket服务出现问题,导致重启服务时,无法为服务分配新的pod。
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
恢复docker服务以后,在Manager界面进行TOS服务的重启,重启成功。随后分别进行Aquila和Guardian服务的重启,重启成功。最后一键重启其余服务,集群恢复运行。
5 修复方法说明
docker创建的容器是无状态的,一些状态信息(例如数据、配置文件等)其实都已经挂载进宿主机或者持久化到其他地方;这个时候可以通过上面的修复方法,关闭docker相关容器和进程,删除/var/lib/docker/下面容器相关的无状态信息;然后重启docker和kubelet,这个时候k8s会自动将之前的容器调度起来;