Kubernetes 对象状态的指标

kube-state-metrics,一个用于生成和公开集群级别指标的附加代理。

Kubernetes API 中 Kubernetes 对象的状态可以作为指标公开。一个名为 kube-state-metrics 的附加代理可以连接到 Kubernetes API 服务器,并公开一个 HTTP 端点,其中包含从集群中各个对象的状态生成的指标。它公开了有关对象状态的各种信息,例如标签和注释、启动和终止时间、状态或对象当前所处的阶段。例如,Pod 中运行的容器会创建一个 kube_pod_container_info 指标。这包括容器的名称、它所属 Pod 的名称、命名空间 Pod 运行所在的命名空间、容器镜像的名称、镜像的 ID、容器规范中的镜像名称、正在运行的容器的 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)