TL;DR 🔗
k8s 集群更新监控 kube-prometheus-stack导致k8s resources自定义labels 丢失
Chart Version: 19.2.3 —> 30.0.1
Resolution:需要指定 metricLabelsAllowlist参数
# --set 表示哪些 k8s resource 需要获取自定义 metrics labels
helm upgrade kube-prometheus-stack --set kube-state-metrics.metricLabelsAllowlist='{namespces=[*],pods=[*],deployments=[*],cronjobs=[*],job=[*],daemonsets=[*],statefulsets=[*],replicasets=[*],services=[*]}' -f values.yaml prometheus-community/kube-prometheus-stack --version=30.0.1 -n kube-prometheus-stack
# 如果不指定 --set,则隐式表达为 --set kube-state-metrics.metricLabelsAllowlist='{namespces=[*]}'
Question Description 🔗
正常情况下,k8s集群都会安装部署一套监控系统 prometheus + grafana 来监控和展示集群中业务应用基本信息
在正常部署应用时,我们会加一些自定义的 label ,例如:service、module、owner等等,并将这些 labels添加到告警邮件中,这样我们就能够迅速定位哪些业务模块发生了问题,这些业务模块是由谁 负责。以保证第一时间能够处理问题并通知到相关人员
由于公司业务布局,组内维护了很多套 k8s集群,在某次告警邮件中,发现自定义的 labels 都不见了,但是其他集群却没有问题。然后就追踪到监控版本的问题。
此问题在官方kube-state-metrics issue和 kubernetes blog 中都有提到,以此确定是 metricLabelsAllowlist 导致的
Tip:helm upgrade –set 用法
# value会有两种情况: 单个值 和 多值列表
--set key=value
example: --set xxx.enabled=false
--set key=valueList
example: --set xxx.list='{value1,value2,value3}'