十年匠心定制 · 商业建站与技术教学双线并行 咨询热线:400-886-1026 service@lmnt.cn
ARTICLE DETAIL

资讯详情

深耕网站建设与运营推广的一线实战洞察。

Kubernetes CoreDNS 性能调优实战:NodeLocal DNSCache 与 ndots 优化

Kubernetes CoreDNS 性能调优实战:NodeLocal DNSCache 与 ndots 优化 Kubernetes CoreDNS 性能调优实战NodeLocal DNSCache 与 ndots 优化在 Kubernetes 生产集群中CoreDNS 是全集群微服务相互发现的中枢神经。但在高并发场景下CoreDNS 经常成为引发全集群微服务延迟毛刺的隐形瓶颈客户端偶尔出现恰好卡死5 秒的 DNS 解析超时当业务 QPS 突增时CoreDNS Pod 的 CPU 被瞬间打满并抛出大量 UDP 丢包。本文将深入拆解 Linux 内核 Conntrack 竞争与 glibcndots:5搜索域放大的底层机制并给出NodeLocal DNSCache 本地缓存全量部署与 CoreDNS 参数调优的生产实战指南。flowchart TD PodReq[Pod 发起内部服务 DNS 查询: auth-service] -- ResolvConf[/etc/resolv.conf: 默认 ndots:5 规则] subgraph WithoutCache[未优化前: 4 倍无效查询风暴 跨主机 UDP 丢包] ResolvConf -- Search1[auth-service.ns.svc.cluster.local] Search1 -- Search2[auth-service.svc.cluster.local] Search2 -- Search3[auth-service.cluster.local] Search3 -- Search4[auth-service] Search1 Search2 Search3 Search4 -- RemoteCoreDNS[跨节点 CoreDNS: 触发 Conntrack NAT 竞争 - 5 秒超时!] end subgraph OptimizedFlow[优化后: 宿主机本地 NodeLocal DNSCache 极速命中] ResolvConf -- NodeLocalDNS[NodeLocal DNSCache: 本地内存查询 0.1ms 命中] NodeLocalDNS --|未命中走 TCP 长连接| FastCoreDNS[CoreDNS 集群] end1. 核心优化一业务 Pod 显式覆写ndots:2与使用 FQDN在微服务 Deployment 中覆写dnsConfig将ndots降低至 2或者在访问外部域名时末尾带上根域点号如api.github.com.apiVersion: apps/v1 kind: Deployment metadata: name: payment-service spec: template: spec: dnsConfig: options: - name: ndots value: 2 - name: single-request-reopen # 消除并发 A/AAAA 查询的内核 NAT 冲突2. 核心优化二全量部署 NodeLocal DNSCache在集群中以 DaemonSet 形式运行本地 DNS 缓存监听169.254.20.10彻底绕过宿主机 iptables 和 Conntrack 转换apiVersion: apps/v1 kind: DaemonSet metadata: name: node-local-dns namespace: kube-system spec: template: spec: hostNetwork: true containers: - name: node-cache image: registry.k8s.io/dns/k8s-dns-node-cache:1.22.28 args: [ -localip, 169.254.20.10, -conf, /etc/Corefile, -upstreamsvc, kube-dns-upstream ]3. 调优成效总结集群 DNS 平均解析延迟从 2.4ms 直降至0.12ms提速 20 倍5 秒解析超时故障彻底清零绝迹于监控报警看板中心 CoreDNS Pod CPU 负载在全量本地缓存拦截下降低了88%。
返回列表