1.背景:

最近在ubuntu804上适配k8s的时候,部署到业务pod的时候,出现了服务器卡死,top查看发现负载很高,进行CPU排序发现如下信息,可知是CoreDNS服务导致。

2. 分析排查:

1.分析CoreDNS问题

根据coredns状态是CrashLoopBackOff

# 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日志有如下错误:

# 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)。

出现这个问题的关键原因是ubuntu1804中 /etc/resolv.conf文件默认nameserver为127.0.0.53,所以需要调整kubelet的启动文件中DNS配置文件路径到/run/systemd/resolve/resolv.conf。

ansibel部署的时候kubelet-config.yaml文件可以做如下修改做判断:

{% 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,问题解决。

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。

# 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

最新文章

  1. linux资源使用配置文件 /etc/security/limits.conf和ulimit
  2. MF-800U
  3. 软件工程 speedsnail 冲刺7
  4. java中的线程创建和使用
  5. ListView自定义适配器--10.17
  6. 浅析Android中的消息机制
  7. windbg命令学习3
  8. NoSql研究报告
  9. 只查看tomcat进程,不包括grep
  10. Flex 将默认日期格式转化成通用格式
  11. C&C++ Calling Convention
  12. BZOJ4167 : 永远的竹笋采摘
  13. linux wheel组
  14. overload与override的区别
  15. Phoenix的安装使用与SQL查询HBase
  16. Android的startActivityForResult不起作用
  17. h2数据库的简单使用
  18. Maven学习(十一)-----使用Maven创建Web应用程序项目
  19. Java 之变量和常量(2)
  20. Spring Security教程 ---- 验证码功能的实现

热门文章

  1. 如何高效的遍历Map?你常用的不一定是最快的
  2. 【VsCode】 实用插件列表
  3. 织梦DedeCMS自定义表单限制IP24小时只能提交多少次
  4. Windows PE 重定位表编程(枚举重定位地址)
  5. Insert Pictures In Hexo Blog
  6. HelloGitHub 小程序上线了,蛋只有一个搜索功能
  7. Java 进行时间处理
  8. 上手 WebRTC DTLS 遇到很多 BUG?浅谈 DTLS Fragment
  9. 面试遇到的坑CSS篇 1
  10. 在微信框架模块中,基于Vue&Element前端的后台管理功能介绍