Kubernetes / Prometheus / 监控平台

Prometheus监控CoreDNS

浅时光博客 · 7月11日 · 2022年 · 416 字 · 约 2 分钟 5.4w次已读
Grafana监控面板文件
价格:免费
    文件格式Json
    使用说明Grafana导入Json文件
    最近更新2024年02月25日
    AI 文章摘要 时光AI(本站开发)
    文章来源(Source):浅时光博客
    原文链接:https://dqzboy.com

    一、监控方案说明


    K8s中的域名解析的主流方案是CoreDNS,部署完成K8s集群之后,我们都会部署CoreDNS服务实现集群内部域名解析访问,而且CoreDNS有默认提供监控metrics的接口,这里我们prometheus的用的是kube-prometheus,通过serviceMontor来监控CoreDNS的Service。

    二、创建监控接口SVC


    默认部署的coredns,会自动创建一个kube-dns的Service,业务pod内就是通过访问这个Service来用coredns进行域名的解析。CoreDNS默认用9153端口提供了metrics接口,因此我们还需要新建一个Service,用来暴露CoreDNS的9153端口。

    [root@k8s-master1 coredns]# vim coredns-svc.yaml
    apiVersion: v1
    kind: Service
    metadata:
      name: coredns-metrics
      namespace: kube-system
      labels:
        app: cordns  
    spec:
      ports:
      - name: croedns-metrics
        port: 9153
        protocol: TCP
        targetPort: 9153
      selector:
        k8s-app: kube-dns
      sessionAffinity: None
      type: ClusterIP
    
    [root@k8s-master1 coredns]# kubectl apply -f coredns-svc.yaml
    [root@k8s-master1 coredns]# kubectl get svc -n kube-system
    prom_coredns01

    三、配置Prometheus采集监控数据


    [root@k8s-master1 discovery]# vim prometheus-additional-configs.yaml
    apiVersion: v1
    kind: Secret
    metadata:
      name: additional-scrape-configs
      namespace: monitoring
    type: Opaque
    stringData:
      additional-scrape-configs.yaml: |
    ……
        - job_name: coredns-metrics
          honor_labels: true
          honor_timestamps: true
          scrape_interval: 15s
          metrics_path: /metrics
          scheme: http
          kubernetes_sd_configs:
          - role: endpoints
            namespaces:
              names:
              - kube-system
          relabel_configs:
          - source_labels: [__config_type]
            separator: ;
            regex: service
            target_label: __config_type
            replacement: $1
            action: replace
          - source_labels: [__meta_kubernetes_endpoint_port_name]
            separator: ;
            regex: 9153-9153-tcp
            replacement: $1
            action: keep
          - source_labels: [__meta_kubernetes_service_name]
            separator: ;
            regex: coredns-metrics
            replacement: $1
            action: keep
          - source_labels: [__meta_kubernetes_pod_node_name]
            separator: ;
            regex: (.*)
            target_label: node
            replacement: $1
            action: replace
          - source_labels: [__meta_kubernetes_namespace]
            separator: ;
            regex: (.*)
            target_label: namespace
            replacement: $1
            action: replace
          - source_labels: [__meta_kubernetes_service_name]
            separator: ;
            regex: (.*)
            target_label: service
            replacement: $1
            action: replace
          - source_labels: [__meta_kubernetes_pod_name]
            separator: ;
            regex: (.*)
            target_label: pod
            replacement: $1
            action: replace
          - source_labels: [__meta_kubernetes_endpoint_port_name]
            separator: ;
            regex: (.*)
            target_label: endpoint
            replacement: $1
            action: replace

    说明:Secret资源创建成功之后,我们要以Secret的方式挂载到Pormetheus服务中去,不然不生效!

    四、检查Prometheus Targets


    prom_coredns02

    五、添加Grafan监控面板


    prom_coredns03
    3 条回应

    必须 注册 为本站用户, 后才可以发表评论!

    1. 睡呆贵州·贵阳2023-2-9 · 9:49

      请问二进制部署的Prometheus如何获取coredns的监控数据?网上找了几种方法,都没获得监控数据。

      • 浅时光博客2023-2-9 · 13:44

        要监控CoreDNS,需要暴露CoreDNS的指标,然后使用Prometheus进行抓取。
        1、暴露CoreDNS指标:将CoreDNS部署为集群,并在集群中暴露其9153端口(NodePort)
        2、配置Prometheus:在Prometheus的配置文件中添加CoreDNS目标,并执行采集

        - job_name: coredns
          scrape_interval: 15s
          metrics_path: /metrics
          static_configs:
            - targets:
              - coredns:9153
        ...
        
        • 睡呆贵州·贵阳2023-2-9 · 14:52

          多谢,已经获取到监控的数据项了。之前有想过用NodePort的方式去暴露,以为是错的就没去尝试,然后一直百度去了。没想到还真是这样。多谢指点哈