Kubernetes 系统组件指标

系统组件指标可以更好地了解系统内部发生的情况。指标对于构建仪表板和告警特别有用。

Kubernetes 组件以 Prometheus 格式生成度量值。 这种格式是结构化的纯文本,旨在使人和机器都可以阅读。

Kubernetes 中的指标

在大多数情况下,可以在 HTTP 服务器的 /metrics 端点上访问度量值。 对于默认情况下不公开端点的组件,可以使用 --bind-address 标志启用。

这些组件的示例:

在生产环境中,你可能需要配置 Prometheus 服务 或 某些其他指标搜集器以定期收集这些指标,并使它们在某种时间序列数据库中可用。

请注意,kubelet 还会在 /metrics/cadvisor/metrics/resource/metrics/probes 端点中公开度量值。这些度量值的生命周期各不相同。

如果你的集群使用了 RBAC, 则读取指标需要通过基于用户、组或 ServiceAccount 的鉴权,要求具有允许访问 /metrics 的 ClusterRole。 例如:

  1. apiVersion: rbac.authorization.k8s.io/v1
  2. kind: ClusterRole
  3. metadata:
  4. name: prometheus
  5. rules:
  6. - nonResourceURLs:
  7. - "/metrics"
  8. verbs:
  9. - get

指标生命周期

Alpha 指标 → 稳定指标 → 弃用指标 → 隐藏指标 → 删除

Alpha 指标没有稳定性保证,因此可以随时对其进行修改或者删除。

稳定指标可以保证不会改变;具体而言,稳定意味着:

  • 指标本身不会被删除(或重命名)
  • 指标的类型不会被更改

已弃用的指标表明该指标最终将被删除;要搞清楚对应版本,你需要检查其注解, 其中包括从哪个 kubernetes 版本开始,将不再考虑该指标。

过期前:

  1. # HELP some_counter this counts things
  2. # TYPE some_counter counter
  3. some_counter 0

过期后:

  1. # HELP some_counter (Deprecated since 1.15.0) this counts things
  2. # TYPE some_counter counter
  3. some_counter 0

隐藏指标后,默认情况下,该指标不会发布以供抓取。要使用隐藏指标,你需要覆盖相关集群组件的配置。

指标一旦删除,就不会发布。你无法通过重载配置来改变这一点。

显示隐藏指标

综上所述,管理员可以通过设置可执行文件的命令行参数来启用隐藏指标, 如果管理员错过了上一版本中已经弃用的指标的迁移,则可以把这个用作管理员的逃生门。

show-hidden-metrics-for-version 标志接受版本号作为取值,版本号给出你希望显示该发行版本中已弃用的指标。 版本表示为 x.y,其中 x 是主要版本,y 是次要版本。补丁程序版本不是必须的, 即使指标可能会在补丁程序发行版中弃用,原因是指标弃用策略规定仅针对次要版本。

该参数只能使用前一个次要版本。如果管理员将先前版本设置为 show-hidden-metrics-for-version, 则先前版本中隐藏的度量值会再度生成。不允许使用过旧的版本,因为那样会违反指标弃用策略。

以指标 A 为例,此处假设 A 在 1.n 中已弃用。根据指标弃用策略,我们可以得出以下结论:

  • 在版本 1.n 中,这个指标已经弃用,且默认情况下可以生成。
  • 在版本 1.n+1 中,这个指标默认隐藏,可以通过命令行参数 show-hidden-metrics-for-version=1.n 来再度生成。
  • 在版本 1.n+2 中,这个指标就将被从代码中移除,不会再有任何逃生窗口。

如果你要从版本 1.12 升级到 1.13,但仍依赖于 1.12 中弃用的指标 A,则应通过命令行设置隐藏指标: --show-hidden-metrics=1.12,并记住在升级到 1.14 版本之前删除此指标依赖项。

禁用加速器指标

kubelet 通过 cAdvisor 收集加速器指标。为了收集这些指标,对于 NVIDIA GPU 之类的加速器, kubelet 在驱动程序上保持打开状态。这意味着为了执行基础结构更改(例如更新驱动程序), 集群管理员需要停止 kubelet 代理。

现在,收集加速器指标的责任属于供应商,而不是 kubelet。供应商必须提供一个收集指标的容器, 并将其公开给指标服务(例如 Prometheus)。

[DisableAcceleratorUsageMetrics 特性门控](/zh/docs/references/command-line-tools-reference/feature-gate.md#feature-gates-for-alpha-or-beta-features:~:text= DisableAcceleratorUsageMetrics,-false)禁止由 kubelet 收集的指标,并带有一条时间线,默认情况下会启用此功能

组件指标

kube-controller-manager 指标

控制器管理器指标可提供有关控制器管理器性能和运行状况的重要洞察。 这些指标包括通用的 Go 语言运行时指标(例如 go_routine 数量)和控制器特定的度量指标, 例如可用于评估集群运行状况的 etcd 请求延迟或云提供商(AWS、GCE、OpenStack)的 API 延迟等。

从 Kubernetes 1.7 版本开始,详细的云提供商指标可用于 GCE、AWS、Vsphere 和 OpenStack 的存储操作。 这些指标可用于监控持久卷操作的运行状况。

比如,对于 GCE,这些指标称为:

  1. cloudprovider_gce_api_request_duration_seconds { request = "instance_list"}
  2. cloudprovider_gce_api_request_duration_seconds { request = "disk_insert"}
  3. cloudprovider_gce_api_request_duration_seconds { request = "disk_delete"}
  4. cloudprovider_gce_api_request_duration_seconds { request = "attach_disk"}
  5. cloudprovider_gce_api_request_duration_seconds { request = "detach_disk"}
  6. cloudprovider_gce_api_request_duration_seconds { request = "list_disk"}

接下来