K8s集群node节点异常处理(Calico)

前言



近期在测试环境k8s集群发现Calico的节点出现了异常,状态一直处于连接中,而且node节点的ip也出现了变化。
于是对此次处理过程进行记录。这个异常不具备普遍性,因此文档仅供参考。



在这里插入图片描述

在这里插入图片描述
在这里插入图片描述



发现在Calico 异常的node节点上,出现了大量的br开头的以及一些其他的虚拟网卡和虚拟ip. 应该是这些ip导致的。由于具体排查和处理需要大量的时间,为了不影响服务,先把异常节点下线。


备注:

可查看异常pod日志,再处理问题
kubectl logs calico-node-f846j -n kube-system

日志中能看到也不过是与172.19.0.1的ip网络不通而已.node2的存在网络问题。



去除异常节点



<1>驱除异常节点上的服务

Master上操作:

kubectl drain   异常node的IP/主机名  --delete-local-data --force --ignore-daemonsets
kubectl drain   node2  --delete-local-data --force --ignore-daemonsets

驱除后查看Pod是否成功迁移到其他节点:
kubectl get pods -A -o wide


<2>驱除异常节点上的服务

Master上操作:

kubectl delete node 异常node的IP/主机名
kubectl delete node node2

删除后查看该node是否去除:
kubectl get nodes


<3>清除节点信息

去异常的node上操作:

kubeadm reset
iptables -nL
iptables -F
iptables -X
iptables -Z

必须执行。否则重新加入集群会报错




处理异常



清除节点信息后,k8s部署产生的ip都消失了。br开头的虚拟网卡仍然存在。
查看端口信息后,发现上面存在一个docker-compose部署的harbor。应该是docker-compose创建的。
清理一下网络环境(harbor之后会移到别的位置)



<1>停止docker-compose服务

cd harbor
docker-compose stop

查看发现br开头的网卡仍然存在


<2>重启docker

systemctl restart docker


<3>删除多余网桥

ifconfig  br-0aab8223549c  down
ip link set br-0aab8223549c down
ip link delete br-0aab8223549c

or

yum install bridge-utils
brctl delbr  br-0aab8223549c 



重新加入集群



<1>生成加入集群的token命令

Master上执行:

kubeadm token create --print-join-command

在这里插入图片描述

通常一个token的使用时间的24小时,因此即使是保存着创建集群时的token也没用。需要重新生成。

查看token:
kubeadm token list (当token过期时,就查询不到内容.可使用kubeadm token create ,这个仅生成token)


<2>去需要加入集群的node执行,上方生成的命令即可



<3>查看是否加入集群

kubectl get nodes
kubectl get pods -A -o wide
calicoctl node status

接着,重新部署一下calico及其他服务即可




问题原因



原因:
Calico的yml配置存在问题;
K8s集群中有一个节点部署了Harbor,由于调整了docker配置文件并重启后。 Calico获取的PEER ADDRESS为docker-compose创建的网卡的IP。导致其与k8s集群网络不通。

(如果使用默认的Calico.yml文件。在ip较多,网络环境较复杂的情况,重启docker等服务后,极易出现此问题,绑定到的可能不是你想使用的地址。因此在K8s集群中,不建议再去一些创建其他的网络环境)



解决方法:
可以强制让calico选择某网卡进行通信

<1>编辑calico.yaml找到name: CLUSTER_TYPE,新增加内容:

 - name: CLUSTER_TYPE
              value: "k8s,bgp"
            # 新增部分
            - name: IP_AUTODETECTION_METHOD
              value: "interface=eth0"
            # value: "interface=eth.*"
            # value: "interface=can-reach=www.baidu.com"
            # 新增部分结束
            - name: IP
              value: "autodetect"
            - name: CALICO_IPV4POOL_IPIP
              value: "Always"

在这里插入图片描述



<2>重新初始化caloco网络

kubectl apply -f calico.yaml 

or

rm -rf /var/lib/cni
kubectl apply -f calico.yaml 
  • 3
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

漠效

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值