k8s根目录超过多少会触发驱逐Pod

Kubernetes 节点存储阈值与 Pod 驱逐机制笔记

一、节点根目录使用阈值

1.1 阈值引发的驱逐情况

在 Kubernetes 集群中,节点根目录的使用情况会根据不同配置和实际场景有所变化。当根目录使用量超过设定的阈值时,节点可能会启动 Pod 驱逐流程。

1.2 默认阈值情况

不同 Kubernetes 版本的默认根目录使用阈值存在差异:

  • 在 Kubernetes 1.15 及之前的版本中,默认根目录使用阈值为 90%。
  • 在 Kubernetes 1.16 及之后的版本中,默认根目录使用阈值调整为 80%。

若 kubelet 配置文件中未明确设置根目录使用阈值,Kubernetes 将采用对应版本的默认阈值。

1.3 阈值修改方法

可以通过修改 kubelet 的配置来调整根目录使用阈值。kubelet 的配置文件通常位于 /etc/kubernetes/kubelet.conf 。修改时,可在 kubelet 的启动参数中添加 --eviction - hard 相关设置,示例如下:

--eviction - hard=memory.available<500Mi,nodefs.available<10%,nodefs.inodesFree<5%

其中:

  • nodefs.available:用于设置节点根目录可用空间的百分比阈值,当根目录使用超过该阈值时,节点将启动驱逐流程。
  • memory.available:设置内存可用的百分比或绝对值。
  • nodefs.inodesFree:设置节点根目录可用的 inode 百分比。

注意事项:修改 kubelet 配置文件前,请务必备份原始配置文件,以防需要还原。同时,驱逐过程可能导致节点上的 Pod 被删除,调整阈值时需谨慎。建议在根目录使用接近阈值时,及时进行清理或扩容操作,避免触发驱逐。

1.4 相关图示

阈值相关图片1
阈值相关图片2
阈值相关图片3
阈值相关图片4
阈值相关图片5
阈值相关图片6

二、/var/lib/docker/ 和 /var/lib/kubelet/ 目录满导致的 Pod 驱逐

2.1 驱逐顺序

/var/lib/docker//var/lib/kubelet/ 目录满时,kubelet 会按照以下顺序执行 Pod 驱逐操作:

  1. 驱逐非必需的本地存储卷绑定的 Pod:若 Pod 使用了本地存储卷且无其他节点备份,磁盘空间不足时,kubelet 会优先驱逐这类 Pod。
  2. 驱逐最早未使用的 Pod(LRU):若第一步无法释放足够空间,kubelet 会选择最近最久未使用的 Pod 进行驱逐,这类 Pod 通常优先级较低、重要性不高。
  3. 驱逐运行着的、优先级低的 Pod:若前两步仍无法满足空间需求,kubelet 可能会驱逐优先级较低的运行中 Pod。Pod 优先级可通过设置 PodSpecpriorityClass 或者依据 Pod 的 QoS 类型来定义。

2.2 Pod 的 QoS 等级

Kubernetes 根据 Pod 的资源需求和容忍度,将 Pod 划分为三个品质服务(Quality of Service, QoS)等级,这些等级与 Pod 的调度、驱逐和资源分配相关:

  • Guaranteed(保证):此类 Pod 有明确的 CPU 和内存资源需求,在集群中默认不会被驱逐,可保证获得所需资源。
  • Burstable(可伸缩):Pod 有一定资源限制,但可根据工作负载瞬时需求使用更多资源,可能与其他 Pod 竞争资源,在资源紧张时可能被驱逐。
  • BestEffort(尽力而为):Pod 无明确资源需求,优先级最低,会尽量使用剩余空闲资源,资源紧张时会首先被驱逐。

虽然目录满时的驱逐顺序与 QoS 等级无直接关联,但 QoS 等级会影响 Pod 在集群中的调度、资源分配和优先级。

2.3 日志查看与参考链接

2.4 优先级规划建议

在实际部署中,可根据业务需求为不同类型的 Pod 设置不同优先级,确保重要应用或服务稳定运行。设置 Pod 优先级可通过 priorityClass 字段或 annotation 实现,可在 Pod 创建时使用 kubectl 或编排工具(如 Helm)进行配置。进行优先级规划时,需综合考虑应用需求、资源分配和业务优先级等因素。

2.5 官方文档参考

[Node - pressure Eviction](https://kubernetes.io/docs/concepts/scheduling - eviction/node - pressure - eviction/)

Kubernetes中,硬盘到达一定使用量后会驱逐Pod,以避免磁盘空间不足的情况。默认情况下,硬盘使用量达到80%时,Kubernetes会开始清理不需要的数据以释放磁盘空间。如果硬盘使用量达到85%,Kubernetes会开始驱逐Pod。如果需要更改这些默认配置,可以通过修改kubelet的启动参数来实现。 以下是修改kubelet启动参数的步骤: 1. 编辑kubelet的启动配置文件,例如: ``` vi /etc/systemd/system/kubelet.service.d/10-kubeadm.conf ``` 2. 找到“ExecStart=/usr/bin/kubelet”这一行,添加需要更改的参数,例如: ``` ExecStart=/usr/bin/kubelet --eviction-hard="memory.available<100Mi,nodefs.available<10%,nodefs.inodesFree<10%" --eviction-soft="memory.available<200Mi,nodefs.available<20%,nodefs.inodesFree<20%" --eviction-soft-grace-period=1m --eviction-pressure-transition-period=5m ``` 在上述示例中,我们添加了4个参数: - `--eviction-hard`:定义硬阈值,即当内存可用空间小于100Mi或节点文件系统可用空间小于10%或节点文件系统可用inode数量小于10%时,将立即驱逐Pod。 - `--eviction-soft`:定义软阈值,即当内存可用空间小于200Mi或节点文件系统可用空间小于20%或节点文件系统可用inode数量小于20%时,将开始驱逐Pod。 - `--eviction-soft-grace-period`:定义软阈值容忍时间,即当软阈值条件满足后,Kubernetes将等待1分钟后再开始驱逐Pod。 - `--eviction-pressure-transition-period`:定义硬阈值到软阈值的过渡时间,即当内存可用空间小于100Mi或节点文件系统可用空间小于10%或节点文件系统可用inode数量小于10%时,Kubernetes将等待5分钟后再开始驱逐Pod。 3. 修改完成后,保存文件并重新加载kubelet的配置文件: ``` systemctl daemon-reload ``` 4. 重启kubelet服务: ``` systemctl restart kubelet ``` 修改完成后,Kubernetes将根据新的配置来判断何时开始驱逐Pod,从而避免磁盘空间不足的情况。
评论 8
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值