You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

在GKE上配置Kubelet阈值解决nodeHasDiskPressure临时告警问题

解决GKE节点部署后触发nodeHasDiskPressure告警的配置方案

我之前也碰到过一模一样的情况——每次部署应用后,GKE节点总会触发磁盘压力告警,过十来分钟又自动恢复。其实这大多是因为GKE默认的磁盘压力阈值比较严格,部署时临时的磁盘占用(比如拉取镜像、生成临时文件)刚好触碰到了阈值。下面是几种在GKE里调整这些阈值的可行方法:

1. 自定义节点池的kubelet驱逐阈值

GKE允许在自定义节点池中配置kubelet的驱逐参数,用来调整磁盘压力的触发条件。你可以通过gcloud命令创建或更新节点池时指定这些参数:

创建新的自定义节点池

gcloud container node-pools create disk-friendly-pool \
  --cluster=你的集群名称 \
  --zone=你的集群区域 \
  --kubelet-config=eviction-hard=imagefs.available<15%,nodefs.available<10% \
  --kubelet-config=eviction-soft=imagefs.available<20%,nodefs.available<15% \
  --kubelet-config=eviction-soft-grace-period=imagefs.available=5m,nodefs.available=5m

更新已有自定义节点池

如果已经有节点池,也可以直接更新:

gcloud container node-pools update 你的节点池名称 \
  --cluster=你的集群名称 \
  --zone=你的集群区域 \
  --kubelet-config=eviction-hard=imagefs.available<15%,nodefs.available<10%

参数说明:

  • eviction-hard:硬阈值,达到后立即驱逐Pod(默认更严格,比如nodefs.available<10%可能默认是5%)
  • eviction-soft:软阈值,达到后等待指定宽限期再驱逐
  • imagefs:对应容器镜像存储的磁盘分区,nodefs是节点的根磁盘分区

2. 扩容节点磁盘大小

如果你的节点本身磁盘容量偏小,部署时的临时占用很容易触达阈值。直接扩容节点磁盘是最直接的缓解方式:

gcloud container node-pools update 你的节点池名称 \
  --cluster=你的集群名称 \
  --zone=你的集群区域 \
  --disk-size=60GB

扩容后需要滚动重启节点池才能让新的磁盘大小生效:

gcloud container node-pools rollout restart 你的节点池名称 \
  --cluster=你的集群名称 \
  --zone=你的集群区域

3. 调整镜像GC清理阈值

GKE节点会自动清理旧容器镜像,但默认的清理触发阈值可能偏高,导致镜像堆积占用磁盘。可以通过kubelet参数调整:

gcloud container node-pools update 你的节点池名称 \
  --cluster=你的集群名称 \
  --zone=你的集群区域 \
  --kubelet-config=image-gc-high-threshold=85% \
  --kubelet-config=image-gc-low-threshold=70%

这样当磁盘使用率超过85%时,镜像GC会自动启动,清理到使用率降到70%为止,减少磁盘占用压力。

注意事项

  • 只有自定义节点池支持配置这些kubelet参数,托管节点池(默认创建的)无法修改这类参数
  • 阈值设置不要过于宽松,否则真的出现磁盘资源耗尽时,节点无法及时触发告警和驱逐,会影响集群稳定性
  • 调整后建议多部署几次应用观察,根据实际情况微调参数

内容的提问来源于stack exchange,提问作者snowflakekiller

火山引擎 最新活动