我已经使用[this][1]在一个kubernetes集群节点上配置了Prometheus。之后,我添加了以下prometheus.yml
文件。我可以列出节点和apiserver,但对于pod,所有pod都会显示并出错:
Get "https:// xx.xx.xx:443 /metrics": dial tcp xx.xx.xx:443: connect: connection refused and for some pods the status is unknown.
有人能指出我在这里做错了什么吗?
Cat prometheus.yml
global:
scrape_interval: 1m
scrape_configs:
- job_name: 'prometheus'
scrape_interval: 5s
static_configs:
- targets: ['localhost:9090']
# metrics for default/kubernetes api's from the kubernetes master
- job_name: 'kubernetes-pods'
kubernetes_sd_configs:
- role: pod
bearer_token_file: /dfgdjk/token
api_server: https://masterapi.com:3343
tls_config:
insecure_skip_verify: true
tls_config:
insecure_skip_verify: true
bearer_token_file: /dfgdjk/token
scheme: https
relabel_configs:
- action: labelmap
regex: __meta_kubernetes_pod_label_(.+)
- source_labels: [__meta_kubernetes_namespace]
action: replace
target_label: kubernetes_namespace
- source_labels: [__meta_kubernetes_pod_name]
action: replace
target_label: kubernetes_pod_name
# metrics for default/kubernetes api's from the kubernetes master
- job_name: 'kubernetes-apiservers'
kubernetes_sd_configs:
- role: endpoints
api_server: https://masterapi.com:3343
bearer_token_file: /dfgdjk/token
tls_config:
insecure_skip_verify: true
tls_config:
insecure_skip_verify: true
bearer_token_file: /dfgdjk/token
scheme: https
relabel_configs:
- source_labels: [__meta_kubernetes_namespace, __meta_kubernetes_service_name, __meta_kubernetes_endpoint_port_name]
action: keep
regex: default;kubernetes;https][1]
[1]: https://devopscube.com/install-configure-prometheus-linux/
如果没有kubernetes集群中的任何prometheus组件,就不可能将度量值获取到外部prometheus服务器。之所以会发生这种情况,是因为集群网络与主机的网络隔离,并且不可能直接从集群外部的pod中获取度量。
请参阅从k8s集群外部使用prometheus监控kubernetes GitHub问题
可以选择:
- 使用
prometheus operator
或手动在集群内安装prometheus-示例 - 使用代理解决方案,例如来自GitHub上同一线程的这个-k8s prometheus代理
- 除了集群中安装的prometheus之外,还可以在
federation
中安装外部prometheu斯,这样所有日志都可以保存在集群之外。请参阅普罗米修斯联盟
同样重要的是,kube状态度量也应该安装在kubernetes集群中。如何设置。
编辑:您还可以参考另一个SO问题/答案,该问题/答案确认只有通过其他步骤或OP才能由另一个代理解决方案解决。