Kubernetes v1.37:Metrics API 进阶至稳定版

在 Kubernetes v1.37 中,metrics.k8s.io API 正式进入稳定阶段,版本为 v1。 该 API 提供节点和 Pod 的 CPU 和内存用量数据,供 kubectl top 等命令以及基于资源指标的自动扩缩容使用。

对集群运维人员和应用开发者而言,这意味着 Kubernetes 对稳定版 API 的稳定性承诺现在也适用于该 API。v1v1beta1 的资源类型和字段完全相同;此次变更只涉及 API 版本的稳定级别,并未改变所收集或返回的指标。

沿用多年的 API 进入稳定阶段

资源指标 API 在 Kubernetes v1.6 中以 Alpha 状态引入,并在 v1.8 进入 Beta 阶段。 此后,该 API 的定义一直未变,并已在生产环境中使用多年; HorizontalPodAutoscaler(HPA)控制器和 kubectl top 等客户端都依赖该 API。 经过多年生产环境验证后,该 API 在 Kubernetes v1.37 中正式进入稳定阶段(metrics.k8s.io/v1)。

该 API 提供以下两种资源类型:

  • NodeMetrics:提供节点的 CPU 和内存用量。
  • PodMetrics:提供 Pod 的 CPU 和内存用量,并在 containers 字段中列出各容器的用量明细。

按照设计,该 API 的范围有意保持精简。 它只提供自动扩缩容和日常资源用量查看所需的指标, 不能替代完整的监控体系或自定义指标 API(custom.metrics.k8s.io)。

v1.37 中有哪些变化?

除 API 版本外,v1v1beta1 的 API 定义完全相同。 没有字段被重命名或新增,返回的 CPU 和内存数值含义也没有变化。

例如,客户端可以通过稳定版 API 端点获取节点指标:

kubectl get --raw /apis/metrics.k8s.io/v1/nodes

同样,客户端也可以获取某个命名空间内所有 Pod 的指标:

kubectl get --raw /apis/metrics.k8s.io/v1/namespaces/default/pods

kubectl top 同时支持这两个 API 版本。v1 可用时,它会优先使用 v1; 如果集群尚未提供 v1,则自动回退到 v1beta1。 HPA 控制器目前仅支持 v1beta1。后续计划让它根据 API 发现结果在 v1v1beta1 之间选择合适的版本,但 Kubernetes v1.37 尚未提供这一能力。

你需要做什么

无需启用任何特性门控。 Metrics API 由 metrics-server 等实现通过 API 聚合层提供服务。 你可以选用 metrics.k8s.io 的任何实现。 要在集群中使用 v1 Metrics API,所选实现必须提供 v1.metrics.k8s.io API, 你还需要注册关联的 APIService

过渡期间,各实现应同时提供 v1v1beta1,以确保兼容旧版客户端。 Kubernetes v1.37 仍然提供 v1beta1 API。

可以通过以下命令查看集群当前提供哪些 API 版本:

kubectl get --raw /apis/metrics.k8s.io/ | jq .

所选 Metrics API 实现支持 v1 后,还可以确认对应的 APIService 是否可用:

kubectl get apiservice v1.metrics.k8s.io

了解更多

参与其中

Metrics API 由 SIG Instrumentation 维护。 如需提问、提供反馈或参与贡献,请加入 Kubernetes Slack 上的 #sig-instrumentation 频道, 或参加 SIG Instrumentation 例会。