二进制部署flannel插件,没有部署cni插件,需要在flannel配置文件指定生成docker网段,然后在docker.service中指定预定义网段,这样docker0会和flannel处于同一个网段,flanneld会在etcd中给每个node分配一个子网段,然后docker0在此子网段中分配pod ip。这样保证不同node上的任意一个pod 其ip都不会冲突。
![](https://img.laitimes.com/img/_0nNw4CM6IyYiwiM6ICdiwiIwczX0xiRGZkRGZ0Xy9GbvNGL2EzXlpXazxSP9EkWxkzRipGZtJmdShFZvB3MMBjVtJWd0ckW65UbM5WOHJWa5kHT20ESjBjUIF2X0hXZ0xCMx81dvRWYoNHLrdEZwZ1Rh5WNXp1bwNjW1ZUba9VZwlHdssmch1mclRXY39CXldWYtlWPzNXZj9mcw1ycz9WL49zZuBnLzYDO0MTM1UTMxITMxkTMwIzLc52YucWbp5GZzNmLn9Gbi1yZtl2Lc9CX6MHc0RHaiojIsJye.png)
kubeadm部署k8s,使用yaml部署flannel网络,已经默认安装cni插件,cni插件的作用其实就是代替docker0的作用。所以docker0的网络就无所谓冲突不冲突,但是cni只保证通过k8s创建的pod 网络分配,如果docker自身创建,不会遵守此规则。