Kubernetes 系统组件指标深度解析
website Kubernetes website and documentation repo: 项目地址: https://gitcode.com/gh_mirrors/webs/website
概述
在 Kubernetes 集群中,系统组件指标是监控集群健康状况和性能表现的重要依据。这些指标以 Prometheus 格式暴露,为管理员提供了构建监控仪表盘和告警系统的数据基础。本文将深入解析 Kubernetes 系统组件指标的工作原理、生命周期管理以及各类组件的特有指标。
指标暴露机制
Kubernetes 核心组件默认会在 HTTP 服务器的 /metrics
端点暴露指标数据,采用 Prometheus 的文本格式。这种格式具有以下特点:
- 纯文本结构,易于人类阅读和机器解析
- 每条指标包含 HELP 和 TYPE 注释说明
- 支持多维度标签(Labels)
对于默认不暴露指标的组件,可以通过 --bind-address
参数启用指标端点。主要组件包括:
- kube-controller-manager:集群控制平面的核心组件
- kube-proxy:负责服务发现和负载均衡
- kube-apiserver:Kubernetes API 服务端点
- kube-scheduler:负责 Pod 调度决策
- kubelet:节点代理,管理 Pod 生命周期
指标安全访问
在启用 RBAC 的集群中,访问指标端点需要适当的权限。管理员需要创建 ClusterRole 并绑定到相应用户或 ServiceAccount:
apiVersion: rbac.authorization.k8s.io/v1
kind: ClusterRole
metadata:
name: metrics-reader
rules:
- nonResourceURLs: ["/metrics"]
verbs: ["get"]
指标生命周期管理
Kubernetes 组件指标遵循严格的生命周期策略:
- Alpha 阶段指标:无稳定性保证,可能随时变更
- 稳定阶段指标:保证不会变更名称和类型
- 弃用阶段指标:标注弃用版本,计划删除
- 隐藏阶段指标:默认不暴露,可通过参数启用
- 删除阶段指标:彻底移除,不可恢复
示例:一个被弃用的计数器指标会在 HELP 中标注弃用信息
# HELP some_counter (Deprecated since 1.15.0) this counts things
# TYPE some_counter counter
some_counter 0
组件特有指标详解
控制器管理器指标
kube-controller-manager 提供的关键指标包括:
- 运行时指标:Go 协程数量、内存使用等
- 存储操作指标:各云厂商的 API 调用延迟
- GCE:
cloudprovider_gce_api_request_duration_seconds
- AWS: 类似的 AWS 相关指标
- OpenStack: 相关的 OpenStack 指标
- GCE:
这些指标对于诊断存储相关问题特别有价值。
调度器指标(Beta 特性)
kube-scheduler 自 1.21 版本起提供 Pod 资源请求和限制的指标:
kube_pod_resource_request
:Pod 请求的资源量kube_pod_resource_limit
:Pod 设置的资源限制
这些指标通过 /metrics/resources
端点暴露,标签维度包括:
- 命名空间
- Pod 名称
- 调度节点
- 资源类型(CPU/内存等)
- 资源单位
kubelet 压力指标(Alpha 特性)
kubelet 可以收集 Linux 内核的压力阻塞信息(PSI),包括:
- CPU 压力:
container_pressure_cpu_*
- 内存压力:
container_pressure_memory_*
- IO 压力:
container_pressure_io_*
启用此功能需要:
- Linux 内核 ≥ 4.20
- 启用 cgroup v2
- 开启 KubeletPSI 特性门控
高级配置选项
隐藏指标管理
管理员可以通过 --show-hidden-metrics-for-version
参数临时启用已隐藏的指标。例如:
--show-hidden-metrics-for-version=1.20
此参数值必须是前一个次要版本号,遵循指标弃用策略。
指标禁用机制
对于可能引起性能问题的指标,可以通过以下方式禁用:
--disabled-metrics=problematic_metric1,problematic_metric2
指标基数控制
为防止指标维度爆炸导致内存问题,可以限制允许的标签值:
--allow-metric-labels=metric1,label1='value1,value2',metric2,label2='valueA,valueB'
也可以通过配置文件指定:
"metric1,label1": "v1,v2"
"metric2,label2": "vA,vB"
最佳实践建议
- 监控系统集成:将组件指标接入 Prometheus 等监控系统
- 版本升级注意:及时迁移弃用指标,避免依赖隐藏指标
- 资源规划:利用调度器指标进行容量规划
- 问题诊断:结合控制器管理器指标诊断云厂商 API 问题
- 节点压力监控:在合适环境启用 PSI 指标
通过合理利用这些系统指标,管理员可以全面掌握集群运行状态,及时发现并解决潜在问题。
website Kubernetes website and documentation repo: 项目地址: https://gitcode.com/gh_mirrors/webs/website
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考