Kubernetes 系统组件指标
系统组件指标可以更好地了解它们内部发生的情况。指标对于构建仪表板和警报特别有用。
Kubernetes 组件以 Prometheus 格式 发出指标。这种格式是结构化的纯文本,旨在让人和机器都能阅读。
Kubernetes 中的指标
在大多数情况下,指标可在 HTTP 服务器的 /metrics
端点上获得。对于默认情况下不公开端点的组件,可以使用 --bind-address
标志启用它。
这些组件的示例
在生产环境中,您可能希望配置 Prometheus 服务器 或其他一些指标抓取器来定期收集这些指标,并使其在某种时间序列数据库中可用。
请注意,kubelet 也在 /metrics/cadvisor
、/metrics/resource
和 /metrics/probes
端点公开指标。这些指标没有相同的生命周期。
如果您的集群使用 RBAC,则读取指标需要通过具有允许访问 /metrics
的 ClusterRole 的用户、组或 ServiceAccount 进行授权。例如
apiVersion: rbac.authorization.k8s.io/v1
kind: ClusterRole
metadata:
name: prometheus
rules:
- nonResourceURLs:
- "/metrics"
verbs:
- get
指标生命周期
Alpha 指标 → 稳定指标 → 已弃用指标 → 隐藏指标 → 已删除指标
Alpha 指标没有稳定性保证。这些指标可以随时修改或删除。
稳定指标保证不会改变。这意味着
- 没有已弃用签名的稳定指标不会被删除或重命名
- 稳定指标的类型不会被修改
已弃用指标计划删除,但仍可使用。这些指标包含有关其弃用版本的注释。
例如
弃用前
# HELP some_counter this counts things # TYPE some_counter counter some_counter 0
弃用后
# HELP some_counter (Deprecated since 1.15.0) this counts things # TYPE some_counter counter 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
之前删除此指标依赖项
组件指标
kube-controller-manager 指标
控制器管理器指标提供了对控制器管理器性能和运行状况的重要洞察。这些指标包括常见的 Go 语言运行时指标(例如 go_routine 计数)和控制器特定指标(例如 etcd 请求延迟或 Cloudprovider(AWS、GCE、OpenStack)API 延迟),可用于衡量集群的运行状况。
从 Kubernetes 1.7 开始,GCE、AWS、Vsphere 和 OpenStack 的存储操作可以使用详细的 Cloudprovider 指标。这些指标可用于监控持久卷操作的运行状况。
例如,对于 GCE,这些指标称为
cloudprovider_gce_api_request_duration_seconds { request = "instance_list"}
cloudprovider_gce_api_request_duration_seconds { request = "disk_insert"}
cloudprovider_gce_api_request_duration_seconds { request = "disk_delete"}
cloudprovider_gce_api_request_duration_seconds { request = "attach_disk"}
cloudprovider_gce_api_request_duration_seconds { request = "detach_disk"}
cloudprovider_gce_api_request_duration_seconds { request = "list_disk"}
kube-scheduler 指标
Kubernetes v1.21 [beta]
调度器公开可选指标,这些指标报告所有正在运行的 Pod 的请求资源和所需限制。这些指标可用于构建容量规划仪表板、评估当前或历史调度限制、快速识别由于缺乏资源而无法调度的负载,以及将实际使用情况与 Pod 的请求进行比较。
kube-scheduler 识别为每个 Pod 配置的资源请求和限制;当请求或限制不为零时,kube-scheduler 会报告指标时间序列。时间序列由以下内容标记
- 命名空间
- Pod 名称
- Pod 调度到的节点,如果尚未调度,则为空字符串
- 优先级
- 为该 Pod 分配的调度器
- 资源的名称(例如,
cpu
) - 如果已知,则为资源的单位(例如,
cores
)
一旦 Pod 完成(restartPolicy
为 Never
或 OnFailure
并且处于 Succeeded
或 Failed
Pod 阶段,或者已删除并且所有容器都处于终止状态),则不再报告该系列,因为调度器现在可以自由调度其他 Pod 运行。这两个指标称为 kube_pod_resource_request
和 kube_pod_resource_limit
。
指标在 HTTP 端点 /metrics/resources
上公开,并且需要与调度器上的 /metrics
端点相同的授权。您必须使用 --show-hidden-metrics-for-version=1.20
标志来公开这些 alpha 稳定性指标。
禁用指标
您可以通过命令行标志 --disabled-metrics
显式关闭指标。例如,如果某个指标导致性能问题,则可能需要这样做。输入是一个已禁用指标列表(即 --disabled-metrics=metric1,metric2
)。
指标基数强制执行
具有无界维度的指标可能会导致它们检测的组件出现内存问题。为了限制资源使用,您可以使用 --allow-label-value
命令行选项动态配置指标的标签值允许列表。
在 alpha 阶段,该标志只能采用一系列映射作为指标标签允许列表。每个映射的格式为 <metric_name>,<label_name>=<allowed_labels>
,其中 <allowed_labels>
是以逗号分隔的可接受标签名称列表。
总体格式如下所示
--allow-label-value <metric_name>,<label_name>='<allow_value1>, <allow_value2>...', <metric_name2>,<label_name>='<allow_value1>, <allow_value2>...', ...
以下是一个示例
--allow-label-value number_count_metric,odd_number='1,3,5', number_count_metric,even_number='2,4,6', date_gauge_metric,weekend='Saturday,Sunday'
除了从 CLI 指定之外,还可以在配置文件中完成此操作。您可以使用组件的 --allow-metric-labels-manifest
命令行参数指定该配置文件的路径。以下是该配置文件内容的示例
allow-list:
- "metric1,label2": "v1,v2,v3"
- "metric2,label1": "v1,v2,v3"
此外,cardinality_enforcement_unexpected_categorizations_total
元指标记录了基数强制执行期间意外分类的计数,即,每当遇到不允许的标签值(相对于允许列表约束)时。
下一步
- 阅读有关Prometheus 文本格式的指标信息
- 查看稳定的 Kubernetes 指标列表
- 阅读有关Kubernetes 弃用策略的信息