解决 虚拟机挂起后再恢复导致的k8s集群网络问题

解决 虚拟机挂起后再恢复导致的k8s集群网络问题

背景

在用 kubeadm+3台 CentOS 7 虚拟机(1 Master 2 Worker)搭建的k8s集群完成以后,我发现当虚拟机挂起后再恢复,k8s集群网络会出现问题,具体表现在service访问不了,pod之间ping不通等问题。而k8s集群还是能正常创建deployment以及调度pod到各个node上(node都处于 ready 的状态)。

主要是由于我搭建k8s集群时使用的flannel网络插件出了问题的原因。

版本说明

使用vmware管理虚拟机,虚拟机的网络采用NAT模式

kubernetes(kubectl kubeadm kubelet): 1.18.3
go: 1.15.8 linux/amd64
docker-client、docker-server: 18.09.1

虚拟机OS:CentOS 7

参考 许大仙-从零搭建k8s集群 的第4部分-kubeadm搭建k8s集群,来搭建我的k8s集群

使用的网络插件:flannel,flannel的部署文件在:https://raw.githubusercontent.com/coreos/flannel/master/Documentation/kube-flannel.yml

注:以下方法或许只对我自己的本地环境生效,仅供参考,下面列出的命令可根据个人情况做一些修改。在照搬输入命令之前最好还是对k8s的service、flannel相关知识有个大致的了解

解决方案

  1. 如果是虚拟机本身网络连接的问题(ping www.baidu.com 都不通),直接在终端输入reboot命令来重启虚拟机,一般就能好
    ping www.baidu.com

  2. 如果本身网络连接没问题,那么基本上就是flannel插件的问题了。看看node是不是缺少了flannel.1网络设备,输入ifconfig命令可看:
    ifconfig
    上图这个节点就没有flannel.1,以及cni0。
    解决方法:(flannel的部署文件为master node的 ~/flannel/kube-flannel.yaml)
    首先,在master node执行命令:kubectl delete -f flannel/kube-flannel.yaml
    然后,在master node和所有worker node依次执行:
    sudo ifconfig cni0 down
    sudo ip link delete cni0
    sudo ifconfig flannel.1 down
    sudo ip link delete flannel.1
    sudo rm -rf /var/lib/cni/flannel/*
    sudo rm -rf /var/lib/cni/networks/cbr0/*
    sudo rm -rf /var/lib/cni/cache/*
    sudo rm -f /etc/cni/net.d/*
    sudo systemctl restart kubelet
    sudo systemctl restart docker
    sudo chmod a+w /var/run/docker.sock
    最后,在 master node 执行命令:kubectl apply -f flannel/kube-flannel.yaml

  3. 按上述方法创建以后,再在node上输入ifconfig命令,如果其有flannel.1,但是没有cni0(这个不算网络问题),那就在该node手动创建一个pod(保证在该node上运行)并且创建暴露该pod端点的service,cni0网桥就会被flannel自动创建出来。

  4. 节点上已有flannel.1和cni0,网络也都没问题了,大功告成:
    success

  • 2
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 3
    评论
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值