k8s部署Flannel网络篇(k8s篇二)

前言

环境

在上一篇中咱们已经部署了etcd集群,咱们仍然在以前的基础之上作配置,全部的环境仍是沿用以前的,在这就很少说了。html

flannel是什么?

Flannel实质上是一种“覆盖网络(overlay network)”,也就是将TCP数据包装在另外一种网络包里面进行路由转发和通讯,目前已经支持UDP、VxLAN、AWS VPC和GCE路由等数据转发方式。
---------------------------------------------------------------------------------------------------linux

所谓的覆盖网络:覆盖网络(overlay network [1] )简单说来覆盖网络就是应用层网络,它是面向应用层的,不考虑或不多考虑网络层,物理层的问题。覆盖网络容许对没有IP地址标识的目的主机路由信息,例如:Freenet和DHT(分布式哈希表)能够路由信息到一个存储特定文件的结点,而这个结点的IP地址事先并不知道。好比说,P2P就是一种覆盖网络P2P是集中分散分形概念的同行对等覆盖网络,网络覆盖就是指用户可以接收到网络信号的范围。好比说网络覆盖10米半径,就是指以发射点为圆心10米半径内的设备均可以收到信号。一般指无线信号网络,如手机网络,无线网络等设备的有效信号接收范围web

flannel的工做原理

数据从源容器中发出后,经由所在主机的docker0虚拟网卡转发到flannel0虚拟网卡,这是个P2P的虚拟网卡,flanneld服务监听在网卡的另一端。
Flannel经过Etcd服务维护了一张节点间的路由表,详细记录了各节点子网网段 。
源主机的flanneld服务将本来的数据内容UDP封装后根据本身的路由表投递给目的节点的flanneld服务,数据到达之后被解包,而后直接进入目的节点的flannel0虚拟网卡,而后被转发到目的主机的docker0虚拟网卡,最后就像本机容器通讯一下的有docker0路由到达目标容器。docker

部署

将flannel二进制文件解压并将文件移动到相应位置,flannel压缩包能够在etcd篇中的百度网盘地址处获取shell

tar -zxvf flannel-v0.10.0-linux-amd64.tar.gz
mkdir /k8s/flannel/{bin,config,ssl} -p
mv flanneld mk-docker-opts.sh /k8s/flannel/bin/

向 etcd 写入集群 Pod 网段信息网络

/k8s/etcd/bin/etcdctl \
--ca-file=/k8s/etcd/ssl/ca.pem --cert-file=/k8s/etcd/ssl/server.pem \
--key-file=/k8s/etcd/ssl/server-key.pem \
--endpoints="http://192.168.1.250:2379,http://192.168.1.251:2379,http://192.168.1.252:2379" \
set /coreos.com/network/config  '{ "Network": "10.10.0.0/16", "Backend": {"Type": "vxlan"}}'
  • 写入的 Pod 网段 ${CLUSTER_CIDR} 必须是 /16 段地址,必须与 kube-controller-manager 的 –cluster-cidr 参数值一致;

配置Flannel
cd /k8s/etcd/ssl/
cp *.pem /k8s/flannel/ssl/
vi /k8s/flannel/config/flanneld
FLANNEL_OPTIONS="--etcd-endpoints=http://192.168.1.250:2379,http://192.168.1.251:2379,http://192.168.1.252:2379 -etcd-cafile=/k8s/flannel/ssl/ca.pem -etcd-certfile=/k8s/flannel/ssl/server.pem -etcd-keyfile=/k8s/flannel/ssl/server-key.pem"

建立 flanneld 的 systemd unit 文件分布式

vi /usr/lib/systemd/system/flanneld.service
[Unit]
Description=Flanneld overlay address etcd agent
After=network-online.target network.target
Before=docker.service

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

[Install]
WantedBy=multi-user.target

修改Docker文件,在docker启动处指定子网段svg

vi /usr/lib/systemd/system/docker.service

在这里插入图片描述
启动flannel,重启dockerspa

systemctl daemon-reload
systemctl enable flanneld
systemctl start flanneld
systemctl restart docker

查看启动状态rest

systemctl status flanneld
journalctl -xe -u flanneld

日志都是Info级别
日志都为info级别
在这里插入图片描述
查看是否生效

ip add

若出现如下状态证实成功
在这里插入图片描述

为其余节点配置

cd /k8s/
scp -r flannel 192.168.1.251:/k8s/
scp -r flannel 192.168.1.252:/k8s/
scp /usr/lib/systemd/system/docker.service  192.168.1.251:/usr/lib/systemd/system/docker.service 
scp /usr/lib/systemd/system/docker.service  192.168.1.252:/usr/lib/systemd/system/docker.service
scp /usr/lib/systemd/system/flanneld.service  192.168.1.251:/usr/lib/systemd/system/flanneld.service 
scp /usr/lib/systemd/system/flanneld.service  192.168.1.252:/usr/lib/systemd/system/flanneld.service
> 感谢k8s中文社区中 https://www.kubernetes.org.cn/4963.html 文章提供的信息帮助