NetworkPlugin cni 无法设置 pod "xxxxx" network: failed to set bridge addr: "cni0" already has an IP address different from10.xxx - Error

Dil*_*lip 4 pivotaltracker amazon-web-services cloud-foundry kubernetes flannel

KubernetesAWS控制台启动工作节点 VMs( )后收到此错误。我正在使用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"
Run Code Online (Sandbox Code Playgroud)

但是,是否有任何永久性解决方法?

Yas*_*sen 5

TL;DR - 重建网络

$ ip link set cni0 down
$ brctl delbr cni0  
Run Code Online (Sandbox Code Playgroud)

社区解决方案

它是一个 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
Run Code Online (Sandbox Code Playgroud)

您可能需要在该目录上调用 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  
Run Code Online (Sandbox Code Playgroud)

法兰绒的知识库文章

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

WA1

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"
Run Code Online (Sandbox Code Playgroud)

WA2

如果 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"
Run Code Online (Sandbox Code Playgroud)

  • 这对我有用(带有containerd的k8s 1.21): 1. `ip link set cni0 down &amp;&amp; ip link set flannel.1 down` 2. `ip link delete cni0 &amp;&amp; ip link delete flannel.1` 3. `systemctl restart containerd &amp;&amp; systemctl 重新启动 kubelet` (4认同)