这篇文章已超过一年。较旧的文章可能包含过时的内容。请检查页面中的信息自发布以来是否已不再准确。

kube-state-metrics 发布 v2.0

是什么?

kube-state-metrics 是 Kubernetes 组织下的一个项目,它根据 Kubernetes 原生资源的当前状态生成 Prometheus 格式的指标。它通过监听 Kubernetes API 并收集有关资源和对象(例如 Deployments、Pods、Services 和 StatefulSets)的信息来完成此操作。完整的资源列表可在 kube-state-metrics 的文档中找到。

为什么?

kube-state-metrics 开箱即用地提供了许多有用的指标和洞察!这些指标可以作为你集群的洞察来源:既可以通过指标本身呈现,例如在仪表板中,也可以通过告警流水线。举几个例子:

  • kube_pod_container_status_restarts_total 可用于对崩溃的 Pod 发出告警。
  • kube_deployment_status_replicaskube_deployment_status_replicas_available 结合使用,可以用于告警部署是否成功发布或卡住。
  • kube_pod_container_resource_requestskube_pod_container_resource_limits 可用于容量规划仪表板。

还有更多可用指标!要了解其他指标及其详细信息,请查看文档

v2.0 有哪些新功能?

既然我们已经了解了 kube-state-metrics 是什么,我们很高兴宣布下一个版本:kube-state-metrics v2.0!这个版本期待已久,并于 2020 年 9 月开始了 Alpha 版本。为了简化维护,我们清除了技术债务,并调整了一些关于用户可见的标志(flags)和 API 的令人困惑的措辞。我们还移除了一些导致 Prometheus 基数(cardinality)不必要地升高的指标!对于 2.0 版本,我们花时间建立了规模和性能测试。这使我们能够更好地了解在大规模集群中是否遇到任何问题,并记录您的集群的资源请求建议。在此版本(以及 v1.9.8)中,我们引入了支持多种架构的容器构建,您可以在 ARM、ARM64、PPC64 和 S390x 上运行 kube-state-metrics!

事不宜迟,以下是更值得注意的用户可见的重大变更列表。完整的变更、功能和错误修复列表可在本文末尾的变更日志中查看。

  • Flag --namespace 已重命名为 --namespaces。如果您正在使用旧名称,请务必在部署最新版本之前更新该 Flag。
  • Flag --collectors 已重命名为 --resources
  • Flags --metric-blacklist--metric-whitelist 已重命名为 --metric-denylist--metric-allowlist
  • Flag --metric-labels-allowlist 允许您指定一个 Kubernetes 标签列表,这些标签将被转换为 kube_<resource-name>_labels 指标的维度。默认情况下,该指标仅包含 name 和 namespace 标签。
  • 所有带有 kube_hpa_* 前缀的指标都已重命名为 kube_horizontalpodautoscaler_*
  • 与 Kubernetes 相关的指标标签已转换为 snake_case 命名规范。
  • 如果您将 kube-state-metrics 作为库导入,我们已将 Go 模块路径更新为 k8s.io/kube-state-metrics/v2
  • 所有已废弃的稳定指标都已移除,具体请参见v1.9 版本中的通知
  • quay.io/coreos/kube-state-metrics 镜像将不再更新。k8s.gcr.io/kube-state-metrics/kube-state-metrics 是新的规范位置(更新:k8s.gcr.io 已废弃,推荐使用 registry.k8s.io
  • 作为 kubernetes/kube-state-metrics 仓库一部分的 Helm Chart 已废弃。https://github.com/prometheus-community/helm-charts 将是其新位置。

有关 v2.0 版本变更的完整列表,包括功能、错误修复和其他重大变更,请参阅完整的CHANGELOG

发现问题?

感谢所有用户的测试以及所有贡献者提交的问题报告、代码和文档修改!如果您发现任何问题,我们这些维护者非常乐意进行调查,请通过提交GitHub Issue 进行报告。