在Kubernetes集群监控体系中,kube-state-metrics组件扮演着至关重要的角色,它通过暴露集群内部对象的状态指标,为Prometheus提供了丰富的监控数据源。作为Kubernetes监控的核心组件之一,kube-state-metrics生成的指标能够全面反映Pod、Container等资源对象的生命周期状态和资源配置情况。
kube_pod_created指标记录了Pod被创建的时间戳,这个时间点对应Kubernetes API Server接收到Pod创建请求的时刻。在实际监控中,我们经常需要计算Pod从创建到正常运行的时间差,这个指标就是计算的基础。例如:
bash复制kube_pod_created{namespace="kube-system", pod="coredns-6d775c4976-7rx7f"} 1730273198
kube_pod_start_time则记录了Pod实际开始启动的时间戳,这个时间通常比创建时间稍晚,反映了调度器完成节点分配后,kubelet开始创建容器的时间点。通过比较这两个时间戳,可以评估调度系统的性能:
bash复制kube_pod_start_time{namespace="kube-system", pod="coredns-6d775c4976-7rx7f"} 1730274620
kube_pod_completion_time专门用于记录Job类型Pod的完成时间戳,对于常规的长期运行Pod,这个指标通常为0。它对于批处理作业的监控特别有用:
bash复制kube_pod_completion_time{namespace="milvus", pod="milvus-256-pulsarv3-bookie-init-cmprw"} 1760664831
实际经验:在监控告警规则中,我们通常会设置"Pod创建后超过5分钟仍未启动"这样的规则,这就需要结合created和start_time两个指标进行计算。
kube_pod_info提供了Pod的基础信息,包括:
bash复制kube_pod_info{
created_by_kind="ReplicaSet",
created_by_name="coredns-6d775c4976",
node="cto-gpu-pro-m01",
pod_ip="10.244.0.29",
priority_class="system-cluster-critical"
} 1
kube_pod_owner揭示了Pod的所有权关系,对于理解控制器与Pod的关系非常重要。例如,Deployment通过ReplicaSet管理Pod,这个指标就能清晰地展示这种关系:
bash复制kube_pod_owner{
owner_kind="ReplicaSet",
owner_name="coredns-6d775c4976",
owner_is_controller="true"
} 1
kube_pod_ips不仅记录了Pod的IP地址,还通过ip_family标签标识了IP协议版本(IPv4/IPv6),在双栈集群中特别有用:
bash复制kube_pod_ips{
ip="10.10.xxx.60",
ip_family="4"
} 1
kube_pod_restart_policy展示了Pod的重启策略,Kubernetes支持三种策略:
bash复制kube_pod_restart_policy{type="Always"} 1
kube_pod_scheduler记录了调度Pod的调度器名称,对于使用自定义调度器的场景特别有用:
bash复制kube_pod_scheduler{name="default-scheduler"} 1
kube_pod_tolerations是Pod容忍度规则的完整呈现,包含了污点键、效果和容忍时间等关键信息:
bash复制kube_pod_tolerations{
key="node.kubernetes.io/not-ready",
effect="NoExecute",
toleration_seconds="300"
} 1
实践经验:通过监控这个指标,可以统计集群中各类容忍度的使用情况,优化节点调度策略。
kube_pod_status_qos_class反映了Pod的服务质量等级,Kubernetes根据资源请求和限制自动划分:
bash复制kube_pod_status_qos_class{qos_class="Burstable"} 1
kube_pod_status_phase是Pod生命周期中最核心的指标之一,它反映了Pod当前所处的阶段:
bash复制kube_pod_status_phase{phase="Running"} 1
监控技巧:通过统计各phase的Pod数量,可以快速掌握集群整体健康状态。例如,大量Pending状态的Pod可能表明集群资源不足。
kube_pod_status_scheduled展示了Pod的调度状态,condition标签的true/false/unknown三种状态分别表示:
bash复制kube_pod_status_scheduled{condition="true"} 1
kube_pod_status_ready表示Pod是否通过就绪检查,是服务可用性的关键指标:
bash复制kube_pod_status_ready{condition="true"} 1
kube_pod_status_reason提供了Pod状态异常的详细原因,常见的包括:
bash复制kube_pod_status_reason{reason="Evicted"} 0
kube_pod_status_scheduled_time记录了Pod被调度到节点的时间戳:
bash复制kube_pod_status_scheduled_time{} 1730274620
kube_pod_status_initialized_time表示Pod初始化完成的时间,对于有initContainer的Pod特别重要:
bash复制kube_pod_status_initialized_time{} 1730274620
kube_pod_status_container_ready_time反映了容器通过Readiness Probe检查的时间,是服务可用的精确时刻:
bash复制kube_pod_status_container_ready_time{} 1767607550
kube_pod_status_ready_time则记录了Pod整体就绪的时间,对于多容器Pod,需要所有容器就绪才会更新:
bash复制kube_pod_status_ready_time{} 1767607550
kube_pod_container_state_started记录了容器进入Running状态的时间戳:
bash复制kube_pod_container_state_started{container="coredns"} 1761526751
kube_pod_container_status_last_terminated_timestamp则保存了容器上次终止的时间,结合重启次数可以分析容器稳定性:
bash复制kube_pod_container_status_last_terminated_timestamp{container="coredns"} 1761526746
kube_pod_container_resource_limits和kube_pod_container_resource_requests分别记录了容器的资源限制和请求值,是容量规划的重要依据:
bash复制kube_pod_container_resource_limits{resource="cpu", unit="core"} 2
kube_pod_container_resource_requests{resource="memory", unit="byte"} 2147483648
资源监控技巧:通过比较requests和实际使用量,可以识别资源配置不合理的容器。
kube_pod_container_status_restarts_total记录了容器重启次数,是稳定性监控的关键指标:
bash复制kube_pod_container_status_restarts_total{} 3
kube_pod_container_status_waiting及其reason标签揭示了容器处于等待状态的原因,如:
bash复制kube_pod_container_status_waiting{reason="ContainerCreating"} 1
kube_pod_container_status_running和kube_pod_container_status_terminated分别表示容器是否在运行或已终止:
bash复制kube_pod_container_status_running{} 1
kube_pod_container_status_terminated{} 0
Init容器与常规容器有相似的监控指标,但前缀为kube_pod_init_container_:
kube_pod_init_container_status_restarts_total记录init容器的重启次数:
bash复制kube_pod_init_container_status_restarts_total{} 0
kube_pod_init_container_info提供init容器的基本信息:
bash复制kube_pod_init_container_info{image="busybox:1.28"} 1
kube_pod_init_container_resource_requests记录了init容器的资源请求,这对初始化阶段的资源规划很重要:
bash复制kube_pod_init_container_resource_requests{resource="cpu", unit="core"} 0.1
kube_pod_spec_volumes_persistentvolumeclaims_info展示了Pod使用的PVC信息:
bash复制kube_pod_spec_volumes_persistentvolumeclaims_info{claim_name="data"} 1
kube_pod_spec_volumes_persistentvolumeclaims_readonly表示挂载的PVC是否为只读:
bash复制kube_pod_spec_volumes_persistentvolumeclaims_readonly{} 0
kube_pod_service_account记录了Pod使用的服务账号,对权限审计很重要:
bash复制kube_pod_service_account{service_account="default"} 1
Pod启动延迟监控:通过计算kube_pod_start_time和kube_pod_created的时间差,识别调度或镜像拉取慢的问题。
容器重启告警:基于kube_pod_container_status_restarts_total设置告警,及时发现不稳定的容器。
资源利用率分析:结合资源请求(kube_pod_container_resource_requests)和实际使用量(cadvisor指标),优化资源配置。
案例1:Pod一直处于Pending状态
案例2:容器频繁重启
案例3:服务不可用但Pod运行中
集群概览面板:
Pod详情面板:
调度分析面板: