Loading [MathJax]/jax/output/CommonHTML/config.js
前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >专栏 >Ubuntu1804下k8s-CoreDNS占CPU高问题排查

Ubuntu1804下k8s-CoreDNS占CPU高问题排查

作者头像
yaohong
发布于 2021-06-10 08:47:55
发布于 2021-06-10 08:47:55
1.2K00
代码可运行
举报
文章被收录于专栏:姚红专栏姚红专栏
运行总次数:0
代码可运行

1.背景:

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

2. 分析排查:

1.分析CoreDNS问题

根据coredns状态是CrashLoopBackOff

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
# 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日志有如下错误:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
# 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文件可以做如下修改做判断:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
{% 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,问题解决。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
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。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
# 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://cloud.tencent.com/developer/article/1833771

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2021-06-03 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
kubernetes上的服务发现-CoreDNS配置
Kubernetes包括用于服务发现的DNS服务器Kube-DNS。 该DNS服务器利用SkyDNS的库来为Kubernetes pod和服务提供DNS请求。SkyDNS2的作者,Miek Gieben,创建了一个新的DNS服务器,CoreDNS,它采用更模块化,可扩展的框架构建。 Infoblox已经与Miek合作,将此DNS服务器作为Kube-DNS的替代品。
菲宇
2019/06/12
2.4K0
第9课 Kubernetes之服务发现和域名解析过程分析
作为服务发现机制的基本功能,在集群内需要能够通过服务名对服务进行访问,这就需要一个集群范围内的DNS服务来完成从服务名到ClusterIP的解析。
辉哥
2021/11/24
1.9K0
第9课 Kubernetes之服务发现和域名解析过程分析
k8s实践(11) --服务发现CoreDNS和Kubernetes内部域名解析
从Kubernetes 1.11开始,可使用CoreDNS作为Kubernetes的DNS插件进入GA状态,Kubernetes推荐使用CoreDNS作为集群内的DNS服务。 我们先看一下Kubernetes DNS服务的发展历程。
黄规速
2022/04/14
4.3K0
k8s实践(11) --服务发现CoreDNS和Kubernetes内部域名解析
k8s 服务注册与发现(三)CoreDNS
作为一个加入 CNCF(Cloud Native Computing Foundation) 的服务 CoreDNS 的实现可以说的非常的简单。
看、未来
2022/09/27
2.2K0
k8s 服务注册与发现(三)CoreDNS
附011.Kubernetes-DNS及搭建
作为服务发现机制的基本功能,在集群内需要能够通过服务名对服务进行访问,因此需要一个集群范围内的DNS服务来完成从服务名到ClusterIP的解析。
木二
2019/12/10
8750
附011.Kubernetes-DNS及搭建
Kubernetes高可用集群二进制部署(五)kubelet、kube-proxy、Calico、CoreDNS
必须配置native.cgroupdriver,不配置这个步骤会导致kubelet启动失败
鱼找水需要时间
2023/08/03
7500
Kubernetes高可用集群二进制部署(五)kubelet、kube-proxy、Calico、CoreDNS
CoreDNS 概述及运维实践
域名系统(英语:Domain Name System,缩写:DNS)是互联网的一项服务。它作为将域名和IP地址相互映射的一个分布式数据库,能够使人更方便地访问互联网。DNS使用TCP和UDP端口53。
SRE运维进阶之路
2024/05/01
4880
CoreDNS 概述及运维实践
4.最新实践基于Containerd安装部署高可用Kubernetes集群
[TOC] 0x00 前言简述 描述: 在我博客以及前面的文章之中讲解Kubernetes相关集群环境的搭建, 随着K8S及其相关组件的迭代, 与读者当前接触的版本有所不同,所以在当前【2022年4月26日 10:08:29】时间节点,博主使用ubuntu 20.04 、haproxy、keepalive、containerd、etcd、kubeadm、kubectl 等相关工具插件【最新或者稳定的版本】进行实践高可用的kubernetes集群的搭建,这里不再对k8s等相关基础知识做介绍,如有新入门的童鞋
全栈工程师修炼指南
2022/09/29
3.9K0
4.最新实践基于Containerd安装部署高可用Kubernetes集群
二进制安装k8s集群(14)-安装coredns
在上一篇文章里我们主要介绍worker组件kube-proxy的安装,这里我们开始介绍安装k8s集群内的一些基础服务,所有的基础服务都创建在kube-system这个namesapce里,我们从coredns开始。coredns提供k8s集群内部service的fqdn服务,是以deployment的方式运行在k8s集群内部的。image镜像从我们的private repo pull下来(以前文章里介绍过harbor private repo的创建,以及镜像的push和pull)。当然原始image来源于官方的k8s.gcr.io/coredns:1.3.1,不过要下载它需要科学上网或者搭个梯子。
TA码字
2020/04/01
1.2K0
二进制安装k8s集群(14)-安装coredns
coredns_coredns配置域名
网上的coredns.yaml文档都是粘贴复制的,不知所以然,授人以鱼不如授人以渔,官方coredns yaml文件下载地址:https://github.com/kubernetes/kubernetes/blob/master/cluster/addons/dns/coredns/coredns.yaml.base
全栈程序员站长
2022/11/01
1.1K0
TKE之DNS解析
TKE集群中使用的DNS解析是采用coreDNS,Kubernetes 1.11 和更高版本中,CoreDNS 位于 GA 并且默认情况下与 kubeadm 一起安装
聂伟星
2020/06/27
16K0
Kubernetes 服务发现之 coreDNS
服务发现是 K8s 的一项很重要的功能。K8s 的服务发现有两种方式,一种是将 svc 的 ClusterIP 以环境变量的方式注入到 pod 中;一种就是 DNS,从 1.13 版本开始,coreDNS 就取代了 kube dns 成为了内置的 DNS 服务器。这篇文章就来简单分析一下 coreDNS。
CS实验室
2021/03/22
4.1K0
Kubernetes 服务发现之 coreDNS
在Kubernetes集群中搭建和配置一个DNS服务
首先,我们需要创建一个名为kube-dns的ConfigMap来定义DNS服务的配置。创建一个名为kube-dns.yaml的文件,并将以下内容添加到该文件中:
一凡sir
2023/09/03
6420
在Kubernetes集群中搭建和配置一个DNS服务
k8s1.13.0二进制部署-Dashboard和coredns(五)
下载yaml文件 https://github.com/kubernetes/kubernetes
yuezhimi
2020/09/30
3920
k8s1.13.0二进制部署-Dashboard和coredns(五)
Kubernetes集群常见操作完整指南
云云众生s
2024/03/28
3190
Kubernetes 集群常用操作总结
一、卸载步骤 卸载: kubeadm reset 清理: kubeadm reset -f modprobe -r ipip lsmod rm -rf ~/.kube/ rm -rf /etc/kubernetes/ rm -rf /etc/systemd/system/kubelet.service.d rm -rf /etc/systemd/system/kubelet.service rm -rf /usr/bin/kube* rm -rf /etc/cni rm -rf /opt/cni rm
高楼Zee
2021/05/11
9850
kubenetes集群部署CoreDNS
可以看出在容器内由于没有kubernetes的DNS服务解析,容器是找不到service的IP地址,那么也就找不到后面的服务了,所以CoreDNS的解析服务是必须要安装好的。
Devops海洋的渔夫
2019/05/31
1.4K0
kubenetes1.13.1 部署coredns
在官网下载https://github.com/coredns/deployment/tree/master/kubernetes 配置文件主要是deploy.sh和coredns.yam.sed,由于不是从kube-dns转到coredns,所以要注释掉kubectl相关操作,修改REVERSE_CIDRS、DNS_DOMAIN、CLUSTER_DNS_IP等变量为实际值,具体命令./deploy.sh -s -r 10.254.0.0/16 -i 10.254.0.10 -d clouster.local > coredns.yaml11
三杯水Plus
2019/03/14
9500
Kubernetes 网络排错指南
原文链接:https://zhuanlan.zhihu.com/p/34558421
DevOps时代
2019/05/17
2.3K0
【TKE】修改集群 CorenDNS 服务地址
TKE 中的 Coredns 服务 IP 目前没有办法在创建集群的时候指定,默认是从客户配置的 Service CIDR 网段中分配一个随机的 IP,下面将介绍如何自定义修改 Coredns 服务 IP。
Jokey
2021/04/30
1.1K0
相关推荐
kubernetes上的服务发现-CoreDNS配置
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
本文部分代码块支持一键运行,欢迎体验
本文部分代码块支持一键运行,欢迎体验