1 - Kubernetes 组件 SLI 指标

特性状态: Kubernetes v1.26 [alpha]

作为一个 Alpha 特性,Kubernetes 允许你为每个 Kubernetes 组件二进制文件配置服务水平指示器 (SLI) 指标。 此指标端点被暴露在每个组件提供 HTTPS 服务的端口上,路径为 /metrics/slis。 你必须为想要抓取 SLI 指标的每个组件启用 ComponentSLIs 特性门控

SLI 指标

启用 SLI 指标时,每个 Kubernetes 组件暴露两个指标,按照健康检查添加标签:

  • 计量值(表示健康检查的当前状态)
  • 计数值(记录观察到的每个健康检查状态的累计次数)

你可以使用此指标信息计算每个组件的可用性统计信息。例如,API 服务器检查 etcd 的健康。 你可以计算并报告 etcd 的可用或不可用情况,具体由其客户端(即 API 服务器)进行报告。

Prometheus 计量表数据看起来类似于:

# HELP kubernetes_healthcheck [ALPHA] This metric records the result of a single healthcheck.
# TYPE kubernetes_healthcheck gauge
kubernetes_healthcheck{name="autoregister-completion",type="healthz"} 1
kubernetes_healthcheck{name="autoregister-completion",type="readyz"} 1
kubernetes_healthcheck{name="etcd",type="healthz"} 1
kubernetes_healthcheck{name="etcd",type="readyz"} 1
kubernetes_healthcheck{name="etcd-readiness",type="readyz"} 1
kubernetes_healthcheck{name="informer-sync",type="readyz"} 1
kubernetes_healthcheck{name="log",type="healthz"} 1
kubernetes_healthcheck{name="log",type="readyz"} 1
kubernetes_healthcheck{name="ping",type="healthz"} 1
kubernetes_healthcheck{name="ping",type="readyz"} 1

而计数器数据看起来类似于:

# HELP kubernetes_healthchecks_total [ALPHA] This metric records the results of all healthcheck.
# TYPE kubernetes_healthchecks_total counter
kubernetes_healthchecks_total{name="autoregister-completion",status="error",type="readyz"} 1
kubernetes_healthchecks_total{name="autoregister-completion",status="success",type="healthz"} 15
kubernetes_healthchecks_total{name="autoregister-completion",status="success",type="readyz"} 14
kubernetes_healthchecks_total{name="etcd",status="success",type="healthz"} 15
kubernetes_healthchecks_total{name="etcd",status="success",type="readyz"} 15
kubernetes_healthchecks_total{name="etcd-readiness",status="success",type="readyz"} 15
kubernetes_healthchecks_total{name="informer-sync",status="error",type="readyz"} 1
kubernetes_healthchecks_total{name="informer-sync",status="success",type="readyz"} 14
kubernetes_healthchecks_total{name="log",status="success",type="healthz"} 15
kubernetes_healthchecks_total{name="log",status="success",type="readyz"} 15
kubernetes_healthchecks_total{name="ping",status="success",type="healthz"} 15
kubernetes_healthchecks_total{name="ping",status="success",type="readyz"} 15

使用此类数据

组件 SLI 指标端点旨在以高频率被抓取。 高频率抓取意味着你最终会获得更细粒度的计量信号,然后可以将其用于计算 SLO。 /metrics/slis 端点为各个 Kubernetes 组件提供了计算可用性 SLO 所需的原始数据。

2 - 节点指标数据

访问 kubelet 所观测到的节点、卷、Pod 和容器级别指标的机制。

kubelet 在节点、卷、Pod 和容器级别收集统计信息,并在 概要 API 中输出这些信息。

你可以通过 Kubernetes API 服务器将代理的请求发送到 stats 概要 API。

下面是一个名为 minikube 的节点的概要 API 请求示例:

kubectl get --raw "/api/v1/nodes/minikube/proxy/stats/summary"

下面是使用 curl 所执行的相同 API 调用:

# 你需要先运行 "kubectl proxy"
# 更改 8080 为 "kubectl proxy" 指派的端口
curl http://localhost:8080/api/v1/nodes/minikube/proxy/stats/summary

概要指标 API 源

默认情况下,Kubernetes 使用 kubelet 内运行的嵌入式 cAdvisor 获取节点概要指标数据。

通过 CRI 获得概要 API 数据

特性状态: Kubernetes v1.23 [alpha]

如果你在自己的集群中启用 PodAndContainerStatsFromCRI 特性门控, 且你通过容器运行时接口 (CRI) 使用支持统计访问的容器运行时, 则 kubelet 将使用 CRI 而不是 cAdvisor 来获取 Pod 和容器级别的指标数据。

接下来

集群故障排查任务页面讨论了如何使用依赖这些数据的指标管道。