Ubuntu1804下k8s-CoreDNS占CPU高问题排查
正文
未经允许不得转载!
原文链接:https://www.cnblogs.com/yaohong/p/14845377.html
1.背景:
最近在ubuntu804上适配k8s的时候,部署到业务pod的时候,出现了服务器卡死,top查看发现负载很高,进行CPU排序发现如下信息,可知是CoreDNS服务导致。
2. 分析排查:
1.分析CoreDNS问题
根据coredns状态是CrashLoopBackOff
1 2 3 | # kubectl get pod -n kube-system -l k8s-app=kube-dns NAME READY STATUS RESTARTS AGE coredns-76b74f549-99331 0/1 CrashLoopBackOff 5 4m45s |
查看coredns对应的pod日志有如下错误:
1 2 3 4 5 6 7 | # kubectl -n kube-system logs coredns-76b74f549-99bxd .:53 2021/06/03 06:20:28 [INFO] CoreDNS-1.1.3 2021/06/03 06:20:28 [INFO] linux/amd64, go1.10.1, b0fd575c 2021/06/03 06:20:28 [INFO] plugin/reload: Running configuration MD5 = d23dc615bc772457a380ba5d5c2690b7 CoreDNS-1.1.3 [FATAL] plugin/loop: Loop (127.0.0.1:60429 -> :53) detected for zone "." , see https: //coredns.io/plugins/loop#troubleshooting. Query: "HINFO 6292641803451309721.7599235642583168995." |
再根据日志报错,可以获取到如下文档内容:
由以上信息可知:
Kubernetes集群中转发循环的一个常见原因是与主机节点上的本地DNS缓存的交互(例如systemd)。例如,在某些配置中,systemd resolved将把环回地址127.0.0.53作为名称服务器放入/etc/resolv.conf。默认情况下,Kubernetes(通过kubelet)将使用默认dnsPolicy将这个/etc/resolv.conf文件传递给所有pod,使它们无法进行DNS查找(包括CoreDNS pod)。
简而言之:DNS回环了。
出现这个问题的关键原因是ubuntu1804中 /etc/resolv.conf文件默认nameserver为127.0.0.53,所以需要调整kubelet的启动文件中DNS配置文件路径到/run/systemd/resolve/resolv.conf。
ansibel部署的时候kubelet-config.yaml文件可以做如下修改做判断:
1 2 3 4 5 | {% if ansible_distribution == "Ubuntu" and ansible_distribution_major_version| int > 16 %} resolvConf: /run/systemd/resolve/resolv.conf {% else %} resolvConf: /etc/resolv.conf {% endif %} |
修改kubelet启动文件,再重新部署k8s,问题解决。
1 2 3 4 5 | root@ubuntu1804:~# kubectl get pod -n kube-system -l k8s-app=kube-dns NAME READY STATUS RESTARTS AGE coredns-5757945748-mh8mp 1/1 Running 0 23h coredns-5757945748-p2scc 1/1 Running 0 23h coredns-5757945748-vfmkz 1/1 Running 0 23h |
2.CoreDNS升级
在查看CoreDNS Github的时候,获取到CoreDNS从1.2.1版本开始添加的loop插件用于防止回环问题。
再查看自己正在使用的CoreDNS版本,竟然还为1.1.3。
1 2 3 | # kubectl -n kube-system logs -f coredns-8f9b4c9f5-9rvjq .:53 2021/06/03 06:20:28 [INFO] CoreDNS-1.1.3g |
果断升级CoreDNS版本,
到此CoreDNS问题全部解决。
3.参考文档
https://coredns.io/plugins/loop/#troubleshooting
https://kubernetes.io/zh/docs/tasks/administer-cluster/dns-debugging-resolution/
https://github.com/coredns/coredns/tree/v1.2.1/plugin/loop
原文链接:https://www.cnblogs.com/yaohong/p/14845377.html
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义
· 地球OL攻略 —— 某应届生求职总结
· 提示词工程——AI应用必不可少的技术
· Open-Sora 2.0 重磅开源!
· 周边上新:园子的第一款马克杯温暖上架
2020-06-03 Kubernetes 健康状态检查liveness和readiness
2019-06-03 Docker 安装MySQL