问题描述
使用 kube-prometheus-stack 舵图,版本 16.10.0。到目前为止,我通过 helm 自定义值添加了我的自定义 PrometheusRules
、PodMonitor
和 ServiceMonitor
。
helm install my-kubpromstack prometheus-community/kube-prometheus-stack -n monitoring \
-f my-AlertRules.yaml \
-f my-PodMonitor.yaml
或者在 PrometheusRules
或 PodMonitor
发生变化的情况下,我使用 helm upgrade
。自定义值是基于 kube-prometheus-stack/values.yaml 定义的。我在单独的 YAML 文件中定义 prometheus.additionalPodMonitors
和 additionalPrometheusRulesMap
的地方
helm upgrade my-kubpromstack -n monitoring \
--reuse-values \
-f my-AlertRules.yaml \
-f my-PodMonitor.yaml
问题:如何让 kube-prometheus-stack
的 Prometheus 服务器了解在 helm 值之外创建的规则、podmonitor、servicemonitor?
例如,下面的 PodMonitor
定义不会被 Prometheus 选取(即不会出现在 Prometheus UI 的目标中)。
kubectl apply -f - << EOF
apiVersion: monitoring.coreos.com/v1
kind: PodMonitor
Metadata:
name: cluster-operator-metrics
labels:
app: strimzi
spec:
selector:
matchLabels:
strimzi.io/kind: cluster-operator
namespaceSelector:
matchNames:
- my-strimzi
podMetricsEndpoints:
- path: /metrics
port: http
EOF
要监控的 Pod 有一个标签 strimzi.io/kind: cluster-operator
,位于 my-strimzi
命名空间中。我希望 Prometheus 自动识别上面的 podmonitor
。因为 kube-prometheus-stack/values.yaml 中的默认 podMonitorSelector: {} 有一条注释说:
## PodMonitors to be selected for target discovery.
## If {},select all PodMonitors
解决方法
如果您将 prometheus.prometheusSpec.podMonitorSelectorNilUseHelmValues
定义为 false
(在 values.yaml
中,默认设置为 true
)您可以实现您的目标。由于值为 true
,它只会尝试设置一个 release
标签来匹配 PodMonitor
,您自己的定义不包括该标签。
或者,您可以将其保留为 true
并将 prometheus.prometheusSpec.podMonitorSelector
设置为:
matchLabels:
prometheus: "true"
并在您的 prometheus: "true"
中添加标签 podmonitor.yaml
。
如果您对详细信息感兴趣,请点击 here 查看代码。
请注意此链接中的图表版本为 15.4.4
,您应该更改为您正在使用的版本,以防万一有任何更新。