k8s之集群网络配置_Flanneld.md 2.7 KB

Flanneld

Flannel通过给每台宿主机分配一个子网的方式为容器提供虚拟网络,它基于Linux TUN/TAP,使用UDP/VXLAN封装IP包来创建overlay网络
并借助etcd(也支持kubernetes)维护网络的分配情况。

image.jpg

安装

由于Flannel需要使用etcd存储自身的一个子网信息,所以要保证能成功连接Etcd,写入预定义子网段。
写入的Pod网段${CLUSTER_CIDR}必须是/16段地址,必须与kube-controller-manager的–-cluster-cidr参数值一致。一般情况下,在每一个Node节点都需要进行配置

#下载
https://github.com/coreos/flannel/releases

#Flanneld 版本
v0.11.0

#初始化环境
cat>/etc/sysctl.d/kubernetes.conf<<EOF
net.ipv4.ip_forward = 1
net.bridge.bridge-nf-call-ip6tables = 1
net.bridge.bridge-nf-call-iptables = 1
EOF
sysctl -p /etc/sysctl.d/kubernetes.conf>&/dev/null

#安装命令
cd ~
tar zxvf flannel-v0.11.0-linux-amd64.tar.gz
cp {flanneld,mk-docker-opts.sh} /usr/bin/

#查看etcd集群状态并写入网络段
etcdctl --endpoints="http://172.31.32.25:2379,http://172.31.32.26:2379,http://172.31.32.27:2379" cluster-health
etcdctl --endpoints="http://172.31.32.25:2379,http://172.31.32.26:2379,http://172.31.32.27:2379"  \
set /coreos.com/network/config  '{ "Network": "172.17.0.0/16", "Backend": {"Type": "vxlan"}}'

#k8s 配置文件存放目录,不存在则如下创建
mkdir -p /etc/kubernetes/

#flanneld 服务配置文件
cat>/etc/kubernetes/flannel.conf<<EOF
FLANNEL_OPTIONS="--etcd-endpoints=http://172.31.32.25:2379,http://172.31.32.26:2379,http://172.31.32.27:2379"
FLANNEL_ETCD_KEY="/coreos.com/network"
EOF

#flanneld 服务注册配置
cat>/usr/lib/systemd/system/flanneld.service<<EOF
[Unit]
Description=Flanneld overlay address etcd agent
After=network-online.target network.target
Before=docker.service

[Service]
Type=notify
EnvironmentFile=$FLANNEL_CONF
ExecStart=/usr/bin/flanneld --ip-masq \
                           $FLANNEL_OPTIONS
ExecStartPost=/usr/bin/mk-docker-opts.sh -k DOCKER_NETWORK_OPTIONS -d /run/flannel/subnet.env
Restart=on-failure

[Install]
WantedBy=multi-user.target
EOF

#修改docker服务文件
sed -i.bak -e '/ExecStart/i EnvironmentFile=\/run\/flannel\/subnet.env' -e 's/ExecStart=\/usr\/bin\/dockerd/ExecStart=\/usr\/bin\/dockerd $DOCKER_NETWORK_OPTIONS/g' /usr/lib/systemd/system/docker.service

#启动flanneld
systemctl daemon-reload
systemctl enable flanneld --now
systemctl restart docker
systemctl status flanneld
systemctl status docker
ip address show