Kubernetes v1.37:Metrics API 进阶至稳定版
在 Kubernetes v1.37 中,metrics.k8s.io API 正式进入稳定阶段,版本为 v1。
该 API 提供节点和 Pod 的 CPU 和内存用量数据,供 kubectl top
等命令以及基于资源指标的自动扩缩容使用。
对集群运维人员和应用开发者而言,这意味着 Kubernetes 对稳定版 API
的稳定性承诺现在也适用于该 API。v1 与 v1beta1 的资源类型和字段完全相同;此次变更只涉及
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 版本外,v1 与 v1beta1 的 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 发现结果在 v1 和
v1beta1 之间选择合适的版本,但 Kubernetes v1.37 尚未提供这一能力。
你需要做什么
无需启用任何特性门控。
Metrics API 由 metrics-server
等实现通过 API 聚合层提供服务。
你可以选用 metrics.k8s.io 的任何实现。
要在集群中使用 v1 Metrics API,所选实现必须提供 v1.metrics.k8s.io API,
你还需要注册关联的
APIService。
过渡期间,各实现应同时提供 v1 和 v1beta1,以确保兼容旧版客户端。
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
了解更多
- 阅读资源指标管道文档。
- 阅读 KEP-5207,了解该 API 进入稳定阶段的提案。
- 了解 Metrics API 及其参考实现 metrics-server。
参与其中
Metrics API 由 SIG Instrumentation 维护。 如需提问、提供反馈或参与贡献,请加入 Kubernetes Slack 上的 #sig-instrumentation 频道, 或参加 SIG Instrumentation 例会。