K8S监控-Prometheus信息收集

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

发表评论

error: Content is protected !!