CRI Pod 和容器指标

CRI Pod 和容器指标

通过 CRI 收集 Pod 和容器指标
特性状态: Beta since Kubernetes v1.37; (默认禁用)
More information about this feature

To use this feature, you (or a cluster administrator) will need to enable the PodAndContainerStatsFromCRI feature gate for all relevant components in your cluster.

See Enable Or Disable Feature Gates for more information.

kubelet 通过 cAdvisor 收集 Pod 和容器指标。作为一个 Beta 特性, Kubernetes 允许你通过容器运行时接口(CRI) 配置收集 Pod 和容器指标。要使用基于 CRI 的收集机制,你必须启用 PodAndContainerStatsFromCRI 特性门控 并使用兼容的 CRI 实现(containerd >= 2.2, CRI-O >= 1.31.0)。

CRI Pod 和容器指标

当启用 PodAndContainerStatsFromCRI 时,kubelet 轮询底层容器运行时以获取 Pod 和容器统计信息,而不是直接使用 cAdvisor 检查主机系统。同直接使用 cAdvisor 收集信息相比,依靠容器运行时获取这些信息的好处包括:

  • 潜在的性能改善,如果容器运行时在正常操作中已经收集了这些信息。 在这种情况下,这些数据可以被重用,而不是由 kubelet 再次进行聚合。
  • 这种做法进一步解耦了 kubelet 和容器运行时。 对于使用 kubelet 来在主机上运行进程的容器运行时,其行为可用 cAdvisor 观测; 对于其他运行时(例如,使用虚拟化的容器运行时)而言, 这种做法提供了允许收集容器运行时指标的可能性。

说明:

从 Kubernetes v1.37 起,kubelet 中基于 cAdvisor 的 Pod 和容器指标收集已被弃用。 当此特性达到正式发布(GA)阶段时,不支持所需指标的 CRI 运行时将失去 Pod 和容器级别的指标收集能力。

受影响的端点

当特性门控启用时,kubelet 会向 CRI 运行时查询 Pod 和容器级别的数据,而非使用 cAdvisor。 节点级别和镜像文件系统的统计信息仍从 cAdvisor 收集。以下端点受到影响:

Summary API(/stats/summary

kubelet 从 CRI 运行时而非 cAdvisor 获取 Pod 和容器统计信息,用于 Summary API。 这包括 Pod 和容器的 CPU、内存、网络和进程统计信息。

/metrics/cadvisor

kubelet 通过 ListPodSandboxMetrics RPC 向 CRI 运行时查询 Pod 和容器指标, 并在 /metrics/cadvisor 端点上提供这些指标。这取代了 Pod 和容器级别上基于 cAdvisor 的收集, 同时保留了相同的端点路径和指标名称。此端点上的节点和机器级别指标继续由 cAdvisor 提供。

标识活跃的指标提供者

kubelet 暴露了一个 kubelet_metrics_provider 指标,其 provider 标签设置为 cricadvisor。你可以使用此指标来验证在给定节点上是哪个来源正在活跃地提供 Pod 和容器统计信息。

要求

要使用基于 CRI 的指标收集,你需要:

  • containerd 2.2 或更高版本,或 CRI-O 1.31.0 或更高版本
  • 在 kubelet 上启用 PodAndContainerStatsFromCRI 特性门控

说明:

CRI-O 从 1.36.3 版本开始,在 /metrics/cadvisor 端点上为 CRI 指标添加了 namespacepodcontainer 标签。更早的版本不包含这些标签,这可能会影响依赖它们来匹配 cAdvisor 生成的指标的查询。

回退行为

如果 CRI 运行时未报告预期的指标,即使特性门控已启用,kubelet 也会回退到使用 cAdvisor 进行 Pod 和容器统计信息收集。你可以通过重启 kubelet 来禁用特性门控,从而完全恢复到基于 cAdvisor 的收集方式。

最后修改 August 31, 2026 at 2:26 PM PST: [zh] Sync cri-pod-container-metrics.md (0946c5b955)