Kubernets二进制安装(13)之部署Flannel
Flannel简介
Flannel是CoreDNS团队针对Kubernetes设计的一个网络规划服务,简单来说,它的功能是让集群中的不同节点主机创建的Docker容器都具有全集群唯一的虚拟IP地址。但在默认的Docker配置中,每个Node的Docker服务会分别负责所在节点容器的IP分配。Node内部的容器之间可以互相访问,但是不能跨主机(Node)网络相互间是不能直接通信的。Flannel设计目的就是为集群中所有节点重新规划IP地址的使用规则,从而使得在不同的节点上的容器能够获得“同属一个内网”且“不重复的”IP地址,并让属于不同节点上的容器能够直接通过内网IP通信。
Flannel使用etcd存储配置数据和子网分配信息。Flannel启动之后,后台进程首先检索配置和正在使用的子网列表,然后选择一个可用的子网,然后尝试去注册它。etcd也存储了每个主机对应的IP地址。flannel使用etcd的watch机制监视/coreos.com/network/subnets下面所有元素的变化信息,并且根据它来维护一个路由表。为了提高性能,flannel优化了Unversal TAP/TUN设备,对TUN和UDP之间的IP分片做了代理
Flannel原理图如下:
上图Flannel的工作原理解释如下:
1.数据从源容器中发出后,经由所在主机的docker0虚拟网卡转发到flannel0虚拟网卡,这是一个p2p的虚拟网卡,flanneld服务监听在网卡的另外一端
2.Flannel通过etcd服务维护了一张节点间的路由表,此张表里保存了各个节点主机的子网的网段信息
3.源主机的flanneld服务将原本的数据内容UDP封装后根据自己的路由表投递给目的节点的flanneld服务,数据到达后被解包,然后会直接进入到目的节点的flannel0虚拟网卡,然后被发到目的主机的docker0虚拟网卡,最后就像本机容器通信一样的由docker0路由到达目标容器
除了UDP,Flannel还支持很多其它的Backend,但是不支持运行时修改Backend
部分Backend如下:
Backend | 说明 |
---|---|
udp | 使用用户态udp封闭,默认使用8285端口。由于是在用户态封装和解包,性能上有较大的损失,建议只用于debug,如果网卡支持enable upd offload,直接由网卡进行拆包解包,性能还是很好的 |
vxlan | vxlan封装,需要配置VNI,Port(默认8472)和GBP,性能损耗大概在20%-30% |
host-gw | 直接路由方式,将容器网络的路由信息直接更新到主机的路由表中,仅适用于二层直接可达的网络,因此只适用于小集群,性能损耗大概为10% |
aws-vpc | 使用Amazon VPC route table创建路由,适用于AWS上运行的容器 |
gce | 使用Google Compute Engine Network创建路由,所有instance需要开启IP forwarding,适用于GCE上运行的容器 |
ali-vpc | 使用阿里云VPC route table创建路由,适用于阿里云上运行的容器 |
官方推荐使用的Backend:VXLAN host-gw UDP
实验性的Backend,不建议上生产:AliVPC Alloc AWS VPC GCE IPIP IPSec
Flannel二进制安装
1.集群规划
主机名 | 角色 | IP地址 |
---|---|---|
mfyxw30.mfyxw.com | flannel | 192.168.80.30 |
mfyxw40.mfyxw.com | flannel | 192.168.80.40 |
2.下载flannel
flannel链接:https://github.com/coreos/flannel
flannelv0.11.0下载地址:https://github.com/coreos/flannel/releases/download/v0.11.0/flannel-v0.11.0-linux-amd64.tar.gz
flannelv0.12.0下载地址:https://github.com/coreos/flannel/releases/download/v0.12.0/flannel-v0.12.0-linux-amd64.tar.gz
可以在mfyxw40或mfyxw30主机上使用wget来下载,也可以在宿主机上通过迅雷或其它工具下载好再上传到服务器
#在mfyxw30.mfyxw.com主机上执行
[root@mfyxw30 ~]# wget https://github.com/coreos/flannel/releases/download/v0.11.0/flannel-v0.11.0-linux-amd64.tar.gz
#在mfyxw40.mfyxw.com主机上执行
[root@mfyxw40 ~]# wget https://github.com/coreos/flannel/releases/download/v0.11.0/flannel-v0.11.0-linux-amd64.tar.gz
3.解压flannel并创建软链接
#在mfyxw30.mfyxw.com主机上执行
[root@mfyxw30 ~]# mkdir -p /opt/flannel-v0.12.0
[root@mfyxw30 ~]# tar xf flannel-v0.12.0-linux-amd64.tar.gz -C /opt/flanneld-v0.12.0/
[root@mfyxw30 ~]# ln -s /opt/flanneld-v0.12.0 /opt/flanneld
#在mfyxw40.mfyxw.com主机上执行
[root@mfyxw40 ~]# mkdir -p /opt/flannel-v0.12.0
[root@mfyxw40 ~]# tar xf flannel-v0.12.0-linux-amd64.tar.gz -C /opt/flanneld-v0.12.0/
[root@mfyxw40 ~]# ln -s /opt/flanneld-v0.12.0 /opt/flanneld
4.复制证书文件
分别在mfyxw30和mfyxw40主机上/opt/flanneld/目录下创建cert目录,以mfyxw30为例
[root@mfyxw30 ~]# mkdir -p /opt/flanneld/cert
[root@mfyxw30 ~]# cd /opt/flanneld/cert
[root@mfyxw30 cert]# scp -r root@mfyxw50:/opt/certs/ca.pem .
[root@mfyxw30 cert]# scp -r root@mfyxw50:/opt/certs/client.pem .
[root@mfyxw30 cert]# scp -r root@mfyxw50:/opt/certs/client-key.pem .
在mfyxw40主机复制证书到/opt/flanneld/cert目录中
[root@mfyxw40 ~]# mkdir -p /opt/flanneld/cert
[root@mfyxw40 ~]# cd /opt/flanneld/cert
[root@mfyxw40 cert]# scp -r root@mfyxw50:/opt/certs/ca.pem .
[root@mfyxw40 cert]# scp -r root@mfyxw50:/opt/certs/client.pem .
[root@mfyxw40 cert]# scp -r root@mfyxw50:/opt/certs/client-key.pem .
5.配置subnet.env文件
Flannel会将本机的subnet信息对应的环境变量注入到该文件中,Flannel真正是从这里获取subnet信息的
在mfyxw30.mfyxw.com主机上添加flannel的subnet.env文件
[root@mfyxw30 ~]# cat > /opt/flanneld/subnet.env << EOF
FLANNEL_NETWORK=10.10.0.0/16
FLANNEL_SUBNET=10.10.30.1/24
FLANNEL_MTU=1500
FLANNEL_IPMASQ=false
EOF
在mfyxw40.mfyxw.com主机上添加flannel的subnet.env文件
[root@mfyxw40 ~]# cat > /opt/flanneld/subnet.env << EOF
FLANNEL_NETWORK=10.10.0.0/16
FLANNEL_SUBNET=10.10.40.1/24
FLANNEL_MTU=1500
FLANNEL_IPMASQ=false
EOF
6.为flanneld提供启动脚本
在mfyxw30.mfyxw.com主机上为flanneld创建启动脚本文件/opt/flanneld/flannel.sh
[root@mfyxw30 ~]# cat > /opt/flanneld/flannel.sh << EOF
#!/bin/sh
./flanneld \\
--public-ip=192.168.80.30 \\
--etcd-endpoints=https://192.168.80.20:2379,https://192.168.80.30:2379,https://192.168.80.40:2379 \\
--etcd-keyfile=/opt/flanneld/cert/client-key.pem \\
--etcd-certfile=/opt/flanneld/cert/client.pem \\
--etcd-cafile=/opt/flanneld/cert/ca.pem \\
--iface=ens33 \\
--subnet-file=/opt/flanneld/subnet.env \\
--healthz-port=2401
EOF
在mfyxw40.mfyxw.com主机上为flanneld创建启动脚本文件/opt/flanneld/flannel.sh
[root@mfyxw40 ~]# cat > /opt/flanneld/flannel.sh << EOF
#!/bin/sh
./flanneld \\
--public-ip=192.168.80.40 \\
--etcd-endpoints=https://192.168.80.20:2379,https://192.168.80.30:2379,https://192.168.80.40:2379 \\
--etcd-keyfile=/opt/flanneld/cert/client-key.pem \\
--etcd-certfile=/opt/flanneld/cert/client.pem \\
--etcd-cafile=/opt/flanneld/cert/ca.pem \\
--iface=ens33 \\
--subnet-file=/opt/flanneld/subnet.env \\
--healthz-port=2401
EOF
7.为flannel.sh脚本赋予可执行权限
分别在mfyxw30和mfyxw40主机上执行如下命令,以mfyxw30为例
[root@mfyxw30 ~]# chmod +x /opt/flanneld/flannel.sh
8.操作etcd,增加host-gw
在安装了etcd的主机(mfyxw20,mfyxw30,mfyxw40)中的任意一台上执行如下命令,以mfyxw30主机为例查看etcd主运行在哪台主机上
[root@mfyxw30 ~]# cd /opt/etcd
[root@mfyxw30 ~]# ./etcdctl member list
登录到etcd主的主机mfyxw20上执行如下命令
[root@mfyxw20 ~]# ./etcdctl set /coreos.com/network/config '{"Network": "10.10.0.0/16", "Backend": {"Type": "host-gw"}}'
温馨提示:
Network:用于指定Flanneld地址池
Backend:用于指定数据包以什么方式转发,默认为udp模式,host-gw模式最好,但不能跨宿主机网络
9.为flanneld创建supervisor配置文件
在mfyxw30.mfyxw.com主机上创建supervisor配置文件
[root@mfyxw30 ~]# cat > /etc/supervisord.d/flanneld.ini << EOF
[program:flanneld-80-30]
command=/opt/flanneld/flannel.sh
numprocs=1
directory=/opt/flanneld
autostart=true
autorestart=true
startsecs=30
startretries=3
exitcodes=0,2
stopsignal=QUIT
stopwaitsecs=10
user=root
redirect_stderr=true
stdout_logfile=/data/logs/flanneld/flanneld.stdout.log
stdout_logfile_maxbytes=64MB
stdout_logfile_backups=4
stdout_capture_maxbytes=1MB
stdout_events_enabled=false
EOF
在mfyxw40.mfyxw.com主机上创建supervisor配置文件
[root@mfyxw40 ~]# cat > /etc/supervisord.d/flanneld.ini << EOF
[program:flanneld-80-40]
command=/opt/flanneld/flannel.sh
numprocs=1
directory=/opt/flanneld
autostart=true
autorestart=true
startsecs=30
startretries=3
exitcodes=0,2
stopsignal=QUIT
stopwaitsecs=10
user=root
redirect_stderr=true
stdout_logfile=/data/logs/flanneld/flanneld.stdout.log
stdout_logfile_maxbytes=64MB
stdout_logfile_backups=4
stdout_capture_maxbytes=1MB
stdout_events_enabled=false
EOF
10.创建日志文件目录
分别在mfyxw30和mfyxw40上机上创建flannel的日志文件目录
在mfyxw30主机上执行
[root@mfyxw30 ~]# mkdir -p /data/logs/flanneld
在mfyxw40主机上执行
[root@mfyxw40 ~]# mkdir -p /data/logs/flanneld
11.启动服务并检查
在mfyxw30主机上执行
[root@mfyxw30 ~]# supervisorctl update
[root@mfyxw30 ~]# supervisorctl status
在mfyxw40主机上执行
[root@mfyxw40 ~]# supervisorctl update
[root@mfyxw40 ~]# supervisorctl status
Kubernets二进制安装(13)之部署Flannel的更多相关文章
- Kubernets二进制安装(6)之部署主控节点服务--etcd
Etcd是Kubernetes集群中的一个十分重要的组件,用于保存集群所有的网络配置和对象的状态信息. 整个kubernetes系统中一共有两个服务需要用到etcd用来协同和存储配置,分别是 网络插件 ...
- Kubernets二进制安装(7)之部署主控节点服务--apiserver二进制安装
kube-apiserver集群规划 主机名 角色 IP地址 mfyxw30.mfxyw.com kube-apiserver主 192.168.80.30 mfyxw40.mfyxw.com kub ...
- Kubernets二进制安装(12)之部署Node节点服务的kube-Proxy
kube-proxy是Kubernetes的核心组件,部署在每个Node节点上,它是实现Kubernetes Service的通信与负载均衡机制的重要组件; kube-proxy负责为Pod创建代理服 ...
- Kubernets二进制安装(11)之部署Node节点服务的kubelet
集群规划 主机名 角色 IP地址 mfyxw30.mfyxw.com kubelet 192.168.80.30 mfyxw40.mfyxw.com kubelet 192.168.80.40 注意: ...
- Kubernets二进制安装(9)之部署主控节点控制器controller-manager
kube-controller-manager运行控制器,它们是处理集群中常规任务的后台线程 Controller Manager就是集群内部的管理控制中心,由负责不同资源的多个Controller构 ...
- Kubernets二进制安装(8)之部署四层反向代理
四层反向代理集群规划 主机名 角色 IP地址 mfyxw10.mfyxw.com 4层负载均衡(主) 192.168.80.10 mfyxw20.mfyxw.com 4层负载均衡(从) 192.168 ...
- Kubernets二进制安装(10)之部署主控节点部署调度器服务kube-scheduler
Kubernetes Scheduler是一个策略丰富.拓扑感知.工作负载特定的功能,调度器显著影响可用性.性能和容量.调度器需要考虑个人和集体的资源要求.服务质量要求.硬件/软件/政策约束.亲和力和 ...
- Kubernets二进制安装(7)之部署主控节点服务--apiserver简介
API Server简介 Kubernetes API Server提供了K8S各类资源对象(如:pod.RC.Service等)的增删改查及watch等HTTP Rest接口,是整个系统的数据总线和 ...
- 8、二进制安装K8s之部署CIN网络
二进制安装K8s之部署CIN网络 部署CIN网络可以使用flannel或者calico,这里介绍使用calico ecd 方式部署. 1.下载calico二进制安装包 创建所需目录 mkdir -p ...
随机推荐
- leetcode 473. 火柴拼正方形(DFS,回溯)
题目链接 473. 火柴拼正方形 题意 给定一串数,判断这串数字能不能拼接成为正方形 思路 DFS,但是不能每次从从序列开始往下搜索,因为这样无法做到四个边覆盖不同位置的值,比如输入是(5,5,5,5 ...
- ctfhub技能树—RCE—综合过滤练习
打开靶机 查看页面信息 查看源码可以发现这一次过滤了很多东西,查看当前目录信息 查询到%0a为换行符,可以利用这个url编码进行命令注入,开始尝试 http://challenge-2a4584dab ...
- Vulnhub靶场——DC-1
记一次Vulnhub靶场练习记录 靶机DC-1下载地址: 官方地址 https://download.vulnhub.com/dc/DC-1.zip 该靶场共有5个flag,下面我们一个一个寻找 打开 ...
- 分布式系统:分布式任务调度xxl-job较深入使用
目录 系统关键概念介绍 执行器 任务 任务配置项描述 阻塞策略 路由策略 日志问题 客户端日志 服务端日志 框架目前发现的缺点以及存在的问题 xxl-job是一个分布式定时任务调度框架,功能强大,底层 ...
- 【Python】中国有哪些同名的省市县?
这道题适合写个脚本来解. 首先从百度地图API下载一份行政区划数据. 开发资源 | 百度地图API SDK 然后做一个简单的数据统计就可以啦~ 行政区划同一级同名的: import pandas as ...
- Py装饰器
装饰器: 1.定义,什么是装饰器 装饰器本质是一个函数,它是为了给其他函数添加附加功能 2.装饰器的两个原则 原则1 不修改被修饰函数的源代码原则2 不修改被修饰函数的调用方式 3.首先来看一 ...
- 3、wait和waitpid
1. 函数介绍 wait函数:调用该函数使进程阻塞,直到任意一个子进程结束,或者该进程接收到了一个信号为止,如果该进程没有子进程或该进程的子进程已经结束,wait函数立即返回. waitpid函数:与 ...
- 今天聊点干货—关于CSS样式来源
样式来源 CSS样式共有5个来源,它们分别是\(\color{#FF3030}{浏览器默认样式}\).\(\color{#FF3030}{用户样式}\).\(\color{#FF3030}{链接样式} ...
- PC端微信多开方式.bat(Windows批处理文件)
start 微信安装路径\WeChat.exe start 微信安装路径\WeChat.exe
- (06)-Python3之--判断、循环
1.判断(if) 语法: if 条件(True/False): 条件为真时,执行的代码(要干的事情)[elif 条件: 条件为真时,执行的代码(要干的事情)elif 条件: 条件为真时,执行的代码(要 ...