【问题标题】:Why is it that my Prometheus Operator ServiceMonitor needs a `release` label to run properly?为什么我的 Prometheus Operator ServiceMonitor 需要 `release` 标签才能正常运行?
【发布时间】:2021-11-26 16:25:00
【问题描述】:

当我部署这个时:

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

我的服务显示在 prometheus 目标下并正常运行。

如果我改为应用以下内容,目标就会消失:

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

【问题讨论】:

    标签: prometheus grafana prometheus-operator


    【解决方案1】:

    查了kube-prometheus-stackvalues.yaml后才发现这个问题

        ## 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
    

    当你使用 helm 安装 kube-prometheus-stack 时,它会将标签 release: &lt;prometheus-installed-namespace&gt; 添加到 Kubernetes 资源中。

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

    你应该可以看到prometheus的选择器用命令选择serviceMonitor

    kubectl -n <prometheus-installed-namespace> get prometheus -o yaml
    

    然后搜索serviceMonitorSelector

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

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

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

    【讨论】:

      猜你喜欢
      • 2019-03-30
      • 2021-02-12
      • 1970-01-01
      • 2011-07-15
      • 2013-04-10
      • 1970-01-01
      • 2020-05-04
      • 1970-01-01
      • 2017-12-22
      相关资源
      最近更新 更多