关于CoreDNS的监控方法
-
- KubernetesのCoreDNSとは?
-
- KubernetesのCoreDNSを監視する方法は?
-
- KubernetesのCoreDNSを監視する:どのメトリクスを確認する必要がありますか?
- まとめ
Kubernetes CoreDNS 是什么?
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)
概括