Kubernetes节点资源耗尽,导致Nodes节点状态NotReady

 

今天发现私有云上的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/

 

posted @ 2022-07-21 11:52  i潘小潘  阅读(5207)  评论(0编辑  收藏  举报