1. 博客/

kubernetes 集群中 控制平面 组件频繁发生重启的问题排查记录

·688 字·2 分钟· ·
k8s coredns flannel fix
Johny
作者
Johny
熟练的 云原生搬砖师
Table of Contents

环境说明
#

  • Kubernetes 版本: v1.19.6
  • 使用操作系统: Centos-7.9.2009

现象说明
#

最近在使用k8s集群的时候,发现集群变慢了许多,排查发现 master 节点中 controller-managerscheduler 组件频繁的发生重启

image-20201222213306595

排查记录
#

抓取日志
#

使用重定向将日志写入至文件中再慢慢分析 (一开始使用前台抓取,打印日志太长,超出终端的默认显示行)

kubectl logs -f kube-controller-manager-master01 -n kube-system >> controller.log

错误信息如下所示
#

image-20201222213552227

通过搜索引擎,有人说是etcd性能导致,重试使用了此文档文档 进行了etcd的优化,没有什么效果。

检测网络及io
#

安装工具
#

yum install dstat iotop -y

iotop -oP  # 检查 io

dstat -nf # 显示所有网络接口使用情况
dstat -df # 显示所有磁盘使用情况,  当接口过多时 可使用 "-N" 加指定的网口, "-D" 加磁盘 

排除得到 io 占用高且被flanneld这个进程占用着

image-20201222215836738

找到问题
#

发现社区也有人反馈这个问题,但是目前暂没有人员回复

image-20201222221012316

kubectl delete -f https://raw.githubusercontent.com/coreos/flannel/master/Documentation/kube-flannel.yml

ifconfig cni0 down
ip link delete cni0
ifconfig flannel.1 down
ip link delete flannel.1
rm -rf /var/lib/cni/
rm -f /etc/cni/net.d/*
systemctl restart kubelet

删除flannel后 各节点的io恢复正常,原因应该就是这个了,但是flannel组件不可缺少,得想个办法将它再次安装上才行。

更换版本
#

检查正在使用的版本
#

image-20201222221312175

降级版本
#

curl https://raw.githubusercontent.com/coreos/flannel/v0.13.0/Documentation/kube-flannel.yml|sed 's#10.244.0.0/16#172.20.0.0/16#g' | kubectl apply -f -  # 我这里进行了替换子网,如没有修改默认的pod子网地址请直接使用下面语句即可

kubectl apply -f  https://raw.githubusercontent.com/coreos/flannel/v0.13.0/Documentation/kube-flannel.yml

watch kubectl get pod -n kube-system  # 等待 pod 启动完成

启动完成后再次使用 iotop -oP 观察io是否异常, 确认正常后观察 controller-manager 是否会再次发生重启

kubectl logs -f kube-controller-manager-master01 -n kube-system > controller.log

绑定网卡
#

降低 flannel 的版本后,还是会出现 io 较高的情况。 后测试出,是因为我的集群机器中 存在着多张网卡,解决方法就是: 在 flannel 资源清单中添加一下 --iface=ethX 来绑定一下网卡 ,这里就要求集群中每一个节点 多存在 此网卡。

wget https://raw.githubusercontent.com/coreos/flannel/v0.13.0/Documentation/kube-flannel.yml

vim kube-flannel.yml

修改后的配置展示

      containers:
      - name: kube-flannel
        image: quay.io/coreos/flannel:v0.13.0
        command:
        - /opt/bin/flanneld
        args:
        - --ip-masq
        - --kube-subnet-mgr
        - --iface=eth0

再次部署创建

kubectl apply -f kube-flannel.yml

执行后,没有再次出现 io 占用高的情况了

相关文章

Kind 部署本地k8s集群的使用记录
·326 字·1 分钟·
k8s docker devops centos7 kind
部署 Devops 必备利器 OpenLdap
·953 字·2 分钟·
devops openldap centos7
Docker Quickstart Redis Server
·174 字·1 分钟·
docker redis centos7
Docker 部署多网口 openWrt 软路由
·810 字·2 分钟·
openwrt linux centos7
Docker 部署的 openWrt 软路由, 并解决无法与宿主机通信问题
·923 字·2 分钟·
fix openwrt n1 docker-compose docker openwrt