问题描述
副本控制集为daemonsets类型Pod,被delete后没有被重新拉起。
原因
此问题Pod所在node的/etc/docker/daemon.json文件被修改过,修改daemon.json时内容写错了,导致重启docker跟daemon-reload失败并报错,于是把daemon.json中填写错误的内容改正后,可以成功重启docker跟daemon-reload。但因为第一次重启失败导致了此问题Pod所在node上的kubelet、kube-proxy有了问题,所以Pod被delete时没有被重新拉起。
排查过程
1、kubectl get ds --all-namespaces 查看此Pod的副本控制集是否正常。(如果副本控制集是rs 命令:kubectl get rs 如果副本控制集是deployment 命令:kubectl get deployment)
输出结果显示此Pod的副本控制集状态是正常。
2、查看此Pod daemonsets 的yaml是否正常
kubectl get ds Pod的ds名 -oyaml
status:
currentNumberScheduled: 14
desiredNumberScheduled: 14
numberAvailable: 36
numberMisscheduled: 0
numberReady: 36
numberUnavailable: 107
observedGeneration: 1
updatedNumberScheduled: 14
3、kubectl get node 确认node状态是否正常,输出结果显示有问题Pod的Node是NotReady状态。
4、kubectl describe node $node名
结果发现从前一天此Node就没有了心跳上报:
5、登陆此Node上,重启docker、daemon-reload依旧NotReady,于是再重启kubelet、kube-proxy后解决。
6、可以在排查时看下node的/var/log/message日志。
或者用journalctl查看日志:
journalctl -u kubelet |tail
journalctl -xe
journalctl -u kube-scheduler
journalctl -xefu kubelet
journalctl -u kube-apiserver
journalctl -u kubelet |tail
journalctl -xe
journalctl -u kube-scheduler
journalctl -xefu kubelet
journalctl -u kube-apiserver