跳到主要内容

KubeQuotaAlmostFull 告警:含义、常见原因与处置

Prometheus 告警 KubeQuotaAlmostFull 是什么意思、常见原因有哪些、PromQL 规则怎么写、响了怎么处置,附可直接使用的规则 YAML。

最后校对于

一个命名空间的某项 ResourceQuota(CPU、内存、Pod 数、存储等)已用到 90% 到 100% 之间。现在还没出问题;配额一旦用满,API Server 会拒绝在这个命名空间创建新的 Pod 和对象,通常表现为发布失败,或者该扩容时扩不出来。

规则​

kube_resourcequota{job="kube-state-metrics", type="used"}
/ ignoring(instance, job, type)
(kube_resourcequota{job="kube-state-metrics", type="hard"} > 0)
> 0.9 < 1

告警信息:Namespace {{ $labels.namespace }} is using {{ $value | humanizePercentage }} of its {{ $labels.resource }} quota.

常见原因​

  • 团队的负载增长了,配额一直没调整。
  • HPA 扩容后接近了配额允许的上限。
  • 已结束的 Pod、旧的 ReplicaSet、不再使用的 PVC 仍然占着配额。
  • 发布时需要在现有副本之外再放下 surge Pod。

处置步骤​

  1. kubectl describe quota -n <ns> 看是哪一项(cpu/memory/pods/storage)触顶;
  2. kubectl get pod -n <ns> -o custom-columns 统计各工作负载的 requests 占用,找出大户;
  3. 确认是否有已停止但未清理的资源仍占着配额;
  4. 确需更多配额的联系集群管理员调整 ResourceQuota。

补充说明​

  • 这是提醒级别的规则,应该发给命名空间的负责人。更紧急的后续告警是 KubeQuotaFullyUsed 和 KubeQuotaExceeded。
  • 表达式里限定了 job="kube-state-metrics"。如果你的采集任务或命名空间叫别的名字,要改掉这些匹配条件,否则规则永远匹配不到数据。

用到的指标​

  • kube_resourcequota(kube-state-metrics)

相关告警​

Prometheus 规则 YAML​

加到通过 rule_files 加载的规则文件里即可;也可以一次下载全部 Kubernetes 规则:kubernetes.yml。

- alert: KubeQuotaAlmostFull
expr: |-
kube_resourcequota{job="kube-state-metrics", type="used"}
/ ignoring(instance, job, type)
(kube_resourcequota{job="kube-state-metrics", type="hard"} > 0)
> 0.9 < 1
for: 15m
labels:
severity: info
annotations:
summary: "Namespace {{ $labels.namespace }} is using {{ $value | humanizePercentage }} of its {{ $labels.resource }} quota."
runbook_url: "https://n9e.github.io/alert-rules/kubernetes/kubequotaalmostfull"

用夜莺:这条规则内置在 Kubernetes 集成模板里,导入到业务组后,夜莺发出的每条告警都会带上处置步骤。

来源与许可​

规则表达式改编自 kubernetes-mixin(Apache-2.0)。处置步骤来自夜莺的集成模板(Apache-2.0),含义和常见原因为本页撰写。