今天发现私有云上的Kubernetes cluster中的一个node似乎不工作了,连带的的应用也挂掉了,并且长时间没有恢复。在kubernetes上创建POD时,有个节点一直不能分配到POD,并且该节点上有些pod的状态为Pending。
首先,我查看集群中的所有Pods状态,发现node1和node3上的Pods均正常(running状态),但位于node2上的Pods均为“Pending”状态,显然node2节点出问题了。此时来查看nodes状态发现node2是异常的NotReady状态。
#查看pod状态
kubectl get pod -A -o wide
# 查看节点
kubectl get nodes
#kubectl get nodes NAME STATUS ROLES AGE VERSION k8s-node1 Ready master,node 7d18h v1.20.6 k8s-node2 NotReady master,node 7d18h v1.20.6 k8s-node3 Ready master,node 7d18h v1.20.6
如果你此刻去尝试查看(kubectl describe) 这几个pod的状态,多半你会失败,因为Pod在频繁重启,1-2s钟新创建的Pod就会被kill掉,导致你无法查看其状态。
我直接查看一下node2的状态,果不其然,我得到了一些Warning events信息:
#查询node2节点的状态
kubectl describe node k8s-node2
# kubectl describe node k8s-node2 ... ... Events: FirstSeen LastSeen Count From SubObjectPath Type Reason Message --------- -------- ----- ---- ------------- -------- ------ ------- 5m 5m 1 kubelet, k8s-node2 Normal Starting Starting kubelet. 5m 5m 2 kubelet, k8s-node2 Normal NodeHasSufficientDisk Node k8s-node2 status is now: NodeHasSufficientDisk 5m 5m 2 kubelet, k8s-node2 Normal NodeHasSufficientMemory Node k8s-node2 status is now: NodeHasSufficientMemory 5m 5m 2 kubelet, k8s-node2 Normal NodeHasNoDiskPressure Node k8s-node2 status is now: NodeHasNoDiskPressure 5m 5m 1 kubelet, k8s-node2 Normal NodeAllocatableEnforced Updated Node Allocatable limit across pods 5m 5m 1 kubelet, k8s-node2 Normal NodeHasDiskPressure Node k8s-node2 status is now: NodeHasDiskPressure 5m 14s 23 kubelet, k8s-node2 Warning EvictionThresholdMet Attempting to reclaim nodefs
从状态可以看到有以下异常的信息:
status is now: NodeHasSufficientDisk
status is now: NodeHasSufficientMemory
status is now: NodeHasNoDiskPressure
1) NodeHasSufficientDisk:表示这个节点没有空闲的磁盘空间了,已经不能在上面创建POD了。
2) NodeHasSufficientMemory:表示这个节点上可用内存已经很少了。
3) NodeHasNoDiskPressure:表示这个节点上可用磁盘空间已经很少了。
既然提到了磁盘不足,我们就来看看磁盘占用情况:
# df -h 文件系统 容量 已用 可用 已用% 挂载点 udev 2.0G 0 2.0G 0% /dev tmpfs 396M 46M 350M 12% /run /dev/sda1 5.8G 5.1G 448M 97% /var tmpfs 2.0G 288K 2.0G 1% /dev/shm /dev/sdb1 99G 5.2G 89G 6% /data tmpfs 396M 0 396M 0% /run/user/0 ... ...
因此,进入node2节点 检查磁盘使用率,发现/var/lib/docker所在的分区,已经使用了97%.
删除/var/lib/docker 所在分区的一些临时文件后或把该目录挂载到一较大的分区后,重启kebelet后问题解决。
#重启kubelet
systemctl restart kubelet
systemctl status kubelet
、、
https://tonybai.com/2017/10/16/out-of-node-resource-handling-in-kubernetes-cluster/