You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何为EKS集群接近Pod上限配置CloudWatch告警?

EKS集群Pod上限接近告警设置及动态获取最大Pod数方案

一、设置CloudWatch告警的步骤

1. 确定集群最大Pod总容量

你当前通过ASG和实例规格计算的方式可行,若要动态获取可参考第二部分内容。无论哪种方式,先拿到集群最大Pod总数,作为告警阈值的基准。

2. 基于Container Insights创建运行中Pod数告警

你已使用的CloudWatch查询可直接用于构建告警:

SELECT SUM(node_number_of_running_pods) FROM SCHEMA(ContainerInsights, <你的集群名称>)

具体操作:

  • 打开CloudWatch控制台,进入告警 > 创建告警
  • 切换到查询标签,输入上述SQL并替换占位符为实际集群名
  • 设置告警条件:比如当运行中Pod数超过总上限的90%时触发
  • 配置通知:关联SNS主题,设置邮件、短信等通知渠道
  • 完成告警创建

3. 进阶:百分比阈值告警(结合动态最大Pod数)

若后续实现动态获取最大Pod数,可使用CloudWatch Metric Math设置百分比告警,比如计算运行中Pod数 / 总最大Pod数 > 0.8,告警阈值会随集群节点扩缩容自动调整。

二、动态获取集群最大Pod数的方法

1. 直接通过Kubernetes API查询

每个Kubernetes节点的status.allocatable.pods字段是该节点支持的最大可调度Pod数,求和即可得到集群总上限,执行命令:

kubectl get nodes -o jsonpath='{.items[*].status.allocatable.pods}' | tr ' ' '\n' | awk '{sum+=$1} END {print sum}'

该数值由Kubernetes根据节点ENI配额、实例规格自动计算,与eni-max-pods.txt数值一致,且能实时反映节点变化(如新增节点后自动更新总和)。

2. 推送最大Pod数到CloudWatch作为自定义指标

编写脚本定期计算总最大Pod数并推送到CloudWatch,方便后续告警使用:

#!/bin/bash
CLUSTER_NAME="你的集群名称"
MAX_PODS=$(kubectl get nodes -o jsonpath='{.items[*].status.allocatable.pods}' | tr ' ' '\n' | awk '{sum+=$1} END {print sum}')
aws cloudwatch put-metric-data \
  --namespace "EKS/ClusterCapacity" \
  --metric-name "TotalMaxPods" \
  --value "$MAX_PODS" \
  --dimensions "ClusterName=$CLUSTER_NAME"

将脚本部署为Kubernetes CronJob(比如每5分钟运行一次),即可自动更新CloudWatch中的最大Pod数指标。

3. 利用Prometheus指标(若已部署)

若你的EKS集群已部署Prometheus(如使用Amazon Managed Service for Prometheus),可直接查询sum(kube_node_status_allocatable_pods)得到集群总最大Pod数,结合sum(kube_pod_status_phase{phase="Running"})设置百分比告警。

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.30 09:00:30