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/flannel

02.向 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/config

03.使用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

```

最后更新于

这有帮助吗?