kube-state-metrics暴露k8s中的监控指标

news/2025/2/19 17:32:54/

kube-state-metrics 是一个用于从 Kubernetes 集群中生成各种资源对象状态指标的工具。

通过Deployment等配置完成安装

https://github.com/kubernetes/kube-state-metrics/tree/main/examples/standard
根据官方给定的配置添加至k8s上

注意需要RBAC授权

启动项

要使 kube-state-metrics 暴露更多的节点和 Pod 指标,可以在启动时设置以下参数:
kube-state-metrics 的完整启动参数包括:

  • –host:监听地址,默认0.0.0.0
  • –port:监听端口,默认8080
  • –telemetry-host: metrics 暴露地址,默认 0.0.0.0
  • –telemetry-port: metrics 暴露端口,默认 8081
  • –api-server: Kubernetes API server 地址
  • –kubeconfig: 指定 Kubernetes 配置文件
  • –namespace:监控的 namespace,默认监控全部
  • –collectors:启用的指标采集器,默认只启用基础指标
  • –kubelet-api:是否从 kubelet 获取指标,默认false
  • –kubelet-insecure-tls: 是否跳过 kubelet HTTPS 证书验证
  • –metrics-relist-interval:重新列表间隔,默认30s
  • –metrics-interval:指标采集间隔,默认30s
  • –version:打印版本信息

一个完整的启动命令可以是:

kube-state-metrics 
--kubelet-api --kubelet-insecure-tls  
--collectors=nodes,pods,resourcequota 
--telemetry-host=0.0.0.0 
--telemetry-port=8081

这个配置将开启直接抓取 kubelet 指标和更多采集器,并暴露 metrics 端点。
Prometheus 配置对应 job 抓取 kube-state-metrics 即可获取丰富的节点和 Pod 指标,如:

  • node_memory_usage_bytes
  • node_cpu_usage_seconds_total
  • container_memory_usage_bytes
  • container_cpu_usage_seconds_total

常见指标

pod

kube_pod_info # 有关pod的信息。
kube_pod_start_time # pod的unix时间戳记中的开始时间。
kube_pod_completion_time #pod的unix时间戳记中的完成时间。
kube_pod_labels # Kubernetes标签转换为Prometheus标签。
kube_pod_status_phase # Pod当前阶段。
kube_pod_status_ready # 描述容器是否准备好处理请求。
kube_pod_status_scheduled # 描述pod的调度过程的状态。
kube_pod_container_info # 有关容器中container的信息。
kube_pod_container_status_waiting # 描述容器当前是否处于等待状态。
kube_pod_container_status_waiting_reason # 描述容器当前处于等待状态的原因。
kube_pod_container_status_running # 描述容器当前是否处于运行状态。
kube_pod_container_status_terminated # 描述容器当前是否处于终止状态。
kube_pod_container_status_terminated_reason # 描述容器当前处于终止状态的原因。
kube_pod_container_status_last_terminated_reason # 描述容器处于终止状态的最后原因。
kube_pod_container_status_ready # Describes whether the containers readiness check succeeded.
kube_pod_container_status_restarts_total # 每个容器的容器重新启动次数。
kube_pod_container_resource_requests # 容器请求的请求资源数。
kube_pod_container_resource_limits # 容器请求的限制资源数量。
kube_pod_overhead # 额外资源开销,通常会衍生kube_pod_overhead_memory_bytes 与kube_pod_overhead_cpu_cores  
kube_pod_created # Unix创建时间戳。
kube_pod_deletion_timestamp # Unix删除时间戳
kube_pod_restart_policy # 描述此pod使用的重新启动策略。
kube_pod_init_container_info # 有关Pod中init容器的信息。
kube_pod_init_container_status_waiting # ,描述初始化容器当前是否处于等待状态。
kube_pod_init_container_status_waiting_reason # Describes the reason the init container is currently in waiting state.
kube_pod_init_container_status_running # 描述初始化容器当前是否处于运行状态。
kube_pod_init_container_status_terminated # 描述初始化容器当前是否处于终止状态。
kube_pod_init_container_status_terminated_reason # 描述初始化容器当前处于终止状态的原因。
kube_pod_init_container_status_last_terminated_reason # 描述初始化容器处于终止状态的最后原因。
kube_pod_init_container_status_ready # 描述初始化容器准备情况检查是否成功。
kube_pod_init_container_status_restarts_total  #Counter类型,初始化容器的重新启动次数。    
kube_pod_init_container_resource_limits # 初始化容器请求的限制资源数。
kube_pod_spec_volumes_persistentvolumeclaims_info # 有关Pod中持久卷声明卷的信息。
kube_pod_spec_volumes_persistentvolumeclaims_readonly # 描述是否以只读方式安装了持久卷声明。
kube_pod_status_reason # pod状态原因
kube_pod_status_scheduled_time # Pod移至计划状态时的Unix时间戳
kube_pod_status_unschedulable # 描述pod的unschedulable状态。

常用告警规则

pod

  - alert: KubernetesOutOfCapacityexpr: sum by (node) ((kube_pod_status_phase{phase="Running"} == 1) + on(uid) group_left(node) (0 * kube_pod_info{pod_template_hash=""})) / sum by (node) (kube_node_status_allocatable{resource="pods"}) * 100 > 90for: 2mlabels:severity: warningteam: applicationannotations:summary: Kubernetes out of capacitydescription: "{{ $labels.node }} 容量不足\n  VALUE = {{ $value }}\n"- alert: KubernetesContainerOomKillerexpr: (kube_pod_container_status_restarts_total - kube_pod_container_status_restarts_total offset 10m >= 1) and ignoring (reason) min_over_time(kube_pod_container_status_last_terminated_reason{reason="OOMKilled"}[10m]) == 1for: 0mlabels:severity: warningteam: applicationannotations:summary: Kubernetes container oom killerdescription: "Container {{ $labels.container }} in pod {{ $labels.namespace }}/{{ $labels.pod }} has been OOMKilled {{ $value }} times in the last 10 minutes.\n  VALUE = {{ $value }}\n"

http://www.ppmy.cn/news/1002112.html

相关文章

%eax and printf

if a function has variable arguments then AL (which is part of EAX) is expected to hold the number of vector registers used to hold arguments to that function.printf(“%f\n”,(float)x); use: .LFB0:.cfi_startprocpushq %rbp #.cfi_def_cfa_offset 16.cfi_o…

IIC子系统-实现si7006温湿度传感器采集温湿度功能

1.将IIC核心层和总线驱动层配置进内核 *********************配置核心层*************************1.找到核心层代码目录:内核顶层目录/drivers/i2c2. 内核顶层目录执行make menuconfig3. > Device Drivers > I2C support ->-*-I2C support4.保存退出***…

poium测试库之JavaScript API封装原理

为什么要封装JavaScript的API? 因为有些场景下Selenium提供的API并不能满足我们需求。比如,滑动浏览滚动条,控制元素的显示/隐藏,日历控件的操作等,都可以通过JavaScrip实现,而且Selenium为我们提供了 exe…

在中国人民大学与加拿大女王金融硕士项目的岁月,不会负了每个有心人

学习,就像是一场战争,有时你觉得在这拼命撕杀的战场上,你是孤独与无助的,但你殊不知,你其实并不是孤身奋战的!学习路上会遇见很多有心人,在中国人民大学与加拿大女王金融硕士项目的岁月&#xf…

2023天猫休闲零食市场分析(天猫数据分析软件)

基于较大的人口基数以及人们对休闲零食的需求,我国的休闲零食市场始终保持着稳健的增长趋势,行业整体的规模也比较大。根据鲸参谋电商数据分析平台的相关数据显示,2023年1月份至4月份,天猫平台上休闲零食行业的销量为6亿&#xff…

Linux--#ifdef和#endif的作用

#ifdef:如果指定的标识符已经定义,则编译下面的代码。 #ifdef DEBUG// 在调试模式下会编译这部分代码printf("Debug mode enabled.\n"); #endif#endif:结束条件编译块。

【雕爷学编程】MicroPython动手做(30)——物联网之Blynk

知识点:什么是掌控板? 掌控板是一块普及STEAM创客教育、人工智能教育、机器人编程教育的开源智能硬件。它集成ESP-32高性能双核芯片,支持WiFi和蓝牙双模通信,可作为物联网节点,实现物联网应用。同时掌控板上集成了OLED…

if语句实现成绩等级判断

if语句实现成绩等级判断 案例分析代码实现小结Time 案例分析 使用键盘输入一个成绩,然后通过if判断语句实现成绩等级的判断 代码实现 import java.util.Scanner;public class DetermineDemo {public static void main(String[] args) {Scanner scanner new Scanne…