今天查看k8s,发现有个coredns的pod创建失败,查看这个POD的信息,显示如下错误
(combined from similar events): Failed to create pod sandbox: rpc error: code = Unknown d
esc = failed to setup network for sandbox "3ca660496980d7e7fd35ebd6c9d4d9886f24b4149618f11086e6d5e24060a76d": plugin type="flannel" failed (add): failed to s
et bridge addr: "cni0" already has an IP address different from 10.244.4.1/24
在相关的node执行 ip a 命令查看网络状态,会发现 cni0的网段与/run/flannel/subnet.env文件的FLANNEL_SUBNET配置不一致,这是导致问题的原因。
[root@k8s-n-1 cni]# ip a
...
8: flannel.1: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1450 qdisc noqueue state UNKNOWN group default
link/ether 56:ae:7d:5c:15:6f brd ff:ff:ff:ff:ff:ff
inet 10.244.4.0/32 brd 10.244.4.0 scope global flannel.1
valid_lft forever preferred_lft forever
inet6 fe80::54ae:7dff:fe5c:156f/64 scope link
valid_lft forever preferred_lft forever
9: cni0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1450 qdisc noqueue state UP group default qlen 1000
link/ether fa:bb:e0:2e:6b:8e brd ff:ff:ff:ff:ff:ff
inet 10.244.1.1/24 brd 10.244.1.255 scope global cni0
valid_lft forever preferred_lft forever
inet6 fe80::f8bb:e0ff:fe2e:6b8e/64 scope link
valid_lft forever preferred_lft forever
...
[root@k8s-n-1 cni]# cat /run/flannel/subnet.env
FLANNEL_NETWORK=10.244.0.0/16
FLANNEL_SUBNET=10.244.4.1/24
FLANNEL_MTU=1450
FLANNEL_IPMASQ=true
执行以下命令删除cni0即可重置。
ifconfig cni0 down
ip link delete cni0
[root@k8s-n-1 cni]# ip a
...
8: flannel.1: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1450 qdisc noqueue state UNKNOWN group default
link/ether 56:ae:7d:5c:15:6f brd ff:ff:ff:ff:ff:ff
inet 10.244.4.0/32 brd 10.244.4.0 scope global flannel.1
valid_lft forever preferred_lft forever
inet6 fe80::54ae:7dff:fe5c:156f/64 scope link
valid_lft forever preferred_lft forever
1553: cni0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1450 qdisc noqueue state UP group default qlen 1000
link/ether f2:24:96:18:64:2b brd ff:ff:ff:ff:ff:ff
inet 10.244.4.1/24 brd 10.244.4.255 scope global cni0
valid_lft forever preferred_lft forever
inet6 fe80::f024:96ff:fe18:642b/64 scope link
valid_lft forever preferred_lft forever
...