问题描述
1、kubernetes突然出现了Evicted状态的pod。
2、使用命令kubectl get po -o wide
发现node2上所有的pod状态都变成Evicted了,别的node上的pod还是正常的。
3、再使用命令kubectl describe po po-name
查看pod的详细描述,发现报错如下NodeHasNoDiskPressure
4、查看主机磁盘空间,果然/var下磁盘空间不足使用超过80%,于是决定修改docker的默认存储路径至/data/docker。
解决
1、首先要删除Evicted状态的pod
kubectl get po |grep Evicted | awk '{print $1}'|xargs kubectl delete po
2、停止kubelet和docker
> systemctl stop docker
> systemctl stop kubelet
3、将/var/lib/docker移动到/data路径
mv /var/lib/docker /data/docker
4、修改docker.service,在ExecStart后面指定目录,如下:
> vim /usr/lib/systemd/system/docker.service
ExecStart=/usr/bin/dockerd -H fd:// --containerd=/run/containerd/containerd.sock --graph /data/docker
5、启动docker
> systemctl daemon-reload
> systemctl start docker
> systemctl start kubelet
6、查看是否生效
> docker info
...
Docker Root Dir: /data/docker
...
扩展
如果kubernetes出现Evicted状态的pod不一定是磁盘空间的问题,也可能是其他资源耗尽的原因,可以通过kubectl decribe 看看是否有有用信息。