CentOS7 手动部署flannel并启用vxlan
本以为docker准备妥当之后,就可以直接上k8s了,结果yum install kubernetes,报错:Error: docker-ce conflicts with docker-1.9.1 .....
这才想起来,自己的docker不是从centos官方源获取的,而是用了docker的源安装docker-ce,参见上一遍docker的部署文档。
centos官方源提供的k8s在版本1.2,配套docker 1.9,而我用的docker-ce在版本18.03,经查k8s的changelog,至少要到1.8才能支持到docker 17.03,然后到1.11,都未提到过docker 18;
但参考了较新的k8s部署教程,已经有k8s 1.10配套docker-ce 18.03的先例,可以一试;
参考了现网已有的大部分k8s部署教程,大都太流程化,不够细致;
安装k8s通常会提到flannel,它提供容器的跨主机通信支持,已经涉及到SDN的领域,这一篇对flannel的部署及原理介绍特别值得读一下;
考虑到k8s需要用最新版,flannel也就用最新版,不通过yum安装了,于是自己动手部署了flannel,把从细节收获的信息记下来,提供一个不一样的视角;
----以下是正文----
依赖
flannel依赖etcd提供配置管理;为简化,我只使用了一个单点的etcd,没有组etcd集群;
部署flannel
下载flannel,从github找到最新的发布版,我下到的是0.10.0;https://github.com/coreos/flannel/releases
解压后,得到一个二进制文件flanneld,一个脚本mk-docker-opts.sh,以及一个README.md;最后这个文件忽略就行了,其它两个放到/usr/bin下;
mv flanneld /usr/bin
mv mk-docker-opts.sh /usr/bin
flanneld服务配置
添加systemd的service管理文件:
# cat /usr/lib/systemd/system/flanneld.service
[Unit]
Description=flannel
Before=docker.service [Service]
ExecStart=/usr/bin/flanneld [Install]
WantedBy=multi-user.target
RequiredBy=docker.service
flanneld环境变量配置
环境变量的管理也仿照上一篇对docker的环境变量管理,添加了一个Drop-in file:
# cat /etc/systemd/system/flanneld.service.d/flannel.conf
[Service]
Environment="FLANNELD_ETCD_ENDPOINTS=http://xxxx:2379"
Environment="FLANNELD_ETCD_PREFIX=/flannel/network"
flannel的环境变量全都是参数加上“FLANNELD_”前缀,见flanneld环境变量说明;
启动flanneld
查看环境变量是否生效,然后启动flanneld:
systemctl daemon-reload systemctl show flanneld --property Environment systemctl start flanneld
查看启动日志:
systemctl status flanneld -l
发现报错了:Couldn't fetch network config: 100: Key not found
想起来etcd里还没写入网络配置信息呢;
flanneld网络配置
docker默认用172.17.0.0/16这个段,我想换个段,以明确知道是在使用flanneld提供的网络,于是就用了172.10.0.0/16
etcdctl mk /flannel/network/config '{"Network":"172.10.0.0/16", "SubnetMin": "172.10.1.0", "SubnetMax": "172.10.254.0"}'
因为flannel一直在尝试从etcd读配置信息,所以不需要重启flanneld,再看启动日志,flanneld已经获取到想要的子网地址了;
此时,在/run/flannel/subnet.env位置会生成这个host所分配到的子网信息:
# cat /run/flannel/subnet.env
FLANNEL_NETWORK=172.10.0.0/
FLANNEL_SUBNET=172.10.63.1/
FLANNEL_MTU=
FLANNEL_IPMASQ=false
而这个文件正是mk-docker-opts.sh脚本的输入文件:
# /usr/bin/mk-docker-opts.sh -c
# cat /run/docker_opts.env
DOCKER_OPTS=" --bip=172.10.63.1/24 --ip-masq=true --mtu=1472"
这时看一下etcd,多了一条信息:
# etcdctl get /flannel/network/subnets/172.10.63.0-
{"PublicIP":"xxxxxx"}
看一下主机网卡
# ip a |grep flannel
: flannel0: <POINTOPOINT,MULTICAST,NOARP,UP,LOWER_UP> mtu qdisc pfifo_fast state UNKNOWN qlen
看一下网卡详情
# ip -d link show dev flannel0
: flannel0: <POINTOPOINT,MULTICAST,NOARP,UP,LOWER_UP> mtu qdisc pfifo_fast state UNKNOWN mode DEFAULT qlen
link/none promiscuity
tun
将生成docker_opts.env的命令加到flanneld的systemd启动配置中:
[Unit]
Description=flannel
Before=docker.service [Service]
ExecStart=/usr/bin/flanneld
ExecStartPost=/usr/bin/mk-docker-opts.sh -c # 新加 [Install]
WantedBy=multi-user.target
RequiredBy=docker.service
flanneld vxlan网络配置
推荐Kernel 3.9以上的主机启用vxlan网络(来源记不清了),CentOS7的内核已经到3.10,可以支持;
修改网络配置:
etcdctl set /flannel/network/config '{"Network":"172.10.0.0/16", "SubnetMin": "172.10.1.0", "SubnetMax": "172.10.254.0", "Backend": {"Type": "vxlan"}}'
重启flanneld:
systemctl restart flanneld
查看启动日志,已经能看到在使用vxlan backend了;
看一下/run/flannel/subnet.env文件,发现子网没变,但是MTU变了:
# cat /run/flannel/subnet.env
FLANNEL_NETWORK=172.10.0.0/
FLANNEL_SUBNET=172.10.63.1/
FLANNEL_MTU=
FLANNEL_IPMASQ=false
再看一下etcd
# etcdctl get /flannel/network/subnets/172.10.63.0-
{"PublicIP":"xxxx","BackendType":"vxlan","BackendData":{"VtepMAC":"e2:73:8e:db:83:56"}}
再看一下主机网卡
# ip a|grep flannel
: flannel.: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu qdisc noqueue state UNKNOWN
再看一下网卡详情
# ip -d link show dev flannel.
: flannel.: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu qdisc noqueue state UNKNOWN mode DEFAULT
link/ether e2::8e:db:: brd ff:ff:ff:ff:ff:ff promiscuity
vxlan id local 10.10.10.127 dev bond0 srcport dstport nolearning ageing
Docker使用flannel网络
再重新生成一次docker_opts.env:
# /usr/bin/mk-docker-opts.sh -c
# cat /run/docker_opts.env
DOCKER_OPTS=" --bip=172.10.63.1/24 --ip-masq=true --mtu=1450"
修改/lib/systemd/system/docker.service:
EnvironmentFile=/run/docker_opts.env # 新加
ExecStart=/usr/bin/dockerd $DOCKER_OPTS
重启docker服务:
systemctl daemon-reload
systemctl restart docker
查看bridge网络的信息:
# docker network ls |grep bridge
d5ad3f19dc63 bridge bridge local
# docker network inspect d5ad3f19dc63 | grep Subnet
"Subnet": "172.10.63.1/24",
这就已经是在flannel提供的网段内了;
测试
然后在另一台主机上也照做一遍,分别启动一个container,互ping一下,测试通过;
CentOS7 手动部署flannel并启用vxlan的更多相关文章
- kubernetes之手动部署k8s 1.14.1高可用集群
1. 架构信息 系统版本:CentOS 7.6 内核:3.10.0-957.el7.x86_64 Kubernetes: v1.14.1 Docker-ce: 18.09.5 推荐硬件配置:4核8G ...
- CentOS7中部署Showdoc
目录 CentOS7中部署Showdoc 前置环境 部署 配置文件 解压安装包 添加启动服务 设置权限 运行安装 界面 CentOS7中部署Showdoc 文:铁乐与猫 前置环境 因为showdoc其 ...
- CentOS7上部署ASP.Net Core 2.2应用
前言 在CentOS7上部署ASP.Net Core应用是我的技术路线验证的一部分,下一个产品计划采用ASP.Net Boilerplate Framework开发.因此需要求提前进行一下技术验证,在 ...
- (转)Centos7上部署openstack ocata配置详解
原文:http://www.cnblogs.com/yaohong/p/7601470.html 随笔-124 文章-2 评论-82 Centos7上部署openstack ocata配置详解 ...
- 高可用Kubernetes集群-5. 部署flannel网络
七.部署flannel网络 kubernetes支持基于vxlan方式的flannel与weave网络,基于BGP路由的Calico网络,本节采用flannel网络. Flannel网络采用etcd等 ...
- 手动部署 OpenStack Rocky 双节点
目录 文章目录 目录 前言 OpenStack 架构 Conceptual architecture Logical architecture 网络选型 Networking Option 1: Pr ...
- kubernetes容器集群部署Flannel网络
Overlay Network:覆盖网络,在基础网络上叠加的一种虚拟网络技术模式,该网络中的主机通过虚拟链路连接起来. VXLAN:将源数据包封装到UDP中,并使用基础网络的IP/MAC作为外层报文头 ...
- Centos7.6部署k8s v1.16.4高可用集群(主备模式)
一.部署环境 主机列表: 主机名 Centos版本 ip docker version flannel version Keepalived version 主机配置 备注 master01 7.6. ...
- 在 CentOS7 上部署 MySQL 主从
在 CentOS7 上部署 MySQL 主从 通过 SecureCRT 连接至 MySQL 主服务器: 找到 my.cnf 文件所在的目录: mysql --help | grep my.cnf 一般 ...
随机推荐
- linux locate命令
1.命令简介 locate(locate) 命令用来查找文件或目录. locate命令要比find -name快得多,原因在于它不搜索具体目录,而是搜索一个数据库/var/lib/ml ...
- Codeforces 1154F - Shovels Shop - [DP]
题目链接:https://codeforces.com/contest/1154/problem/F 题解: 首先,可以确定的是: 1.$(x,y)$ 里 $x>k$ 的都不可能用: 2.肯定买 ...
- ping vs telnet, what is the difference between them and when to use which?
Ping is an ICMP protocol. Basically any system with TCP/IP could respond to ICMP calls if they were ...
- debug_backtrace
<?php one(); function one() { two(); } function two() { three(); } function three() { print_r( de ...
- odoo按钮触发下载文件
测试环境:Odoo8.0 1.在你的模块中创建一个方法,返回url 举个例子, @api.multi def get_stock_file(self): return{'type':'ir.actio ...
- html实现调用jar包
整体思路:html引用URL protocol-本地注册表key,key对应某一c#写的exe可执行文件,由exe可执行文件调用cmd,cmd执行jar包. 1.添加注册表: Windows Regi ...
- JDK1.8 LongAdder 空间换时间: 比AtomicLong还高效的无锁实现
我们知道,AtomicLong的实现方式是内部有个value 变量,当多线程并发自增,自减时,均通过CAS 指令从机器指令级别操作保证并发的原子性. // setup to use Unsafe.co ...
- Jenkins+Jmeter持续集成笔记(四:定时任务和邮件通知)
通过前几篇文章,jmeter+ant+jenkins自动化持续构建的测试平台基本成型.既然要自动化平台,最基本的肯定要实现不经过人工干预,平台会在特定的条件下自动运行测试脚本,并在脚本运行结束后,发送 ...
- mysql-8.0.13在windows上的部署
1 .下载mysql-8.0.13-x64 官方网站:https://dev.mysql.com/downloads/mysql/ 2.解压到G盘 3.准备my.ini文件保存到解压目录 [mysql ...
- JMeter-性能测试监控(解决.sh文件的启动)
下载插件 https://jmeter-plugins.org/downloads/old/ 已安装了jmeter-plugins-manager,装的这个不知道生没生效.... 2.问题:启动就显示 ...