Prometheus 自动发现 K8s

Vee*_*dra 5 kubernetes prometheus

有人可以指导K8s自动发现的配置。Prometheus 服务器在集群之外。我尝试过使用 Kubernetes 进行服务发现,并且有人在此讨论中提到过

我还不是 K8s 专家,不足以解释这里的所有细节,但从根本上说,在集群之外运行 Prometheus 是完全可能的(并且需要冗余跨集群元监控等)。参见 http://prometheus.io/docs/operating/configuration/#kubernetes-sd-configurations-kubernetes_sd_config 中in_cluster配置选项 。如果你在外面运行它,你需要跳过证书圈。

所以,我做了一个简单的配置

  - job_name: 'kubernetes'

    kubernetes_sd_configs:
      -
        # The API server addresses. In a cluster this will normally be
        # `https://kubernetes.default.svc`. Supports multiple HA API servers.
        api_servers:
          - https://xxx.xx.xx.xx

        # Run in cluster. This will use the automounted CA certificate and bearer
        # token file at /var/run/secrets/kubernetes.io/serviceaccount/ in the pod.
        in_cluster: false

        # Optional HTTP basic authentication information.
        basic_auth:
        username: prometheus
        password: secret

        # Retry interval between watches if they disconnect.
        retry_interval: 5s
Run Code Online (Sandbox Code Playgroud)

获取unknown fields in kubernetes_sd_config: api_servers, in_cluster, retry_interval"或其他一些缩进错误

示例配置中,他们提到了ca_file:. 如何从 K8s 获取该证书文件或者有什么方法可以指定 K8sconfig文件(~/.kube/config)

sve*_*ltr 7

通过挖掘我发现的源代码,如果api_server配置 ( discovery/kubernetes/kubernetes.go#L90-L96) 中没有提供,Prometheus 总是使用集群配置。

不知何故,文档没有说明 Kubernetes 配置参数,但源代码有 ( config/config.go#L1026-L1037)。因此,没有名为 的列表api_servers,而是名为的单个参数api_server

所以你的配置应该是这样的(未经测试):

  - job_name: 'kubernetes'

    kubernetes_sd_configs:
      -
        # The API server addresses. In a cluster this will normally be
        # `https://kubernetes.default.svc`. Supports multiple HA API servers.
        api_server: https://xxx.xx.xx.xx

        # Optional HTTP basic authentication information.
        basic_auth:
          username: prometheus
          password: secret

        # specify the CA
        tls_config:
          ca_file: /path/to/ca.crt
          ## If the actual CA file isn't available you need to disable verification:
          # insecure_skip_verify: true
Run Code Online (Sandbox Code Playgroud)

我不知道retry_interval参数来自哪里,但 AFAIK 这不是 Kubernetes 配置参数,也不是 Prometheus 配置的一部分。

  • 在这种情况下,您必须指定 CA 证书。我更新了答案。如何检索该文件取决于您的集群设置。如果设置不可用,您可以通过 [`insecure_skip_verify`](https://github.com/prometheus/prometheus/blob/099df0c5f00c45c007a9779a2e4ab51cf4d076bf/config/config.go#L460) 禁用检查。 (2认同)