4

从控制台启动工作节点 VMs( Kubernetes)后,我收到此错误。AWS我正在使用PKS( Pivotal Container Service)

pod“xxxxx”的网络:NetworkPlugin cni 未能设置 pod“xxxxx” 网络:未能设置网桥地址:“cni0”已经有一个不同于 10.xxx/xx 的 IP 地址

我假设Flannel将子网租约分配给集群中的工作人员,该租约在 24 小时后到期 -flannel.1并且cni0 /24子网不再匹配,这会导致此问题。

我也知道一个解决方法:

bosh ssh -d worker -c "sudo /var/vcap/bosh/bin/monit stop flanneld" 
bosh ssh -d worker -c "sudo rm /var/vcap/store/docker/docker/network/files/local-kv.db" 
bosh ssh -d worker -c "sudo /var/vcap/bosh/bin/monit restart all"

但是,有什么永久性的解决办法吗?

4

1 回答 1

8

TL;DR - 重新创建网络

$ ip link set cni0 down
$ brctl delbr cni0  

或者,正如@ws_ 在评论中建议的那样 - 删除接口并重新启动 k8s 服务:

ip link set cni0 down && ip link set flannel.1 down 
ip link delete cni0 && ip link delete flannel.1
systemctl restart containerd && systemctl restart kubelet

社区解决方案

它是一个known issue

并且有一些解决方案可以解决它。

filipenv的解决方案是:

关于主从:

$ kubeadm reset
$ systemctl stop kubelet
$ systemctl stop docker
$ rm -rf /var/lib/cni/
$ rm -rf /var/lib/kubelet/*
$ rm -rf /etc/cni/
$ ifconfig cni0 down
$ ifconfig flannel.1 down
$ ifconfig docker0 down

您可能需要在该目录上调用 rm 之前手动umount文件系统/var/lib/kubelet)之后我再次启动 docker 和 kubelet 并重新启动 kubeadm 进程

aysark:kubernetes-handbook在一个食谱中Pod stuck in Waiting or ContainerCreating都推荐

$ ip link set cni0 down
$ brctl delbr cni0  

Flannel 的知识库文章中的一些解决方法

Flannel并且在KB中有一篇文章: PKS Flannel network get out of sync with docker bridge network (cni0)

解决方法 1:

WA1 和你的一样:

    bosh ssh -d <deployment_name> worker -c "sudo /var/vcap/bosh/bin/monit stop flanneld"
    bosh ssh -d <deployment_name> worker -c "sudo rm /var/vcap/store/docker/docker/network/files/local-kv.db"
    bosh ssh -d <deployment_name> worker -c "sudo /var/vcap/bosh/bin/monit restart all"

解决方法 2:

如果 WA1 没有帮助,KB 建议:

    bosh ssh -d <deployment_name> worker -c "sudo /var/vcap/bosh/bin/monit stop flanneld"
    bosh ssh -d <> worker -c "ifconfig | grep -A 1 flannel"
    On a master node get access to etcd using the following KB 
    On a master node run `etcdctlv2 ls /coreos.com/network/subnets/`
    Remove all the worker subnet leases from etcd by running `etcdctlv2 rm /coreos.com/network/subnets/<worker_subnet>;` for each of the worker subnets from point 2 above.
    bosh ssh -d <deployment_name> worker -c "sudo /var/vcap/bosh/bin/monit restart flanneld"
于 2020-05-01T14:14:18.960 回答