2051 Flannel部署及维护
kubernetes 要求集群内各节点(包括 master 节点)能通过 Pod 网段互联互通。flannel 使用 vxlan 技术为各节点创建一个可以互通的 Pod 网络,使用的端口为 UDP 8472。
flanneld 第一次启动时,从 etcd 获取配置的 Pod 网段信息,为本节点分配一个未使用的地址段,然后创建 flannedl.1 网络接口。
flannel 将分配给自己的 Pod 网段信息写入 /run/flannel/docker 文件,docker 后续使用这个文件中的环境变量设置 docker0 网桥,从而从这个地址段为本节点的所有 Pod 容器分配 IP。
注意: flanneld 与 docker 结合使用;
01.下载和分发 flanneld 二进制文件
mkdir -p /srv/kubernetes/cni/bin/flannel
mkdir -p /srv/kubernetes/cni/net.d
wget https://github.com/coreos/flannel/releases/download/v0.12.0/flannel-v0.12.0-linux-amd64.tar.gz
tar -xzvf flannel-v0.11.0-linux-amd64.tar.gz -C bin/flannel02.向 etcd 写入集群 Pod 网段信息
写入的 Pod 网段 ${CLUSTER_CIDR} 地址段(如 /16)必须小于 SubnetLen,必须与 kube-controller-manager 的 --cluster-cidr 参数值一致;
etcd 使用ETCDCTL_API=2, 并确定etcd集群支持V2版本的api
$ ETCDCTL_API=2
$ alias etcdctl2="ETCDCTL_API=2 && /srv/kubernetes/bin/etcdctl --endpoints=https://10.40.58.153:2379,https://10.40.58.154:2379,https://10.40.61.116:2379 --cert-file=/srv/kubernetes/pki/etcd.pem --key-file=/srv/kubernetes/pki/etcd-key.pem --ca-file /srv/kubernetes/pki/ca.pem"
$ etcdctl2 mkdir /coreos.com/network
$ etcdctl2 mk /coreos.com/network/config '{"Network":"10.243.0.0/16","SubnetLen":21,"Backend":{"Type":"vxlan"}}'
$ etcdctl2 get /coreos.com/network/config03.使用systemd管理flanneld
04.启动flannel
05.检查分配给各 flanneld 的 Pod 网段信息
查看集群 Pod 网段(/16)
输出:
查看已分配的 Pod 子网段列表(/21)
输出:
查看某一Pod网段对应的节点IP和flannel接口地址
输出:
10.243.8.0/21 被分配给节点10.40.58.154; VtepMAC 为10.40.58.154点的 flannel.1 网卡 MAC 地址;
06.检查节点网络
flannel.1 网卡的地址为分配的 Pod 子网段的第一个 IP(.0),且是 /32 的地址;
到其它节点 Pod 网段请求都被转发到 flannel.1 网卡; flanneld 根据 etcd 中子网段的信息,如 $/coreos.com/network/subnets/10.243.128.0-21 ,来决定进请求发送给哪个节点的互联 IP;
07.检查生成子网文件
使用systemctl命令启动flanneld后,会自动执行mk-docker-opts.sh生成如下两个文件环境变量文件:
/run/flannel/subnet.env
/run/flannel/docker
Docker将会读取这两个环境变量文件作为容器启动参数。
Q&A
```
最后更新于
这有帮助吗?