目标
- 部署kube-state-metrics
- 配置 kube-state-metrics 采集deploy、pod、node等资源的自定义标签和注解
- 配置prometheus抓取kube-state-metrics
简介
kube-state-metrics 是一个从API server获取并生成object metrics的简单服务,他并不关注k8s自身组件的健康状况,而是关心内部各种各样的对象监控,如deploys、nodes、pods,等同于k8s的一个exporter,可以供prometheus使用。kube-stat-metrics默认使用8080端口,与kubectl展示的结果可能不完全相同,因为kubectl的数据是经过加工的,kube-stat-metrics是原始的数据(raw data)。
Metric
一个监控项存在几种状态就会存在几条metric,如kube_pod_status_ready,每个pod都会存在三条Metric:
- kube_pod_status_ready{condition=“true”}
- kube_pod_status_ready{condition=“false”}
- kube_pod_status_ready{condition=“unknow”}
label名称冲突
- 1、一切不支持的字符串都转换成下划线 _,如:app.kubernetes.io/name 转换成 app_kubernetes_io_name
- 2、转换后依然冲突的label会追加conflicN,label_foo_bar_conflicN
部署
-
1、下载对应的版本
kube-state-metrics Kubernetes client-go Version v2.9.2 v1.26 v2.10.1 v1.27 v2.11.0 v1.28 v2.12.0 v1.29 v2.13.0 v1.30 main v1.30 wget https://codeload.github.com/kubernetes/kube-state-metrics/tar.gz/refs/tags/v2.9.2
tar -xvzf v2.9.2 -
2、根据需求修改启动参数
默认仅采集name、namespace;两个标签,如果标签太多会有性能瓶颈
k8s资源标签会被采集为label_NAME,prometheus抓取时映射成原始标签-
配置采集pod、deployment等资源自定义的label
spec: template: spec: containers: - args: - --metric-labels-allowlist=pods=[*],deployments=[*] # 默认仅采集name、namespace两个标签 - --metric-annotations-allowlist=pods=[*] # 同上,允许采集annotations的资源类型 -
设置资源限制,最小资源:100m、250MiB
spec: template: spec: containers: resources: limits: cpu: 2 memory: 4Gi -
4、编辑service,设置为合适的类型,默认None
默认为无头SERVICE(ClusterIP,None) -
5、应用manifests
cd kube-state-metrics-2.9.2/examples/standard for i in `ls *.yaml` do kubectl apply -f $i done -
6、配置prometheus抓取任务
#----------kube-state-metrics----------# - job_name: cce-app-pre/kube-state-metrics metric_relabel_configs: - target_label: cluster replacement: cce-app-pre - target_label: env replacement: pre # label_NAME ---映射---> NAME - action: labelmap regex: label_(.*) replacement: $1 # 删除label_NAME - action: labeldrop regex: label_.* static_configs: - targets: - 10.121.60.75:8080 -
7 启用内置alert
复制examples/prometheus-alerting-rules到prometheus -
8 自定义监控,并展示抓取到的pod标签(由于metrics不携带podlabel,需要合成)
kube_pod_status_phase{phase="Pending"} * on(pod) group_right kube_pod_labels
-

3085

被折叠的 条评论
为什么被折叠?



