Kubelet Eviction Manager工作机制

Kubelet Eviction Manager:资源回收策略解析
本文详细介绍了Kubelet Eviction Manager的工作机制,包括驱逐信号、阈值、周期、节点状态、资源回收策略等内容。在资源紧张时,Kubelet会根据预设的软硬驱逐策略回收Pod,确保节点稳定性。驱逐过程涉及内存、磁盘等资源,以及QoS等级的考虑,以最小化不必要的驱逐操作。

一、概述

​ 在可用计算资源较少时,kubelet为保证节点稳定性,会主动地结束一个或多个pod以回收短缺地资源,这在处理内存和磁盘这种不可压缩资源时,驱逐pod回收资源的策略,显得尤为重要。下面来具体研究下Kubelet Eviction Policy的工作机制。

  • kubelet预先监控本节点的资源使用,防止资源被耗尽,保证节点稳定性。
  • kubelet会预先Fail N(>=1)个Pod,以回收出现紧缺的资源。
  • kubelet在Fail一个pod时,kill掉pod内所有container,并设置pod.status.phase = Failed。
  • kubelet按照事先设定好的Eviction Threshold来触发驱逐动作,实现资源回收。

1.1 驱逐信号

在源码pkg/kubelet/eviction/api/types.go中定义了以下及几种Eviction Signals:

Eviction Signal Description
memory.available := node.status.capacity[memory] - node.stats.memory.workingSet
nodefs.available := node.stats.fs.available
nodefs.inodesFree := node.stats.fs.inodesFree
imagefs.available := node.stats.runtime.imagefs.available
imagefs.inodesFree := node.stats.runtime.imagefs.inodesFree
allocatableMemory.available := pod.allocatable - pod.workingSet
pid.available := node.MaxPID - node.NumOfRunningProcesses

上表主要涉及三个方面,memory、file system和pid。其中kubelet值支持2种文件系统分区:

  1. nodefs:kubelet用来存储volume和daemon logs等
  2. imagesfs:容器运行时(docker等)用来保存镜像和容器的writable layer

1.2 驱逐阈值

kubelet的入参接收用户定义的eviction signal和eviction threshold的映射关系,格式如下:</

systemctl status kubeletkubelet.service - kubelet: The Kubernetes Node Agent Loaded: loaded (/usr/lib/systemd/system/kubelet.service; enabled; vendor preset: disabled) Drop-In: /usr/lib/systemd/system/kubelet.service.d └─10-kubeadm.conf Active: active (running) since 三 2025-06-25 10:01:04 CST; 35s ago Docs: https://kubernetes.io/docs/ Main PID: 22211 (kubelet) Tasks: 47 Memory: 122.3M CGroup: /system.slice/kubelet.service └─22211 /usr/bin/kubelet --bootstrap-kubeconfig=/etc/kubernetes/bootstrap-kubelet.conf --kubeconfig=/etc/kubernetes/kubelet.conf --config=/var/lib/kubelet/config.yaml --network-plugin=cni --pod... 6月 25 10:01:28 qr36 kubelet[22211]: E0625 10:01:28.204025 22211 eviction_manager.go:560] "Eviction manager: cannot evict a critical pod" pod="kube-system/kube-proxy-m9mbs" 6月 25 10:01:28 qr36 kubelet[22211]: E0625 10:01:28.204036 22211 eviction_manager.go:560] "Eviction manager: cannot evict a critical pod" pod="monitoring/node-exporter-qlpds" 6月 25 10:01:28 qr36 kubelet[22211]: I0625 10:01:28.204045 22211 eviction_manager.go:390] "Eviction manager: unable to evict any pods from the node" 6月 25 10:01:38 qr36 kubelet[22211]: I0625 10:01:38.521071 22211 eviction_manager.go:338] "Eviction manager: attempting to reclaim" resourceName="memory" 6月 25 10:01:38 qr36 kubelet[22211]: I0625 10:01:38.521113 22211 eviction_manager.go:349] "Eviction manager: must evict pod(s) to reclaim" resourceName="memory" 6月 25 10:01:38 qr36 kubelet[22211]: I0625 10:01:38.521144 22211 eviction_manager.go:367] "Eviction manager: pods ranked for eviction" pods=[kube-system/calico-node-s4p2t kube-system/kube...xporter-qlpds] 6月 25 10:01:38 qr36 kubelet[22211]: E0625 10:01:38.521180 22211 eviction_manager.go:560] "Eviction manager: cannot evict a critical pod" pod="kube-system/calico-node-s4p2t" 6月 25 10:01:38 qr36 kubelet[22211]: E0625 10:01:38.521192 22211 eviction_manager.go:560] "Eviction manager: cannot evict a critical pod" pod="kube-system/kube-proxy-m9mbs" 6月 25 10:01:38 qr36 kubelet[22211]: E0625 10:01:38.521205 22211 eviction_manager.go:560] "Eviction manager: cannot evict a critical pod" pod="monitoring/node-exporter-qlpds" 6月 25 10:01:38 qr36 kubelet[22211]: I0625 10:01:38.521215 22211 eviction_manager.go:390] "Eviction manager: unable to evict any pods from the node" Hint: Some lines were ellipsized, use -l to show in full. [root@qr36 ~]$>#free -m total used free shared buff/cache available Mem: 64196 27382 336 3251 36477 32916 Swap: 0 0 0
06-26
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值