集群运行监控(endpoints)
kube-apiserver扮演了整个Kubernetes集群管理的入口的角色,负责对外暴露Kubernetes API。为了能够让部署在集群内的应用(kubernetes插件或者用户应用)能够与kube-apiserver交互,Kubernetes会默认在命名空间下创建一个名为kubernetes的服务,而该kubernetes服务代理的后端实际地址通过endpoints进行维护,如下:
kubectl get svc kubernetes -o wide kubectl get endpoints kubernetes
这样应用或者系统主机就可以通过集群内部的DNS域名kubernetes.default.svc访问到其,上面收集cadvisor信息时就使用到它。
获取API servers
Scrape config for API servers。修改/添加任务:
vim prometheus-config.yml
...
scrape_configs:
- job_name: 'kubernetes-apiservers'
kubernetes_sd_configs:
- role: endpoints
scheme: https
tls_config:
ca_file: /var/run/secrets/kubernetes.io/serviceaccount/ca.crt
bearer_token_file: /var/run/secrets/kubernetes.io/serviceaccount/token
relabel_configs:
- source_labels:
- __meta_kubernetes_namespace
- __meta_kubernetes_service_name
- __meta_kubernetes_endpoint_port_name
action: keep
regex: default;kubernetes;https
...
kubectl replace -f prometheus-config.yml curl -X POST http://172.16.220.143:30090/-/reload
重新加载配置后查看结果:
服务发现(service-endpoints)
如果我们想要通过kube-apiserver监控服务指标,只需要通过endpoints资源找到kubernetes对应的所有后端地址即可。
创建监控任务service-endpoints,指定服务发现模式为endpoints。Promtheus会查找当前集群中所有的endpoints配置,并通过relabel进行判断是否为apiserver对应的访问地址:
vim prometheus-config.yml
...
- job_name: 'kubernetes-service-endpoints'
kubernetes_sd_configs:
- role: endpoints
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
regex: (https?)
target_label: __scheme__
- source_labels:
- __meta_kubernetes_service_annotation_prometheus_io_path
action: replace
regex: (.+)
target_label: __metrics_path__
- source_labels:
- __address__
- __meta_kubernetes_service_annotation_prometheus_io_port
action: replace
regex: ([^:]+)(?::\d+)?;(\d+)
replacement: $1:$2
target_label: __address__
- action: labelmap
regex: __meta_kubernetes_service_label_(.+)
- source_labels:
- __meta_kubernetes_namespace
action: replace
target_label: kubernetes_namespace
- source_labels:
- __meta_kubernetes_service_name
action: replace
target_label: kubernetes_service
kubectl replace -f prometheus-config.yml curl -X POST http://172.16.220.143:30090/-/reload
通过relabel过滤可被发现的服务,并替换连接地址端口等;重新加载配置文件,得到结果:


