Ubuntu1804下k8s-CoreDNS占CPU高问题排查
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
Ubuntu1804下k8s-CoreDNS占CPU高问题排查的更多相关文章
- 查看进程中占cpu高的线程方法
当在任务管理器中发现有进程占用cpu过高的时候通过下面的指令将进程快照导出到c盘 jstack -l 进程PID > c:/进程PID.stack (此命令生成.stack文件在c盘中,用文本 ...
- CPU高问题排查
双11大战开始了,这几天公司系统压测,CPU各种报警,于是找了篇关于CPU高问题排查的文章. 一个应用占用CPU很高,除了确实是计算密集型应用之外,通常原因都是出现了死循环. (友情提示:本博文章欢迎 ...
- tomcat+java的web程序持续占cpu高问题调试【转】
转自 tomcat+java的web程序持续占cpu问题调试 - 像风一样的自由 - CSDN博客http://blog.csdn.net/five3/article/details/28416771 ...
- 【原创】查询占CPU高的oracle进程
1:首先使用TOP命令传到占用CPU高的SPID号 PID USERNAME THR PRI NICE SIZE RES STATE TIME CPU COMMAND3575 oracle 1 12 ...
- VMThread占CPU高基本上是JVM在频繁GC导致,原因基本上是冰法下短时间内创建了大量对象堆积造成频繁GC。
今天线上一个java进程cpu负载100%.按以下步骤查出原因. 1.执行top -c命令,找到cpu最高的进程的id 2.执行top -H -p pid,这个命令就能显示刚刚找到的进程的所有线程的资 ...
- Linux 下定位java应用 cpu高的原因(转)
使用场景: 遇到Linux下java应用cpu占用很高的时候,我们很想知道此时的应用到底在做什么导致资源的消耗. 方便我们进一步定位和优化~ 1.查询cpu耗用top5的进程(你也可以top10) [ ...
- omcat+java的web程序持续占cpu高问题调试【转】
1.top -c 2.查看具体线程 ps -m -p 30997 -o tid,%cpu,%mem > threads.log 3.printf %x 31865 其次将需要的线程ID转换为16 ...
- 再一次生产 CPU 高负载排查实践
前言 前几日早上打开邮箱收到一封监控报警邮件:某某 ip 服务器 CPU 负载较高,请研发尽快排查解决,发送时间正好是凌晨. 其实早在去年我也处理过类似的问题,并记录下来:<一次生产 CPU 1 ...
- CPU高的排查
之前有朋友反馈说发的内容希望有个梯度,逐步加深,前面发了几篇关于jvm源码分析的文章,可能我觉得我已经把内容写得浅显易懂了,但是对于某些没怎么接触的同学来说还是比较难理解,这个我以后慢慢改进吧,今天发 ...
随机推荐
- Python 极速入门指南
前言 转载于本人博客. 面向有编程经验者的极速入门指南. 大部分内容简化于 W3School,翻译不一定准确,因此标注了英文. 包括代码一共两万字符左右,预计阅读时间一小时. 目前我的博客长文显示效果 ...
- php连接MySQL数据库的三种方式(mysql/mysqli/pdo)
引言 PHP与MySQL的连接有三种API接口,分别是:PHP的MySQL扩展 .PHP的mysqli扩展 .PHP数据对象(PDO) ,下面针对以上三种连接方式做下总结,以备在不同场景下选出最优方案 ...
- 路由器逆向分析------Running Debian MIPS Linux in QEMU
本文博客地址:http://blog.csdn.net/qq1084283172/article/details/70176583 下面的文章内容主要参考英文博客<Running Debian ...
- UVA10780幂和阶乘
题意: 输入两个整数n,m(1<m<5000,0<n<10000)求最小的k使得m^k是n!的因子. 思路: 比较容易想,一开始手残wa了好几次,我们直接 ...
- 内核模式下的线程同步的分析(Windows核心编程)
内核模式下的线程同步 内核模式下的线程同步是用户模式下的线程同步的扩展,因为用户模式下的线程同步有一定的局限性.但用户模式下线程同步的好处是速度快,不需要切换到内核模式(需要额外的 CPU 时间).通 ...
- 学习Canvas绘图与动画基础 为多边形着色(三)
1 <!DOCTYPE html> 2 <html> 3 <head lang="en"> 4 <meta charset="U ...
- 【JavaScript】【KMP】Leetcode每日一题-实现strStr()
[JavaScript]Leetcode每日一题-实现strStr() [题目描述] 实现 strStr() 函数. 给你两个字符串 haystack 和 needle ,请你在 haystack 字 ...
- CCNA 第一章 网络互联
1: 网络互联基础 互联网络定义:使用路由器将多个网络连接起来,并配置IP或者IPV6协议的逻辑网络编址方案,便组成了互联网络. 导致LAN(局域网)拥塞的常见原因: (1):广播域或者冲突域中的主机 ...
- FHD 4K 8K分辨率
4K(2160P,即4096×2160的像素分辨率)和8K(4320P,即7,680 × 4,320的像素分辨率)属于UHDTV. FHD是FULL HD(Full High Definition)的 ...
- 克鲁斯卡尔(Kruskal)算法
概览 相比于普里姆算法(Prim算法),克鲁斯卡尔算法直接以边为目标去构建最小生成树.从按权值由小到大排好序的边集合{E}中逐个寻找权值最小的边来构建最小生成树,只要构建时,不会形成环路即可保证当边集 ...