在 Kubernetes 的生产环境中,节点资源(如内存、磁盘空间、inode)紧张时,系统可能会自动进行 Pod 驱逐以保障系统的稳定运行。Kubelet 提供了两类资源回收机制配置项:evictionHard 和 evictionSoft,它们控制了节点的资源驱逐行为。本文将对这两个配置进行详细解析,并说明它们对应的资源目录路径。
一、什么是 Eviction 策略?
Eviction 是 Kubernetes 的一种资源回收机制。当节点资源紧张时,Kubelet 会根据配置的驱逐策略主动驱逐低优先级的 Pod,从而释放资源,避免节点崩溃。
驱逐策略分为:
• Hard Eviction(硬驱逐):一旦触发,立即执行 Pod 驱逐操作。
• Soft Eviction(软驱逐):满足条件后并不会立即驱逐,而是等到一段宽限期(evictionSoftGracePeriod)后才驱逐。
二、evictionHard 配置详解
evictionHard:
imagefs.available: 10%
memory.available: 300Mi
nodefs.available: 10%
nodefs.inodesFree: 5%
当系统资源低于以下阈值时,Kubelet 会立即驱逐部分 Pod。
项目 含义 资源路径
imagefs.available: 10% 容器镜像存储盘的剩余空间不足 10% 时触发 一般为 /var/lib/containerd 或 /var/lib/docker
memory.available: 300Mi 可用内存小于 300Mi 时触发 系统整体内存
nodefs.available: 10% 根文件系统剩余空间不足 10% 时触发 通常为 / 或 /var/lib/kubelet
nodefs.inodesFree: 5% 根文件系统剩余 inode 少于 5% 时触发 inode 反映的是文件系统中可创建的文件数
三、evictionSoft 配置详解
evictionSoft:
imagefs.available: 10%
memory.available: 512Mi
nodefs.available: 15%
nodefs.inodesFree: 10%
当系统资源低于以下阈值时,Kubelet 并不会立刻驱逐 Pod,而是等待 evictionSoftGracePeriod 设定的宽限期后再做决定。
项目 含义 资源路径
imagefs.available: 10% 镜像盘可用空间小于 10% 时进入软驱逐等待 /var/lib/containerd 或 /var/lib/docker
memory.available: 512Mi 可用内存小于 512Mi 时进入软驱逐等待 系统 RAM
nodefs.available: 15% 根盘可用空间小于 15% 时触发软驱逐 /、/var、/var/lib/kubelet
nodefs.inodesFree: 10% inode 使用超过 90%,剩余不到 10% 时触发软驱逐 根文件系统 inode
四、补充说明
• imagefs vs nodefs:
• imagefs:容器运行时使用的文件系统(如 /var/lib/containerd)。
• nodefs:节点自身的根文件系统(如 / 或 /var/lib/kubelet)。
• 硬驱逐优先级高于软驱逐:硬驱逐一旦触发,Pod 会立即被移除,通常用于防止节点失控;而软驱逐则适用于提前预警式释放资源。
• 配置位置:
这些配置项一般位于 kubelet 的启动参数中(如 /var/lib/kubelet/config.yaml),或以参数形式传入 kubelet 启动命令中。