Kubernetes v1.37:Metrics API 升级为稳定版
内容提要
Kubernetes v1.37将metrics.k8s.io API升级为稳定版(v1),提供节点和Pod的CPU及内存使用数据,支持kubectl top和自动扩缩容。v1与v1beta1字段相同,仅版本升级,无需功能开关。实现需同时支持v1和v1beta1以兼容旧客户端,HPA暂仅支持v1beta1,未来将自动选择版本。
延伸解读
稳定版的意义
metrics.k8s.io/v1 的稳定化意味着该 API 现在享有 Kubernetes 稳定版 API 的稳定性保证。对于集群运维人员和开发者来说,这降低了因 API 变更导致的中断风险,使得基于资源指标的工具和自动化可以更放心地依赖此接口。
兼容性与迁移
v1 与 v1beta1 字段完全相同,仅版本号变化。实现方需同时提供两个版本以兼容旧客户端。kubectl top 已支持自动选择 v1,但 HPA 控制器目前仍仅支持 v1beta1,未来计划支持自动选择。因此,在过渡期内,确保 metrics-server 等实现同时支持两个版本至关重要。
API 的定位与限制
该 API 刻意保持精简,仅提供节点和 Pod 的 CPU 与内存使用数据,用于自动扩缩容和基本检查。它并非全功能监控管道的替代品,也不涵盖自定义指标(custom.metrics.k8s.io)。对于更复杂的监控需求,仍需依赖其他监控解决方案。
Q&A
Kubernetes v1.37 中 metrics.k8s.io API 升级为稳定版有什么意义?
这意味着该 API 现在具有 Kubernetes 稳定 API 的稳定性保证,对于集群运维人员和应用开发者来说,可以依赖它进行生产环境使用。
metrics.k8s.io v1 与 v1beta1 在字段和功能上有什么区别?
v1 与 v1beta1 的资源类型和字段完全相同,没有重命名字段、新增字段或改变返回的 CPU 和内存值的含义,只是 API 版本升级。
如何通过 kubectl 获取节点和 Pod 的 metrics.k8s.io v1 数据?
可以使用 kubectl get --raw /apis/metrics.k8s.io/v1/nodes 获取节点指标,使用 kubectl get --raw /apis/metrics.k8s.io/v1/namespaces/default/pods 获取指定命名空间下的 Pod 指标。
kubectl top 和 HPA 对 metrics.k8s.io v1 的支持情况如何?
kubectl top 支持 v1 和 v1beta1,优先使用 v1,并在集群不支持 v1 时自动回退到 v1beta1。HPA 控制器目前仅支持 v1beta1,计划支持基于发现的版本选择,但该功能在 v1.37 中尚未提供。
metrics.k8s.io API 提供哪些资源类型?它是否替代完整的监控管道?
该 API 提供 NodeMetrics 和 PodMetrics 两种资源类型,用于自动扩缩容和基本检查。它不替代完整的监控管道或自定义指标 API(custom.metrics.k8s.io)。
在 Kubernetes v1.37 中,如何启用 metrics.k8s.io v1 API?
无需启用任何功能开关。该 API 通过 API 聚合层提供服务,需要你的 metrics 实现(如 metrics-server)支持 v1.metrics.k8s.io 并注册相应的 APIService。
在过渡期间,metrics 实现应该如何处理 v1 和 v1beta1 版本?
实现应同时提供 v1 和 v1beta1 版本,以保持与旧客户端的兼容性。v1beta1 在 v1.37 中仍然可用。