问题描述
我有一个Kubernetes集群(使用typhoon模块构建)和一个Prometheus实例,位于不同的VPC中(在docker-compose上运行,而不是在Kubernetes集群上运行)。我启用了vpc对等连接,并且必需的端口已对此vpc打开。除coredns pod之外,所有指标均按预期进行了抓取。这里的问题是coredns Pod被分配了10.2。。 IP,这与我为Pod运行所配置的IP范围不同。
如果coredns pod获得IP 172. 。。*,我的普罗米修斯将能够解决它,并且抓取将成功。
现在,我不确定如何抓取此指标。如果您知道我在做什么错,请告诉我。
$ kubectl get pods -n kube-system -o wide | grep coredns
coredns-7d8995c4cd-4l4ft 1/1 Running 1 7d1h 10.2.5.2 ip-172-*-*-* <none> <none>
coredns-7d8995c4cd-vxd9d 1/1 Running 1 6d3h 10.2.3.9 ip-172-*-*-* <none> <none>
Prometheus.yml文件配置有以下作业。
- job_name: 'kubernetes-service-endpoints'
kubernetes_sd_configs:
- role: endpoints
api_server: https://kubernetes-cluster:6443
tls_config:
insecure_skip_verify: true
bearer_token: "TOKEN"
bearer_token: "TOKEN"
honor_labels: true
relabel_configs:
- source_labels: [__Meta_kubernetes_service_annotation_prometheus_io_scrape]
action: keep
regex: true
- source_labels: [__Meta_kubernetes_service_annotation_prometheus_io_scheme]
action: replace
target_label: __scheme__
regex: (https?)
- source_labels: [__Meta_kubernetes_service_annotation_prometheus_io_path]
action: replace
target_label: __metrics_path__
regex: (.+)
- source_labels: [__address__,__Meta_kubernetes_service_annotation_prometheus_io_port]
action: replace
target_label: __address__
regex: ([^:]+)(?::\d+)?;(\d+)
replacement: $1:$2
- action: labelmap
regex: __Meta_kubernetes_service_label_(.+)
- source_labels: [__Meta_kubernetes_namespace]
action: replace
target_label: namespace
- source_labels: [__Meta_kubernetes_pod_name]
action: replace
target_label: pod
- source_labels: [__Meta_kubernetes_service_name]
action: replace
target_label: job
metric_relabel_configs:
- source_labels: [__name__]
action: drop
regex: etcd_(debugging|disk|request|server).*
P.S:我使用Flannel作为我的网络CNI,以便获得使用主机网络本身IP创建的Pod。
更新信息: 我尝试在kubernetes上部署prometheus,并尝试按照Yaron的建议将这些数据联合到我的prometheus docker。
我正在为联邦尝试以下配置,但没有看到任何指标已加载到我的目标prometheus。
- job_name: 'federate'
scrape_interval: 10s
honor_labels: true
metrics_path: '/federate'
params:
'match[]':
- '{job="prometheus"}'
- '{job="kubernetes-nodes"}'
- '{job="kubernetes-apiservers"}'
- '{job="kubernetes-service-endpoints"}'
- '{job="kubernetes-cadvisor"}'
- '{job="kubelet"}'
- '{job="etcd"}'
- '{job="kubernetes-services"}'
- '{job="kubernetes-pods"}'
scheme: https
static_configs:
- targets:
- prom.mycompany.com
解决方法
解决此问题的最佳实践是在运行Coredns的群集中运行一个prometheus实例,并将该prometheus刮取的指标联合到使用docker-compose运行的外部prometheus。
您可以阅读有关联合here的更多信息,以了解如何开始使用联合。
一个更高级的用例是使用Thanos在不同的Prometheus服务器之间更好地分配查询,但是要点仍然是在每个集群中运行内部Prometheus服务器。