kube-state-metrics暴露k8s中的监控指标
kube-state-metrics 是一个用于从 Kubernetes 集群中生成各种资源对象状态指标的工具。
·
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: KubernetesOutOfCapacity
expr: 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 > 90
for: 2m
labels:
severity: warning
team: application
annotations:
summary: Kubernetes out of capacity
description: "{{ $labels.node }} 容量不足\n VALUE = {{ $value }}\n"
- alert: KubernetesContainerOomKiller
expr: (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]) == 1
for: 0m
labels:
severity: warning
team: application
annotations:
summary: Kubernetes container oom killer
description: "Container {{ $labels.container }} in pod {{ $labels.namespace }}/{{ $labels.pod }} has been OOMKilled {{ $value }} times in the last 10 minutes.\n VALUE = {{ $value }}\n"
更多推荐
已为社区贡献1条内容
所有评论(0)