Kubernetes 对象状态的度量指标

kube-state-metrics,一个生成和暴露集群级别指标的附加代理。

Kubernetes API 中 Kubernetes 对象的状态可以作为指标暴露。一个名为 kube-state-metrics 的附加代理可以连接到 Kubernetes API Server,并暴露一个 HTTP 端点,其中包含根据集群中单个对象状态生成的指标。它暴露了关于对象状态的各种信息,如标签和注解、启动和终止时间、状态或对象当前所处的阶段。例如,在 Pod 中运行的容器会创建 kube_pod_container_info 指标。这包括容器名称、所属 Pod 名称、Pod 运行所在的命名空间、容器镜像名称、镜像 ID、容器 Spec 中的镜像名称、正在运行的容器 ID 以及作为标签的 Pod ID。

现在可以使用能够抓取 kube-state-metrics 端点(例如通过 Prometheus)的外部组件来实现以下用例。

示例:使用 kube-state-metrics 的指标查询集群状态

kube-state-metrics 生成的指标序列有助于深入了解集群,因为它们可用于查询。

如果你使用 Prometheus 或其他使用相同查询语言的工具,以下 PromQL 查询会返回未就绪的 Pod 数量:

count(kube_pod_status_ready{condition="false"}) by (namespace, pod)

示例:基于 kube-state-metrics 的告警

从 kube-state-metrics 生成的指标也允许对集群中的问题进行告警。

如果你使用 Prometheus 或类似的、使用相同告警规则语言的工具,如果 Pod 处于 Terminating 状态超过 5 分钟,以下告警将触发:

groups:
- name: Pod state
  rules:
  - alert: PodsBlockedInTerminatingState
    expr: count(kube_pod_deletion_timestamp) by (namespace, pod) * count(kube_pod_status_reason{reason="NodeLost"} == 0) by (namespace, pod) > 0
    for: 5m
    labels:
      severity: page
    annotations:
      summary: Pod {{$labels.namespace}}/{{$labels.pod}} blocked in Terminating state.

本页面上的条目引用了提供 Kubernetes 所需功能的第三方产品或项目。Kubernetes 项目作者对这些第三方产品或项目概不负责。有关更多详细信息,请参阅 CNCF 网站指南

在建议添加额外第三方链接的更改之前,你应该阅读内容指南

最后修改于 2024 年 3 月 11 日晚上 10:46 PST:新增关于 kube-state-metrics 的章节 (c1e7578efb)