一、kubelet镜像回收与容器回收
kubelet默认的镜像垃圾回收:
image-gc-high-threshold,触发镜像垃圾回收的磁盘使用率百分比。默认值为 85%。 #imageGCHighThresholdPercent
image-gc-low-threshold,镜像垃圾回收试图释放资源后达到的磁盘使用率百分比。默认值为 80%。 #imageGCLowThresholdPercent
官方文档:https://kubernetes.io/zh/docs/concepts/cluster-administration/kubelet-garbage-collection/
二、当工作节点资源不足时的情况
1、当磁盘使用率不足时
1.1 当磁盘使用率大于79%时,pod就不会调度到该节点上了。
1.2 磁盘使用率大于80%时,有些pod就会被驱逐了,同时新的pod不会被调度到该节点上
1.3 驱逐策略:
kubelet
首先根据他们对短缺资源的使用是否超过请求来排除 pod 的驱逐行为, 然后通过优先级, 然后通过相对于 pod 的调度请求消耗急需的计算资源。
kubelet
按以下顺序对要驱逐的 pod 排名:
BestEffort
或Burstable
,其对短缺资源的使用超过了其请求,此类 pod 按优先级排序,然后使用高于请求。Guaranteed
pod 和Burstable
pod,其使用率低于请求,最后被驱逐。Guaranteed
Pod 只有为所有的容器指定了要求和限制并且它们相等时才能得到保证。 由于另一个 Pod 的资源消耗,这些 Pod 保证永远不会被驱逐。 如果系统守护进程(例如kubelet
、docker
、和journald
)消耗的资源多于通过system-reserved
或kube-reserved
分配保留的资源,并且该节点只有Guaranteed
或Burstable
Pod 使用少于剩余的请求,然后节点必须选择驱逐这样的 Pod 以保持节点的稳定性并限制意外消耗对其他 pod 的影响。 在这种情况下,它将首先驱逐优先级最低的 pod。
必要时,kubelet
会在遇到 DiskPressure
时逐个驱逐 Pod 来回收磁盘空间。 如果 kubelet
响应 inode
短缺,它会首先驱逐服务质量最低的 Pod 来回收 inodes
。 如果 kubelet
响应缺少可用磁盘,它会将 Pod 排在服务质量范围内,该服务会消耗大量的磁盘并首先结束这些磁盘。
三、修改测试(kubeadm安装的环境)
1、手动修改kubelet配置,更改回收策略,当磁盘达到60%时,就触发镜像垃圾回收
[root@node1 ~]# ll /var/lib/kubelet/config.yaml -rw-r--r-- 1 root root 905 Sep 24 11:10 /var/lib/kubelet/config.yaml [root@node1 ~]# tail -5 /var/lib/kubelet/config.yaml streamingConnectionIdleTimeout: 0s syncFrequency: 0s volumeStatsAggPeriod: 0s imageGCHighThresholdPercent: 60 #触发镜像垃圾回收的磁盘使用率百分比 imageGCLowThresholdPercent: 50 #镜像垃圾回收试图释放资源后达到的磁盘使用率百分比
2、重启kubelet
systemctl restart kubelet