关于CoreDNS的监控方法

    • KubernetesのCoreDNSとは?

 

    • KubernetesのCoreDNSを監視する方法は?

 

    • KubernetesのCoreDNSを監視する:どのメトリクスを確認する必要がありますか?

 

    まとめ

 

Kubernetes CoreDNS 是什么?

核心DNS

 

kubedns: Kubernetes用のSkyDNSの実装です。Kubernetesクラスター内のDNS解決を担当します。KubernetesのAPIを監視し、適切なDNSレコードを提供します。

dnsmasq: SkyDNSの解決要求のためのDNSキャッシュ機構を提供します。

sidecar: このコンテナは、メトリクスをエクスポートし、DNSサービスのヘルスチェックを実行します。

Dnsmasq 的中文释义这个问题导致了安全漏洞的出现。我们正在解决 kube-dns 的外部服务用存根域名的一些其他问题。

# kubectl get ep kube-dns -n kube-system -o json |jq -r ".subsets"[  {    "addresses": [      {        "ip": "192.169.107.100",        "nodeName": "k8s-control-2.lab.example.com",        "targetRef": {        "kind": "Pod",        "name": "coredns-565d847f94-rz4b6",        "namespace": "kube-system",        "uid": "c1b62754-4740-49ca-b506-3f40fb681778"      }    },    {      "ip": "192.169.203.46",      "nodeName": "k8s-control-3.lab.example.com",      "targetRef": {        "kind": "Pod",        "name": "coredns-565d847f94-8xqxg",        "namespace": "kube-system",        "uid": "bec3ca63-f09a-4007-82e9-0e147e8587de"      }    }  ],  "ports": [    {      "name": "dns-tcp",      "port": 53,      "protocol": "TCP"    },    {      "name": "dns",      "port": 53,      "protocol": "UDP"    },    {      "name": "metrics",      "port": 9153,      "protocol": "TCP"     }   ]  }]

 

如何监视 Kubernetes 上的 CoreDNS?

/metrics指标/指标

手动访问终端节点

 

# curl http://192.169.203.46:9153/metrics# HELP coredns_build_info A metric with a constant '1' value labeled by version, revision, and goversion from which CoreDNS was built.# TYPE coredns_build_info gaugecoredns_build_info{goversion="go1.18.2",revision="45b0a11",version="1.9.3"} 1# HELP coredns_cache_entries The number of elements in the cache.# TYPE coredns_cache_entries gaugecoredns_cache_entries{server="dns://:53",type="denial",zones="."} 46coredns_cache_entries{server="dns://:53",type="success",zones="."} 9# HELP coredns_cache_hits_total The count of cache hits.# TYPE coredns_cache_hits_total countercoredns_cache_hits_total{server="dns://:53",type="denial",zones="."} 6471coredns_cache_hits_total{server="dns://:53",type="success",zones="."} 6596# HELP coredns_cache_misses_total The count of cache misses. Deprecated, derive misses from cache hits/requests counters.# TYPE coredns_cache_misses_total countercoredns_cache_misses_total{server="dns://:53",zones="."} 1951# HELP coredns_cache_requests_total The count of cache requests.# TYPE coredns_cache_requests_total countercoredns_cache_requests_total{server="dns://:53",zones="."} 15018# HELP coredns_dns_request_duration_seconds Histogram of the time (in seconds) each request took per zone.# TYPE coredns_dns_request_duration_seconds histogramcoredns_dns_request_duration_seconds_bucket{server="dns://:53",zone=".",le="0.00025"} 14098coredns_dns_request_duration_seconds_bucket{server="dns://:53",zone=".",le="0.0005"} 14836coredns_dns_request_duration_seconds_bucket{server="dns://:53",zone=".",le="0.001"} 14850coredns_dns_request_duration_seconds_bucket{server="dns://:53",zone=".",le="0.002"} 14856coredns_dns_request_duration_seconds_bucket{server="dns://:53",zone=".",le="0.004"} 14857coredns_dns_request_duration_seconds_bucket{server="dns://:53",zone=".",le="0.008"} 14870coredns_dns_request_duration_seconds_bucket{server="dns://:53",zone=".",le="0.016"} 14879coredns_dns_request_duration_seconds_bucket{server="dns://:53",zone=".",le="0.032"} 14883coredns_dns_request_duration_seconds_bucket{server="dns://:53",zone=".",le="0.064"} 14884coredns_dns_request_duration_seconds_bucket{server="dns://:53",zone=".",le="0.128"} 14884coredns_dns_request_duration_seconds_bucket{server="dns://:53",zone=".",le="0.256"} 14885coredns_dns_request_duration_seconds_bucket{server="dns://:53",zone=".",le="0.512"} 14886coredns_dns_request_duration_seconds_bucket{server="dns://:53",zone=".",le="1.024"} 14887coredns_dns_request_duration_seconds_bucket{server="dns://:53",zone=".",le="2.048"} 14903coredns_dns_request_duration_seconds_bucket{server="dns://:53",zone=".",le="4.096"} 14911coredns_dns_request_duration_seconds_bucket{server="dns://:53",zone=".",le="8.192"} 15018coredns_dns_request_duration_seconds_bucket{server="dns://:53",zone=".",le="+Inf"} 15018coredns_dns_request_duration_seconds_sum{server="dns://:53",zone="."} 698.531992215999coredns_dns_request_duration_seconds_count{server="dns://:53",zone="."} 15018…(output truncated)

/度量指标

# kubectl get svc -n kube-systemNAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGEkube-dns ClusterIP 10.96.0.10 <none> 53/UDP,53/TCP,9153/TCP 129d# kubectl exec -it my-pod -n default -- /bin/bash# curl http://kube-dns.kube-system.svc:9153/metrics

 

使用Prometheus的配置方法来抓取CoreDNS指标

普罗米修斯.yml终端点角色

普罗米修斯配置文件.yml配置映射

# kubectl edit cm prometheus-server -n monitoring -o yaml

爬取配置

- honor_labels: true  job_name: kubernetes-service-endpoints  kubernetes_sd_configs:   - role: endpoints  relabel_configs:  - action: keep    regex: true    source_labels:    - __meta_kubernetes_service_annotation_prometheus_io_scrape  - action: drop    regex: true    source_labels:    - __meta_kubernetes_service_annotation_prometheus_io_scrape_slow  - action: replace    regex: (https?)    source_labels:    - __meta_kubernetes_service_annotation_prometheus_io_scheme    target_label: scheme  - action: replace    regex: (.+)    source_labels:    - __meta_kubernetes_service_annotation_prometheus_io_path    target_label: metrics_path  - action: replace    regex: (.+?)(?::\d+)?;(\d+)    replacement: $1:$2    source_labels:    - address    - __meta_kubernetes_service_annotation_prometheus_io_port    target_label: address  - action: labelmap    regex: _meta_kubernetes_service_annotation_prometheus_io_param(.+)    replacement: _param$1  - action: labelmap    regex: _meta_kubernetes_service_label(.+)  - action: replace    source_labels:    - __meta_kubernetes_namespace    target_label: namespace  - action: replace    source_labels:    - __meta_kubernetes_service_name    target_label: service  - action: replace    source_labels:    - __meta_kubernetes_pod_node_name    target_label: node

 

 

 

需要检查哪些核心DNS顶级指标?

免责声明:CoreDNS指标可能因Kubernetes版本和平台的不同而有所差异。本文中使用的是Kubernetes 1.25和CoreDNS 1.9.3版本。可以在CoreDNS的报告中查看您所使用版本的可用指标。

 

    CoreDNSレプリカの数:Kubernetes環境で稼働しているCoreDNSレプリカの数を監視したい場合は、 coredns_build_info メトリクスをカウントすることで行えます。このメトリクスは、そのようなPod上で動作しているCoreDNSのビルドに関する情報を提供します。

 

count(coredns_build_info)

四个黄金信号

错误

服务失败拒绝

    coredns_dns_responses_total: このカウンターは、CoreDNS応答コード、ネームスペース、およびCoreDNSインスタンスの数についての情報を提供します。各レスポンスコードのレートを取得したい場合があります。これは、CoreDNSインスタンスのエラー率を測定するために常に有用です。

 

sum(rate(coredns_dns_responses_total{instance=~".*"}[2m])) by (rcode, instance)

 

 

延迟

 

    coredns_dns_request_duration_seconds_bucket: CoreDNSリクエストの継続時間(秒)。CoreDNSインスタンス間でレイテンシーがどのように分布しているかを確認するために、99パーセンタイルを計算したい場合があります。

 

histogram_quantile(0.99, sum(rate(coredns_dns_request_duration_seconds_bucket{instance=~".*"}[2m])) by (server,zone,le,instance))

 

 

交通流量

 

    coredns_dns_requests_total: ゾーン、プロトコル、ファミリーごとのDNSリクエストカウンター。タイプ別(A、AAAA)のCoreDNSリクエストのレートを測定・監視したい場合があります。”A “はipv4クエリーを表し、”AAAA “はipv6クエリーを表します。

 

(sum(rate(coredns_dns_requests_total{instance=~".*"}[2m])) by (type,instance))

 

 

饱和度 dù)

 

其他

缓存机制

    coredns_cache_hits_total: キャッシュヒットカウンターです。以下のクエリーを実行して、キャッシュヒット率を監視することができます。このPromQLクエリーのおかげで、CoreDNSキャッシュヒットの拒否率と成功率を簡単に監視することができます。

 

sum(rate(coredns_cache_hits_total{instance=~".*"}[2m])) by (type,instance)

 

 

概括

 

Thanks to the Sysdig Monitor out-of-the-box dashboards, you'll have all the Kubernetes CoreDNS metrics handy.
广告
将在 10 秒后关闭
bannerAds