k8s 手动部署flannel(k8s基于cnm网络插件)
环境准备安装etcd,并配置key存储网络信息etcd的秘钥文件复制到各个节点包括主节点(并授权)scp /opt/etcd/ssl/* root@192.168.12.11:/opt/etcd/sslchmod 755 /opt/etcd/ssl由于flannel不支持etcd-v3,需要开启etcd-v2版本#[Clustering]ETCD_ENABLE_V2="true"systemctl
环境准备
安装etcd,并配置key存储网络信息
- etcd的秘钥文件复制到各个节点包括主节点(并授权)
scp /opt/etcd/ssl/* root@192.168.12.11:/opt/etcd/ssl
chmod 755 /opt/etcd/ssl
- 由于flannel不支持etcd-v3,需要开启etcd-v2版本
#[Clustering]
ETCD_ENABLE_V2="true"
systemctl restart etcd
- 存储flannel的网络信息
vi flannel-config.json
{
"Network": "10.2.0.0/16",
"SubnetLen": 24,
"Backend": {
"Type": "vxlan"
}
}
#Network 定义该网络的 IP 池为 10.2.0.0/16
#SubnetLen 指定每个主机分配到的 subnet 大小为 24 位,即10.2.X.0/24
#Backend 为 vxlan,即主机间通过 vxlan 通信
export ETCDCTL_API=2
#环境变量
etcdctl --endpoints=$ENDPOINTS --ca-file="/opt/etcd/ssl/ca.pem" --cert-file="/opt/etcd/ssl/server.pem" --key-file="/opt/etcd/ssl/server-key.pem" set /docker-flannel/network/config < flannel-config.json
#注意命令跟v3有区别
下载flannel,配置运行
wget https://github.com/coreos/flannel/releases/download/v0.13.1-rc1/flannel-v0.13.1-rc1-linux-amd64.tar.gz
tar -zxvf flannel-v0.13.1-rc1-linux-amd64.tar.gz
mv flanneld /usr/local/bin/
scp flannel root@192.168.12.3:/usr/local/bin/
#拷贝到其他节点和主节点
flanneld -etcd-endpoints="https://192.168.12.10:2379,https://192.168.12.11:2379,https://192.168.12.12:2379" -etcd-cafile="/opt/etcd/ssl/ca.pem" -etcd-certfile="/opt/etcd/ssl/server.pem" -etcd-keyfile="/opt/etcd/ssl/server-key.pem" -etcd-prefix=/docker-flannel/network -iface=eth0
#-etcd-endpoints 指定 etcd url
#-iface 指定主机间数据传输使用的 interface
#-etcd-prefix 指定 etcd 存放 flannel 网络配置信息的 key
修改docker网络
vi /usr/lib/systemd/system/docker.service
ExecStart=/usr/bin/dockerd -H fd:// --containerd=/run/containerd/containerd.sock --bip=10.2.94.1/24 --mtu=1450
#flanneld运行的时候会生成一个文件在/run/flannel/subnet.env记录了网络信息
#--bip=/run/flannel/subnet.env里的DOCKER_OPT_BIP
#--mtu=/run/flannel/subnet.env里的DOCKER_OPT_MTU
systemctl daemon-reload
systemctl restart docker
#查看docker0接口地址发生了改变
flanneld这样运行不方便管理,需要改为systemctl进行管理
vi /usr/lib/systemd/system/flanneld.service
[Unit]
Description=Flanneld overlay address etcd agent
After=network.target
After=network-online.target
Wants=network-online.target
After=etcd.service
Before=docker.service
[Service]
Type=notify
ExecStart=/usr/local/bin/flanneld \
-etcd-cafile=/opt/etcd/ssl/ca.pem \
-etcd-certfile=/opt/etcd/ssl/server.pem \
-etcd-keyfile=/opt/etcd/ssl/server-key.pem \
-etcd-endpoints=https://192.168.12.10:2379,https://192.168.12.11:2379,https://192.168.12.12:2379 \
-etcd-prefix=/docker-flannel/network \
-iface=eth0 \
-ip-masq
ExecStartPost=/usr/local/flannel/mk-docker-opts.sh -k DOCKER_NETWORK_OPTIONS -d /run/flannel/subnet.env
Restart=on-failure
[Install]
WantedBy=multi-user.target
WantedBy=docker.service
#创建systemctl服务文件,Service部分是跟命令启动类似的只要替换即可
#-ip-masq不开启flannel.1 接口的源nat,避免访问不是docker的真实IP
#ExecStartPost=/usr/local/flannel/mk-docker-opts.sh这个脚本文件在flannel下载解压后会有,指定到具体目录即可
修改docker网络
vi /usr/lib/systemd/system/docker.service
EnvironmentFile=/run/flannel/subnet.env
ExecStart=/usr/bin/dockerd -H fd:// --containerd=/run/containerd/containerd.sock $DOCKER_NETWORK_OPTIONS
#flanneld运行的时候会生成一个文件在/run/flannel/subnet.env记录了网络信息,docker只要每次重启获取文件内里的信息
systemctl daemon-reload
systemctl restart docker
观察route就能看到每台宿主机都是一个子网,通过route访问到对方,如果是vxlan模式就进行隧道传输,flannel也是支持host-wg主机网关模式
systemctl服务文件不会写可以yum安装flannel,然后保存一份systemctl服务文件卸载后进行修改即可
部分systemctl服务文件参考:https://www.cnblogs.com/love19791125/p/11283633.html
疑问:可以看到都是错误,但是其实是没问题的,我的版本是v0.13.1-rc1(命令启动也是有错误提示)
2021.02.02更新
由于搭建的k8s没有使用CNI插件,而是使用docker自带的CNM,使用过程中出现节点超过24小时后,重新链接后发现flannel地址改变了,吓了一跳,这样会导致Pod网络故障,除非重新建立Pod才行
查看了flannel发现有续租的问题,续租时间为24小时,如果超过24小时就会读取/run/flannel/subnet.env下的FLANNEL_SUBNET参数值进行etcd注册,如果发生IP冲突就会重新分配新的子网给节点
1、我难道是发生IP冲突?
查看日志后发现,没有提示任何的关于IP地址重复的错误,但是发现创建子网的时候匹配本地是None,不应该呀,我本地有这个文件/run/flannel/subnet.env
奇怪不对了,没有FLANNEL_SUBNET字段,发现问题了,在继续查看subnet.env文件怎么生成
通过一个脚本生成的。查看下发现写错了
解决:
后面不加-f或者-d 使用默认位置即可,查看/run/flannel/subnet.env和/run/docker_opts.env
/run/flannel/subnet.env用于flannel读取的环境变量
/run/docker_opts.env用于docker启动参数
再把docker服务的环境变量文件改下,重启docker服务和flannel服务
参考:https://coreos.com/flannel/docs/latest/reservations.html
更多推荐
所有评论(0)