易陆发现互联网技术论坛

 找回密码
 开始注册
查看: 4173|回复: 1
收起左侧

CentOS7 手动部署flannel并启用vxlan

[复制链接]
发表于 2018-7-17 12:57:05 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有账号?开始注册

x
本以为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的先例,可以一试;

& f. x; E" T3 \3 m
参考了现网已有的大部分k8s部署教程,大都太流程化,不够细致;
安装k8s通常会提到flannel,它提供容器的跨主机通信支持,已经涉及到SDN的领域,这一篇对flannel的部署及原理介绍特别值得读一下;
考虑到k8s需要用最新版,flannel也就用最新版,不通过yum安装了,于是自己动手部署了flannel,把从细节收获的信息记下来,提供一个不一样的视角;
5 r! h+ y+ E/ h: X( E
----以下是正文----
依赖
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/binmv mk-docker-opts.sh /usr/bin

  G* ^- }) W0 ]9 G5 v% eflanneld服务配置
添加systemd的service管理文件:
[backcolor=rgb(245, 245, 245) !important][url=]

  m# G2 c. K5 X' m$ p                               
登录/注册后可看大图
[/url]
* D2 |6 j0 y% D; P
# cat /usr/lib/systemd/system/flanneld.service [Unit]Description=flannelBefore=docker.service[Service]ExecStart=/usr/bin/flanneld[Install]WantedBy=multi-user.targetRequiredBy=docker.service[backcolor=rgb(245, 245, 245) !important][url=]
7 u, B/ R$ t" I5 M
                               
登录/注册后可看大图
[/url]

0 ~$ ^8 y3 A1 g: r5 k* m7 g2 ?
7 f# b  k6 C; X$ e8 z
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"
7 Y+ A+ I4 S/ g2 `/ f; |
flannel的环境变量全都是参数加上“FLANNELD_”前缀,见flanneld环境变量说明
启动flanneld
查看环境变量是否生效,然后启动flanneld:
systemctl daemon-reloadsystemctl show flanneld --property Environment. D7 {# {) T! w

" I7 C9 W5 C/ S8 csystemctl start flanneld

" v. k+ {, u2 T! A# S
查看启动日志:
systemctl status flanneld -l

/ r5 h! a8 }! f
发现报错了: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"}'
1 x$ B$ \3 f3 r
因为flannel一直在尝试从etcd读配置信息,所以不需要重启flanneld,再看启动日志,flanneld已经获取到想要的子网地址了;
此时,在/run/flannel/subnet.env位置会生成这个host所分配到的子网信息:
# cat /run/flannel/subnet.envFLANNEL_NETWORK=172.10.0.0/16FLANNEL_SUBNET=172.10.63.1/24FLANNEL_MTU=1472FLANNEL_IPMASQ=false
1 c& [; x! e6 g; V: Z1 K
而这个文件正是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"
& @. b3 i) s- M/ l% C, C3 e
这时看一下etcd,多了一条信息:
# etcdctl get /flannel/network/subnets/172.10.63.0-24{"PublicIP":"xxxxxx"}
  t0 }7 N  Y" V: Y! {  H
看一下主机网卡
# ip a |grep flannel146: flannel0: <POINTOPOINT,MULTICAST,NOARP,UP,LOWER_UP> mtu 1472 qdisc pfifo_fast state UNKNOWN qlen 500

: E6 |9 d6 [2 e' X% [, Z  q
看一下网卡详情
# ip -d link show dev flannel0147: flannel0: <POINTOPOINT,MULTICAST,NOARP,UP,LOWER_UP> mtu 1472 qdisc pfifo_fast state UNKNOWN mode DEFAULT qlen 500    link/none  promiscuity 0     tun

# ^0 B" E% O; `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"}}'
1 j2 B$ p" }; O, U4 Z" m! ?& ?$ A
重启flanneld:
systemctl restart flanneld
/ p* @) \+ }  a- V+ l9 [- M
查看启动日志,已经能看到在使用vxlan backend了;
看一下/run/flannel/subnet.env文件,发现子网没变,但是MTU变了:
# cat /run/flannel/subnet.env FLANNEL_NETWORK=172.10.0.0/16FLANNEL_SUBNET=172.10.63.1/24FLANNEL_MTU=1450FLANNEL_IPMASQ=false

$ f* [* i! N1 e  D1 \2 r, Q  Q
再看一下etcd
# etcdctl get /flannel/network/subnets/172.10.63.0-24{"PublicIP":"xxxx","BackendType":"vxlan","BackendData":{"VtepMAC":"e2:73:8e:db:83:56"}}
, j' ^! t3 b' e9 F$ Q- o+ s! P
再看一下主机网卡
# ip a|grep flannel145: flannel.1: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1450 qdisc noqueue state UNKNOWN
; _. ?" {+ [+ J' f: E; U
再看一下网卡详情
# ip -d link show dev flannel.1145: flannel.1: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1450 qdisc noqueue state UNKNOWN mode DEFAULT     link/ether e2:73:8e:db:83:56 brd ff:ff:ff:ff:ff:ff promiscuity 0     vxlan id 1 local 10.10.10.127 dev bond0 srcport 32768 65000 dstport 8472 nolearning ageing 300

9 ?8 f/ ~2 ~8 U& uDocker使用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"
+ H& `9 a5 e# b# u$ [% X, a& z
修改/lib/systemd/system/docker.service:
EnvironmentFile=/run/docker_opts.env # 新加ExecStart=/usr/bin/dockerd $DOCKER_OPTS
) N) O1 C) R: x) P( g
重启docker服务:
systemctl daemon-reloadsystemctl restart docker
. C- O1 D% `8 c5 D5 ?/ |
查看bridge网络的信息:
# docker network ls |grep bridged5ad3f19dc63        bridge              bridge              local# docker network inspect d5ad3f19dc63 | grep Subnet                    "Subnet": "172.10.63.1/24",
2 y, N# f+ f- B3 R: [; p1 Y0 W
这就已经是在flannel提供的网段内了;
测试
然后在另一台主机上也照做一遍,分别启动一个container,互ping一下,测试通过;
 楼主| 发表于 2018-7-17 12:58:46 | 显示全部楼层

PC上执行:

ssh -X root@VM-IP

登录以后执行:

wireshark &

: @% H& A, v& E

解决方案:修改init.lua

直接运行wireshark的话会报错:

Lua: Error during loading:
& V2 P5 ?8 q& P7 D, d5 t& F[string "/usr/share/wireshark/init.lua"]:45: dofile has been disabled

要对其进行修改,终端运行

sudo gedit /usr/share/wireshark/init.lua  //使用 VI 编辑  Gedit没安装 。


8 h! C% z# R3 @" D6 C- ^7 ~0 F5 B

倒数第二行原来为:dofile(DATA_DIR.."console.lua")

改为--dofile(DATA_DIR.."console.lua")

0 Z3 A4 i3 T+ v7 M7 a) b

四 整合

之后在VM中运行mininet,并指定与controller相连。

sudo mn –controller=remote –ip= –port=


, q- E8 `& M* t# y

这个地方  

mn  –controller=remote,ip=xxx.xxx 端口不用桥 。


* j7 j! [( f: h: g) ?" O

查看PC上floodlight信息,可以发现有OpenFlow Switch与之相连。进入http://localhost:8080/ui/index.html


6 X3 i" ~: ^6 _

执行如下,看看结果:

mininet>nodes

mininet>dump

mininet>net

mininet>pingall

0 l0 [6 A# W8 T4 r% j
- O8 |! _$ X3 V! b$ M. |
$ D1 g3 g" z1 h, q0 Q6 \$ @6 p

/ {, G! _% B& V) i: r
7 G4 i/ C. f& w9 z1 k(其一)
/ i8 l" d/ l# U. ]) \
% c2 z# x9 N+ ~4 n- k& ^) I
0 S" g. W% d9 F4 d$ W; ?

(((((((((((((((((((((((((((((((((((以后再看

上述命令将创建多个文件:Floodlight.launch,Floodlight_junit.launch,classpath和.project。打开Eclipse软件,可以通过下面这些来设置新的Eclipse项目。

■打开eclipse创建一个新的工程

■File -> Import -> General -> Existing Projects into Workspac ,点击下一步

■点击“Browse”。选择之前放置Floodlight的路径

■点击Floodlight

■点击“Finish”

现在就产生了一个Floodlight的Eclipse工程。由于我们是使用静态模块加载系统运行Floodlight,我们必须配置Eclipse来正确的运行Floodlight。创建Floodlight目标文件:

■点击Run->Run Configurations

■右击Java Application,选择 New

■“Name”使用“FloodlightLaunch”

■“Project”使用“Floodlight”

■“Main”使用“net.floodlightcontroller.core.Main”

■点击“Apply”

■点击“Run”,Floodlight就开始运行了

(4)运行Floodlight后可以通过登录http://localhost:8080/ui/index.html使用Floodlight提供的web管理界面查看里面的信息,包括交换机、主机等等,因为我们没有接什么设备,页面没有什么信息。

4 配置Floodlight

Floodlight提供了两个配置文件:floodlightdefault.properties和learningswitch.properties,路径都位于floodlight/src/main/resources/。通过这两个配置文件可以查看Floodlight已经加载的子模块以及控制器的侦听端口、web端口,默认的侦听端口是6633,web端口是8080。如有必要用户可以自定义加载子模块和修改侦听端口,通过vi命令修改配置文件后,在Floodlight目录下执行ant编译后重启Floodlight即可。配置参数如下两图a)、图b)所示:

                    图a)  floodlightdefault.properties配置信息

                    图b)  learningswitch.properties配置信息

5 常用Floodlight命令

Floodlight将自己的API通过Rest Api的形式向外暴露,关于Rest Api,就是将程序的API封装成为通用的http GET/PUT的形式,这样的话无需关注程序实现细节,通过发送http请求即可完成API操作。所以用户可以通过Floodlight的Restful api来向Floodlight请求各种信息,包括交换机状态、能力、拓扑等。需要注意,通过Floodlight的Restful api返回的信息以json格式封装。REST Api信息用户访问http://www.projectfloodlight.org/floodlight/来获得。

(1)请求该控制器上所有的switch的DPID,可以参考如下命令,其中localhost:8080要换成控制器的ip和port。

(2)加入流表项

(3)读取流表项

注:这种方式是通过static flow pusher来获取流表项。

(4)删除流表项

假如要删除所有的流表项,使用如下命令:

其它常见操作同Open vSwitch。

6 Floodlight可兼容交换机

下面列出了可以和Floodlight控制器兼容的交换机:

虚拟交换机

■Open vSwitch(OVS)

硬件交换机

■Arista 7050

■Brocade MLXe

■Brocade CER

■Brocade CES

■Dell S4810

■Dell Z9000

■Extreme Summit x440, x460, x670

■HP 3500, 3500yl, 5400zl, 6200yl, 6600, and 8200zl (the old-style L3 hardware match platform)

■HP V2 line cards in the 5400zl and 8200zl (the newer L2 hardware match platform)

■Huawei openflow-capable router platforms

■IBM 8264

■Juniper (MX, EX)

■NEC IP8800

■NEC PF5240

■NEC PF5820

■NetGear 7328SO

■NetGear 7352SO

■Pronto (3290, 3295, 3780) - runs the shipping pica8 software

)))))))))))))))))))))))))))))))

1 ^: R9 x0 w  q1 R& Z, w


" M0 S, h, X+ n' U# u3 F4 h


8 w  O  t! ]9 r8 }; c0 U
4 B  M  T2 @9 U5 B" t/ q5 ^- [; r

' U# c" K( F4 W: a0 G" @

(((((((((((((((((((((((((((((((((((以后再看

上述命令将创建多个文件:Floodlight.launch,Floodlight_junit.launch,classpath和.project。打开Eclipse软件,可以通过下面这些来设置新的Eclipse项目。

■打开eclipse创建一个新的工程

■File -> Import -> General -> Existing Projects into Workspac ,点击下一步

■点击“Browse”。选择之前放置Floodlight的路径

■点击Floodlight

■点击“Finish”

现在就产生了一个Floodlight的Eclipse工程。由于我们是使用静态模块加载系统运行Floodlight,我们必须配置Eclipse来正确的运行Floodlight。创建Floodlight目标文件:

■点击Run->Run Configurations

■右击Java Application,选择 New

■“Name”使用“FloodlightLaunch”

■“Project”使用“Floodlight”

■“Main”使用“net.floodlightcontroller.core.Main”

■点击“Apply”

■点击“Run”,Floodlight就开始运行了

(4)运行Floodlight后可以通过登录http://localhost:8080/ui/index.html使用Floodlight提供的web管理界面查看里面的信息,包括交换机、主机等等,因为我们没有接什么设备,页面没有什么信息。

4 配置Floodlight

Floodlight提供了两个配置文件:floodlightdefault.properties和learningswitch.properties,路径都位于floodlight/src/main/resources/。通过这两个配置文件可以查看Floodlight已经加载的子模块以及控制器的侦听端口、web端口,默认的侦听端口是6633,web端口是8080。如有必要用户可以自定义加载子模块和修改侦听端口,通过vi命令修改配置文件后,在Floodlight目录下执行ant编译后重启Floodlight即可。配置参数如下两图a)、图b)所示:

                    图a)  floodlightdefault.properties配置信息

                    图b)  learningswitch.properties配置信息

5 常用Floodlight命令

Floodlight将自己的API通过Rest Api的形式向外暴露,关于Rest Api,就是将程序的API封装成为通用的http GET/PUT的形式,这样的话无需关注程序实现细节,通过发送http请求即可完成API操作。所以用户可以通过Floodlight的Restful api来向Floodlight请求各种信息,包括交换机状态、能力、拓扑等。需要注意,通过Floodlight的Restful api返回的信息以json格式封装。REST Api信息用户访问http://www.projectfloodlight.org/floodlight/来获得。

(1)请求该控制器上所有的switch的DPID,可以参考如下命令,其中localhost:8080要换成控制器的ip和port。

(2)加入流表项

(3)读取流表项

注:这种方式是通过static flow pusher来获取流表项。

(4)删除流表项

假如要删除所有的流表项,使用如下命令:

其它常见操作同Open vSwitch。

6 Floodlight可兼容交换机

下面列出了可以和Floodlight控制器兼容的交换机:

虚拟交换机

■Open vSwitch(OVS)

硬件交换机

■Arista 7050

■Brocade MLXe

■Brocade CER

■Brocade CES

■Dell S4810

■Dell Z9000

■Extreme Summit x440, x460, x670

■HP 3500, 3500yl, 5400zl, 6200yl, 6600, and 8200zl (the old-style L3 hardware match platform)

■HP V2 line cards in the 5400zl and 8200zl (the newer L2 hardware match platform)

■Huawei openflow-capable router platforms

■IBM 8264

■Juniper (MX, EX)

■NEC IP8800

■NEC PF5240

■NEC PF5820

■NetGear 7328SO

■NetGear 7352SO

■Pronto (3290, 3295, 3780) - runs the shipping pica8 software

)))))))))))))))))))))))))))))))

  N; z7 u2 Q8 a; W& U6 s

8 ^5 o& o' Q) r, W4 d5 ~7 n
8 t+ V0 e  x4 M9 L
您需要登录后才可以回帖 登录 | 开始注册

本版积分规则

关闭

站长推荐上一条 /4 下一条

北京云银创陇科技有限公司以云计算运维,代码开发

QQ|返回首页|Archiver|小黑屋|易陆发现技术论坛 ( 蜀ICP备2026014127号-1 )点击这里给我发消息

GMT+8, 2026-4-8 21:22 , Processed in 0.089961 second(s), 23 queries .

Powered by Discuz! X3.4 Licensed

© 2012-2025 Discuz! Team.

快速回复 返回顶部 返回列表