集群运行监控(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过滤可被发现的服务,并替换连接地址端口等;重新加载配置文件,得到结果: