有人能指导K8s的自动发现配置吗?普罗米修斯服务器在集群之外。我尝试了库伯内特斯的服务发现和本讨论中提到的人
我还不是一个足以解释这里所有细节的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
获取kubernetes_sd_config中的未知字段:api_servers、in_cluster、retry_interval或其他缩进错误
在示例配置中,他们提到了ca_file:
。如何从K8s获取证书文件,或者有什么方法可以指定K8sconfig
文件(~/.库贝/config)
通过挖掘我发现的源代码,普罗米修斯总是使用集群内配置,如果配置中没有提供api_server
(发现/kubernetes/kubernetes. go#L90-L96
)。
不知何故,文档没有提到库伯内特斯配置参数,但源代码有(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
我不知道retry_interval
参数来自哪里,但AFAIK这不是库伯内特斯配置参数,也不是普罗米修斯配置的一部分。
在@svenwltr答案的帮助下,我创建了可以在K8s集群中启动的docker映像。检查我的回购
如何检索该文件取决于您的集群设置
如何从K8s获取该证书文件
默认情况下,kubernetes将客户端CA证书文件存储在/etc/kubernetes/pki/ca. crt
中,也存储在kubeconfig
使用的ConfigMap中的/var/run/kubernetes.io/serviceaccount/ca.crt
中。