为什么我的 Prometheus Operator ServiceMonitor 需要“release”标签才能正常运行?

Eva*_*eri 5 grafana prometheus prometheus-operator

当我部署这个时:

kind: ServiceMonitor
apiVersion: monitoring.coreos.com/v1
metadata:
  labels:
    app: complaints-monitor
    release: prometheus # <---------
  name: complaints-monitor-svc-monitor
  namespace: default
spec:
  endpoints:
    - path: /metrics
      port: web
  namespaceSelector:
    matchNames:
      - default
  selector:
    matchLabels:
      app: complaints-monitor
Run Code Online (Sandbox Code Playgroud)

我的服务显示在普罗米修斯目标下并正确运行。

如果我应用以下命令,目标就会消失:

kind: ServiceMonitor
apiVersion: monitoring.coreos.com/v1
metadata:
  labels:
    app: complaints-monitor
  name: complaints-monitor-svc-monitor
  namespace: default
spec:
  endpoints:
    - path: /metrics
      port: web
  namespaceSelector:
    matchNames:
      - default
  selector:
    matchLabels:
      app: complaints-monitor
Run Code Online (Sandbox Code Playgroud)

Ta *_*hen 8

values.yaml检查后才发现这个问题kube-prometheus-stack

    ## If true, a nil or {} value for prometheus.prometheusSpec.serviceMonitorSelector will cause the
    ## prometheus resource to be created with selectors based on values in the helm deployment,
    ## which will also match the servicemonitors created
    ##
    serviceMonitorSelectorNilUsesHelmValues: true


    ## ServiceMonitors to be selected for target discovery.
    ## If {}, select all ServiceMonitors
    ##
    serviceMonitorSelector: {}
    ## Example which selects ServiceMonitors with label "prometheus" set to "somelabel"
    # serviceMonitorSelector:
    #   matchLabels:
    #     prometheus: somelabel
Run Code Online (Sandbox Code Playgroud)

当您使用 helm 安装时kube-prometheus-stack,它会release: <prometheus-installed-namespace>为 Kubernetes 资源添加标签。

如果设置serviceMonitorSelectorNilUsesHelmValuestrue选择器,则将添加到prometheus.prometheusSpec.serviceMonitorSelector,在您的情况下是release: prometheus

您应该能够看到 prometheus 使用命令选择 serviceMonitor 的选择器

kubectl -n <prometheus-installed-namespace> get prometheus -o yaml
Run Code Online (Sandbox Code Playgroud)

并搜索serviceMonitorSelector.

release您有两种选择可以在不添加标签的情况下使其正常工作

  1. 设置serviceMonitorSelectorNilUsesHelmValuesfalse,那么prometheus会选择所有serviceMonitor

  2. 或者,设置serviceMonitorSelector为您喜欢的任何标签。