K8S系列(二)二进制部署(四)之Flannel
上一篇: K8S系列(二)二进制部署(三)之Node节点
下一篇: K8S系列(三)-DashboardUI部署
一、 介绍
1. 熟悉Docker的我们都知道,Docker安装成功之后是有一个独立的docker0的网卡
2. 但是每个node节点的docker0都一样,那么我们是怎么保证不同节点内的容器怎么互相访问呢?
3. 所以flannal就是为了解决这个问题的,使用flannel来创建一个新的共享网卡,然后集群内所有节点都共享
这个网络,那么就在同一个网段下了,就可以互相访问了
二、 准备工作
2.1 往etcd写入共享网络的网段信息
ETCDCTL_API=2 \
/opt/etcd/bin/etcdctl \
--ca-file=/opt/etcd/ssl/ca.pem \
--cert-file=/opt/etcd/ssl/etcd.pem \
--key-file=/opt/etcd/ssl/etcd-key.pem \
--endpoints="https://192.168.3.10:2379,https://192.168.3.11:2379,https://192.168.3.12:2379" \
set /coreos.com/network/config \
'{ "Network": "172.17.0.0/16", "Backend": {"Type": "vxlan"}}'
2.2 检查一下是否写入成功
ETCDCTL_API=2 \
/opt/etcd/bin/etcdctl \
--ca-file=/opt/etcd/ssl/ca.pem \
--cert-file=/opt/etcd/ssl/etcd.pem \
--key-file=/opt/etcd/ssl/etcd-key.pem \
--endpoints="https://192.168.3.10:2379,https://192.168.3.11:2379,https://192.168.3.12:2379" \
get /coreos.com/network/config
-----------
{ "Network": "172.17.0.0/16", "Backend": {"Type": "vxlan"}}
三、 部署
3.1 创建工作目录并处理执行文件
1. mkdir -p /opt/falnnel/{bin,cfg}
2. wget https://github.com/coreos/flannel/releases/download/v0.10.0/flannel-v0.10.0-linux-amd64.tar.gz
3. cp flanneld mk-docker-opts.sh /opt/falnnel/bin/
4. cat > /opt/falnnel/cfg/flanneld << EOF
FLANNEL_OPTIONS="--etcd-endpoints=https://192.168.3.10:2379,https://192.168.3.11:2379,https://192.168.3.12:2379 \
--etcd-cafile=/opt/etcd/ssl/ca.pem \
--etcd-certfile=/opt/etcd/ssl/etcd.pem \
--etcd-keyfile=/opt/etcd/ssl/etcd-key.pem"
EOF
3.2 创建服务启动文件
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=/opt/falnnel/cfg/flanneld
ExecStart=/opt/falnnel/bin/flanneld --ip-masq $FLANNEL_OPTIONS
ExecStartPost=/opt/falnnel/bin/mk-docker-opts.sh -k DOCKER_NETWORK_OPTIONS -d /run/flannel/subnet.env ##这一行在master节点不需要,因为master节点没装docker
Restart=on-failure
[Install]
WantedBy=multi-user.target
EOF
3.3 其他节点处理
1. scp flanneld mk-docker-opts.sh root@192.168.3.11:/opt/falnnel/bin/ &&scp flanneld mk-docker-opts.sh root@192.168.3.12:/opt/falnnel/bin/
2. scp flanneld root@192.168.3.11:/opt/falnnel/cfg/ && scp flanneld root@192.168.3.11:/opt/falnnel/cfg/
3. scp /usr/lib/systemd/system/flanneld.service root@192.168.3.11:/usr/lib/systemd/system/ && scp /usr/lib/systemd/system/flanneld.service root@192.168.3.12:/usr/lib/systemd/system/
4. 在docker-node节点看 3.2中服务文件的配置,需要加上一行
3.3 指定Docker启动子网段(装了docker的工作节点需要)
1. vim /usr/lib/systemd/system/docker.service
2. 在Type=notify 下面加上一行 EnvironmentFile=/run/flannel/subnet.env
3. 在ExecStart=/usr/bin/dockerd 后面追加一个 $DOCKER_NETWORK_OPTIONS
4. 此时应该长这样(博主移除了默认的注释)
[Unit]
Description=Docker Application Container Engine
Documentation=https://docs.docker.com
After=network-online.target firewalld.service
Wants=network-online.target
[Service]
Type=notify
EnvironmentFile=/run/flannel/subnet.env
ExecStart=/usr/bin/dockerd $DOCKER_NETWORK_OPTIONS
ExecReload=/bin/kill -s HUP $MAINPID
LimitNOFILE=infinity
LimitNPROC=infinity
LimitCORE=infinity
TimeoutStartSec=0
Delegate=yes
KillMode=process
Restart=on-failure
StartLimitBurst=3
StartLimitInterval=60s
[Install]
WantedBy=multi-user.target
3.4 启动并设置开机启动
1. systemctl daemon-reload
2. systemctl start flanneld
3. systemctl enable flanneld
4. systemctl restart docker ##一定要重启Docker
四、 检查网络状态
4.1 检查flannel网卡是否在一个网段
ip addr,从下图可以看到没啥问题

4.2 检查node节点的docker和flannel是否在同一个网段

4.3 基于flannel网段全部都ping一下
4.3.1 master-ping Node1/Node2节点docker
ping 172.17.23.1

ping 172.17.23.1

4.3.2 Node1/Node2节点互ping
Node2 : ping 172.17.23.1

Node2 : ping 172.17.23.1

五、 部署一个nginx来测试
K8S系列(一)kubeadm部署
这里博主就不展示怎么启动了,请查看原来的文章,有说如果启动测试的nginx
六、 总结
1. 博主的5篇k8s部署系列文章到这里就告一段落了
2. 接下来博主会介绍一下k8s的pod、service、deployment等等
3. 如有不对的地方欢迎指正,希望能帮到大家