faicker's个人博客

关注云计算,网络虚拟化


  • 首页

  • 关于

  • 归档

  • 标签

  • 搜索

ovn学习-1-配置同步

发表于 2017-08-22 | 分类于 ovn , openvswitch |

配置同步协议(sequence number protocol)

ovn各个进程间都是通过ovsdb交互的。怎么知道一个命令是否执行成功了呢。比如ovn-nbctl -v --wait=hv acl-add dmz to-lport 100 tcp.dst==23 allow-related。

协议工作过程如下,

  1. NB_Global表里的nb_cfg加1
  2. 当ovn-northd更新sb db时,把NB_Global表里的nb_cfg的值拷贝到SB_Global里。(从这里可以确认sb db是否与nb db一致)
  3. 在ovn-northd从sb db收到确认后,更新NB_Global表里的sb_cfg,使得sb_cfg=nb_cfg
  4. 在chassis上的ovn-controller收到更新的带有nb_cfg的sb db时,更新ovs里的flow。当从ovs收到更新完成的消息后,在sb db里更新自己的chassis的nb_cfg的值。
  5. ovn-northd监控sb db里Chassis表里的nb_cfg列,copy这个值到NB_Global表里的hv_cfg。(从这里可以确认是否所有的hypervisor跟nb db一致)

接口生命周期

  1. CMS(ovn-nbctl)创建逻辑接口,并更新配置。包括vif-id和mac。
  2. CMS(ovn-nbctl)更新nb db,在Logical_Switch_Port添加一行,指定了vif-id, mac, Logical_Switch的值。
  3. ovn-northd收到db更新的通知后,更新sb db。在Logical_Flow表里增加flow,在Binding表里生成记录。
  4. 在每一个hypervisor上,ovn-controller收到了sb db的更新通知,如果接口是down的,ovn-controller做不了很多事情。
  5. 接口UP后,hypervisor(比如libvirt)把接口加入bridge,并且设置external_ids:iface-id=vif-id。
  6. ovn-controller收到这个iface-id通知后,更新sb db里的Binding表里的Chassis值,更新本地的flow。
  7. 对于像openstack,当网络初始化好后才完全启动VM的情况,ovn-northd在知道Binding表里的Chassis值更新后,再更新Logical_Switch_Port里的up列。
  8. 在其他hypervisor上,ovn-controller也能收到sb db(Chassis)的通知,然后知道了这个逻辑端口的物理位置,更新本地的flow。
  9. VM关机,VIF从br删掉。
  10. 在VM关机的hypervisor上,ovn-controller知道VIF被删除后,删除Binding表里对应逻辑端口的Chassis值。
  11. 在每一个hypervisor上,ovn-controller知道了Binding表里的逻辑端口的Chassis值被清空,意味着ovn-controller不再知道逻辑端口的物理位置了,更新本地的flow。
  12. 最后,VIF或者是VM不再需要了,就可以通过CMS删掉。
  13. CMS plugin从nb db里删除Logical_Switch_Port表的VIF数据。
  14. ovn-northd接收到nb db更新后,更新sb db(包括Logical_Flow表和Binding表)。
  15. 在每一个hypervisor上,ovn-controller接收到sb db更新后,删除或者更新本地flow。

openstack-openvswitch流表学习

发表于 2017-08-11 | 分类于 openstack , openvswitch |

前言

openstack版本是ocata,操作系统是ubuntu 1604.3。

架构图

逻辑架构图在这里

  • https://docs.openstack.org/ocata/networking-guide/deploy-ovs-selfservice.html#east-west-scenario-1-instances-on-the-same-network

flow分析

这里只分析flow(neutron网络用的是openvswitch+vxlan+local vlan)

br-int

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
ovs-ofctl dump-flows br-int
cookie=0x8035824320e90178, duration=62019.739s, table=0, n_packets=0, n_bytes=0, idle_age=65534, priority=10,icmp6,in_port=2,icmp_type=136 actions=resubmit(,24)
cookie=0x8035824320e90178, duration=62019.721s, table=0, n_packets=0, n_bytes=0, idle_age=65534, priority=10,icmp6,in_port=3,icmp_type=136 actions=resubmit(,24)
cookie=0x8035824320e90178, duration=62019.734s, table=0, n_packets=24, n_bytes=1008, idle_age=28257, priority=10,arp,in_port=2 actions=resubmit(,24)
cookie=0x8035824320e90178, duration=62019.717s, table=0, n_packets=22, n_bytes=924, idle_age=2913, priority=10,arp,in_port=3 actions=resubmit(,24)
cookie=0x8035824320e90178, duration=62019.744s, table=0, n_packets=99, n_bytes=10196, idle_age=28262, priority=9,in_port=2 actions=resubmit(,25)
cookie=0x8035824320e90178, duration=62019.726s, table=0, n_packets=366, n_bytes=36340, idle_age=2918, priority=9,in_port=3 actions=resubmit(,25)
cookie=0x8035824320e90178, duration=62040.987s, table=0, n_packets=0, n_bytes=0, idle_age=65534, priority=2,in_port=1,dl_src=fa:16:3f:7d:c0:dd actions=resubmit(,1)
cookie=0x8035824320e90178, duration=62040.983s, table=0, n_packets=0, n_bytes=0, idle_age=65534, priority=2,in_port=1,dl_src=fa:16:3f:e9:2f:8a actions=resubmit(,1)
cookie=0x8035824320e90178, duration=62040.979s, table=0, n_packets=0, n_bytes=0, idle_age=65534, priority=2,in_port=1,dl_src=fa:16:3f:f4:6e:4d actions=resubmit(,1)
cookie=0x8035824320e90178, duration=62041.561s, table=0, n_packets=0, n_bytes=0, idle_age=65534, priority=0 actions=NORMAL
cookie=0x8035824320e90178, duration=62041.009s, table=0, n_packets=450, n_bytes=43915, idle_age=2912, priority=1 actions=NORMAL
cookie=0x8035824320e90178, duration=62041.013s, table=1, n_packets=0, n_bytes=0, idle_age=65534, priority=1 actions=drop
cookie=0x8035824320e90178, duration=62041.012s, table=2, n_packets=0, n_bytes=0, idle_age=65534, priority=1 actions=drop
cookie=0x8035824320e90178, duration=62041.015s, table=23, n_packets=0, n_bytes=0, idle_age=65534, priority=0 actions=drop
cookie=0x8035824320e90178, duration=62019.741s, table=24, n_packets=0, n_bytes=0, idle_age=62019, priority=2,icmp6,in_port=2,icmp_type=136,nd_target=fe80::f816:3eff:fe13:fea1 actions=NORMAL
cookie=0x8035824320e90178, duration=62019.723s, table=24, n_packets=0, n_bytes=0, idle_age=62019, priority=2,icmp6,in_port=3,icmp_type=136,nd_target=fe80::f816:3eff:fe1b:6be7 actions=NORMAL
cookie=0x8035824320e90178, duration=62019.736s, table=24, n_packets=2, n_bytes=84, idle_age=28257, priority=2,arp,in_port=2,arp_spa=192.0.2.3 actions=resubmit(,25)
cookie=0x8035824320e90178, duration=62019.719s, table=24, n_packets=20, n_bytes=840, idle_age=2913, priority=2,arp,in_port=3,arp_spa=192.0.2.10 actions=resubmit(,25)
cookie=0x8035824320e90178, duration=62041.560s, table=24, n_packets=0, n_bytes=0, idle_age=65534, priority=0 actions=drop
cookie=0x8035824320e90178, duration=62019.748s, table=25, n_packets=123, n_bytes=11204, idle_age=28257, priority=2,in_port=2,dl_src=fa:16:3e:13:fe:a1 actions=NORMAL
cookie=0x8035824320e90178, duration=62019.730s, table=25, n_packets=388, n_bytes=37264, idle_age=2913, priority=2,in_port=3,dl_src=fa:16:3e:1b:6b:e7 actions=NORMAL

port=2和3是两个不同用户的虚机,port=1是patch-tun。
table=24 arp里的源IP和port验证。
table=25 源mac和port验证。
(<端口,源ip,源mac>的ipv4验证在iptables里)

br-tun

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
ovs-ofctl dump-flows br-tun
cookie=0xa3c68df625ec7f59, duration=62929.875s, table=0, n_packets=525, n_bytes=49584, idle_age=3801, priority=1,in_port=1 actions=resubmit(,1)
cookie=0xa3c68df625ec7f59, duration=62913.324s, table=0, n_packets=287, n_bytes=26502, idle_age=3801, priority=1,in_port=3 actions=resubmit(,4)
cookie=0xa3c68df625ec7f59, duration=62907.929s, table=0, n_packets=168, n_bytes=18211, idle_age=29027, priority=1,in_port=2 actions=resubmit(,4)
cookie=0xa3c68df625ec7f59, duration=62929.985s, table=0, n_packets=0, n_bytes=0, idle_age=65534, priority=0 actions=drop
cookie=0xa3c68df625ec7f59, duration=62929.872s, table=1, n_packets=525, n_bytes=49584, idle_age=3801, priority=0 actions=resubmit(,2)
cookie=0xa3c68df625ec7f59, duration=62929.983s, table=2, n_packets=27, n_bytes=1134, idle_age=4064, priority=1,arp,dl_dst=ff:ff:ff:ff:ff:ff actions=resubmit(,21)
cookie=0xa3c68df625ec7f59, duration=62929.980s, table=2, n_packets=468, n_bytes=45046, idle_age=3801, priority=0,dl_dst=00:00:00:00:00:00/01:00:00:00:00:00 actions=resubmit(,20)
cookie=0xa3c68df625ec7f59, duration=62929.978s, table=2, n_packets=30, n_bytes=3404, idle_age=65534, priority=0,dl_dst=01:00:00:00:00:00/01:00:00:00:00:00 actions=resubmit(,22)
cookie=0xa3c68df625ec7f59, duration=62929.977s, table=3, n_packets=0, n_bytes=0, idle_age=65534, priority=0 actions=drop
cookie=0xa3c68df625ec7f59, duration=62927.265s, table=4, n_packets=64, n_bytes=7237, idle_age=29146, priority=1,tun_id=0x3f actions=mod_vlan_vid:1,resubmit(,9)
cookie=0xa3c68df625ec7f59, duration=62927.257s, table=4, n_packets=366, n_bytes=35310, idle_age=3801, priority=1,tun_id=0x57 actions=mod_vlan_vid:2,resubmit(,9)
cookie=0xa3c68df625ec7f59, duration=62929.975s, table=4, n_packets=25, n_bytes=2166, idle_age=63148, priority=0 actions=drop
cookie=0xa3c68df625ec7f59, duration=62929.974s, table=6, n_packets=0, n_bytes=0, idle_age=65534, priority=0 actions=drop
cookie=0xa3c68df625ec7f59, duration=62929.853s, table=9, n_packets=0, n_bytes=0, idle_age=65534, priority=1,dl_src=fa:16:3f:7d:c0:dd actions=output:1
cookie=0xa3c68df625ec7f59, duration=62929.849s, table=9, n_packets=0, n_bytes=0, idle_age=65534, priority=1,dl_src=fa:16:3f:e9:2f:8a actions=output:1
cookie=0xa3c68df625ec7f59, duration=62929.845s, table=9, n_packets=0, n_bytes=0, idle_age=65534, priority=1,dl_src=fa:16:3f:f4:6e:4d actions=output:1
cookie=0xa3c68df625ec7f59, duration=62929.873s, table=9, n_packets=430, n_bytes=42547, idle_age=3801, priority=0 actions=resubmit(,10)
cookie=0xa3c68df625ec7f59, duration=62929.971s, table=10, n_packets=430, n_bytes=42547, idle_age=3801, priority=1 actions=learn(table=20,hard_timeout=300,priority=1,cookie=0xa3c68d
f625ec7f59,NXM_OF_VLAN_TCI[0..11],NXM_OF_ETH_DST[]=NXM_OF_ETH_SRC[],load:0->NXM_OF_VLAN_TCI[],load:NXM_NX_TUN_ID[]->NXM_NX_TUN_ID[],output:OXM_OF_IN_PORT[]),output:1
cookie=0xa3c68df625ec7f59, duration=62907.916s, table=20, n_packets=92, n_bytes=9094, idle_age=29146, priority=2,dl_vlan=1,dl_dst=fa:16:3e:19:89:22 actions=strip_vlan,load:0x3f->NX
M_NX_TUN_ID[],output:2
cookie=0xa3c68df625ec7f59, duration=62907.166s, table=20, n_packets=0, n_bytes=0, idle_age=63881, priority=2,dl_vlan=2,dl_dst=fa:16:3e:99:f0:a5 actions=strip_vlan,load:0x57->NXM_NX
_TUN_ID[],output:3
cookie=0xa3c68df625ec7f59, duration=62907.161s, table=20, n_packets=275, n_bytes=25998, idle_age=3801, priority=2,dl_vlan=2,dl_dst=fa:16:3e:5c:4c:d8 actions=strip_vlan,load:0x57->N
XM_NX_TUN_ID[],output:3
cookie=0xa3c68df625ec7f59, duration=62907.144s, table=20, n_packets=2, n_bytes=374, idle_age=29027, priority=2,dl_vlan=2,dl_dst=fa:16:3e:9a:b9:6f actions=strip_vlan,load:0x57->NXM_
NX_TUN_ID[],output:2
cookie=0xa3c68df625ec7f59, duration=62907.139s, table=20, n_packets=0, n_bytes=0, idle_age=62907, priority=2,dl_vlan=2,dl_dst=fa:16:3e:0a:23:bd actions=strip_vlan,load:0x57->NXM_NX
_TUN_ID[],output:2
cookie=0xa3c68df625ec7f59, duration=62929.970s, table=20, n_packets=0, n_bytes=0, idle_age=65534, priority=0 actions=resubmit(,22)
cookie=0xa3c68df625ec7f59, duration=62907.918s, table=21, n_packets=2, n_bytes=84, idle_age=29151, priority=1,arp,dl_vlan=1,arp_tpa=192.0.2.2 actions=load:0x2->NXM_OF_ARP_OP[],move
:NXM_NX_ARP_SHA[]->NXM_NX_ARP_THA[],move:NXM_OF_ARP_SPA[]->NXM_OF_ARP_TPA[],load:0xfa163e198922->NXM_NX_ARP_SHA[],load:0xc0000202->NXM_OF_ARP_SPA[],move:NXM_OF_ETH_SRC[]->NXM_OF_ETH
_DST[],mod_dl_src:fa:16:3e:19:89:22,IN_PORT
cookie=0xa3c68df625ec7f59, duration=62907.168s, table=21, n_packets=0, n_bytes=0, idle_age=63881, priority=1,arp,dl_vlan=2,arp_tpa=192.0.2.9 actions=load:0x2->NXM_OF_ARP_OP[],move:
NXM_NX_ARP_SHA[]->NXM_NX_ARP_THA[],move:NXM_OF_ARP_SPA[]->NXM_OF_ARP_TPA[],load:0xfa163e99f0a5->NXM_NX_ARP_SHA[],load:0xc0000209->NXM_OF_ARP_SPA[],move:NXM_OF_ETH_SRC[]->NXM_OF_ETH_
DST[],mod_dl_src:fa:16:3e:99:f0:a5,IN_PORT
cookie=0xa3c68df625ec7f59, duration=62907.163s, table=21, n_packets=1, n_bytes=42, idle_age=4064, priority=1,arp,dl_vlan=2,arp_tpa=192.0.2.6 actions=load:0x2->NXM_OF_ARP_OP[],move:
NXM_NX_ARP_SHA[]->NXM_NX_ARP_THA[],move:NXM_OF_ARP_SPA[]->NXM_OF_ARP_TPA[],load:0xfa163e5c4cd8->NXM_NX_ARP_SHA[],load:0xc0000206->NXM_OF_ARP_SPA[],move:NXM_OF_ETH_SRC[]->NXM_OF_ETH_
DST[],mod_dl_src:fa:16:3e:5c:4c:d8,IN_PORT
cookie=0xa3c68df625ec7f59, duration=62907.146s, table=21, n_packets=1, n_bytes=42, idle_age=29032, priority=1,arp,dl_vlan=2,arp_tpa=192.0.2.2 actions=load:0x2->NXM_OF_ARP_OP[],move
:NXM_NX_ARP_SHA[]->NXM_NX_ARP_THA[],move:NXM_OF_ARP_SPA[]->NXM_OF_ARP_TPA[],load:0xfa163e9ab96f->NXM_NX_ARP_SHA[],load:0xc0000202->NXM_OF_ARP_SPA[],move:NXM_OF_ETH_SRC[]->NXM_OF_ETH
_DST[],mod_dl_src:fa:16:3e:9a:b9:6f,IN_PORT
cookie=0xa3c68df625ec7f59, duration=62907.141s, table=21, n_packets=0, n_bytes=0, idle_age=62907, priority=1,arp,dl_vlan=2,arp_tpa=192.0.2.1 actions=load:0x2->NXM_OF_ARP_OP[],move:
NXM_NX_ARP_SHA[]->NXM_NX_ARP_THA[],move:NXM_OF_ARP_SPA[]->NXM_OF_ARP_TPA[],load:0xfa163e0a23bd->NXM_NX_ARP_SHA[],load:0xc0000201->NXM_OF_ARP_SPA[],move:NXM_OF_ETH_SRC[]->NXM_OF_ETH_
DST[],mod_dl_src:fa:16:3e:0a:23:bd,IN_PORT
cookie=0xa3c68df625ec7f59, duration=62929.968s, table=21, n_packets=21, n_bytes=882, idle_age=65534, priority=0 actions=resubmit(,22)
cookie=0xa3c68df625ec7f59, duration=62907.926s, table=22, n_packets=29, n_bytes=2026, idle_age=65534, priority=1,dl_vlan=1 actions=strip_vlan,load:0x3f->NXM_NX_TUN_ID[],output:2
cookie=0xa3c68df625ec7f59, duration=62907.158s, table=22, n_packets=8, n_bytes=1144, idle_age=65534, priority=1,dl_vlan=2 actions=strip_vlan,load:0x57->NXM_NX_TUN_ID[],output:2,out
put:3
cookie=0xa3c68df625ec7f59, duration=62929.967s, table=22, n_packets=14, n_bytes=1116, idle_age=65534, priority=0 actions=drop

port=1是patch-int,port 2和3是vxlan接口,没有用通配tunnel。
table=0是根据in_port分出向和入向。
table=2是出向流表,按广播arp,单播,广播分发到table 21,20,22.
table=20是明细的单播flow,送到目的(匹配带vlan_id)
table=21是arp代答,然后默认转22
table=22是广播flow,送到目的(匹配带vlan_id)
table=4是入向,tun_id转成vlan_id,转table 9
table=9,转table 10
table=10入向流表,同时有学习,在table=20的后面添加一条priority=1的对应出向的流表,类似于cookie=0xa3c68df625ec7f59, duration=37.162s, table=20, n_packets=0, n_bytes=0, hard_timeout=300, idle_age=37, hard_age=0, priority=1,vlan_tci=0x0002/0x0fff,dl_dst=fa:16:3e:5c:4c:d8 actions=load:0->NXM_OF_VLAN_TCI[],load:0x57->NXM_NX_TUN_ID[],output:3,其中已经有了priority=2一样的推送下去的flow。
这条规则在配置了allowed-address-pair(单网卡多IP,多MAC支持)里用到了mac的情况下会用到。

tips,

  • vlan tag是在进入br-int时,设置在ovs port上的。
  • 本地vlan区分了不同的租户,同时在转发和arp应答时,减少了flow的条数。

python package and deploy

发表于 2017-06-06 | 分类于 python , deploy |

前言

python 打包和部署对于开源项目来说,pip/pypi 就足够了。但是对于公司线上的程序部署,有各种包依赖关系,需要做到依赖包隔离,程序版本管理,部署方式一致化。使用 docker 是很流行,并且通用的方式。还有没有更轻量的方式呢?这就是本文将介绍的内容。

一般来说,一个公司的线上系统版本是一致的,随系统发行版本带的 python 版本也是一致的。如果要跑不同的 python 版本,docker 是一个选择。这里讨论版本一致的情况。

介绍

用到了以下工具,

  • virtualenv,包隔离
  • fpm,打包工具,支持打包成 rpm/deb/osxpkg 等。

用 virtualenv 来做依赖包隔离,包含了自己的程序和依赖的包;系统自带的包管理工具(centos 是 rpm)来做版本管理,实现包的更新,回退。

操作步骤

fpm 安装(centos6 下为例)

  • 安装 virtualenv-tools。
    pip install virtualenv-tools
  • 安装 ruby(>=1.9.3),用到了 scl。
    yum install rh-ruby23-ruby rh-ruby23-ruby-devel
    scl enable rh-ruby23 bash
  • 安装 fpm。
    gem install fpm

python项目

可以参考 pychinadns,需要写 setup.py。

打包

fpm --verbose -f -v 0.1.0 -n flowcleaner -s virtualenv -t rpm --virtualenv-pypi http://mirrors.aliyun.com/pypi/simple flowcleaner/
-s 指定源类型,-t 指定目标类型,-n 指定包名,flowcleaner/ 是项目目录。
会把整个 virtualenv 的目录打包到rpm里,virtualenv 里包含了依赖的包。

部署和运行

部署就是一个rpm包!跟标准的rpm包操作一样。

rpm 安装时,virtualenv 默认安装在 /usr/share/python 目录下。
执行/usr/share/python/flowcleaner/bin/python xxx.py来从 virtualenv 里运行。

python性能分析工具之pyflame

发表于 2017-04-15 | 分类于 python , pyflame , profile |

这篇文章python性能优化总结的比较好,可以先看这篇的介绍。

里面介绍了针对不同场景使用的工具,

对于python程序,比较出名的profile工具有三个:profile、cprofile和hotshot。
其中profile是纯python语言实现的,Cprofile将profile的部分实现native化,hotshot也是C语言实现,hotshot与Cprofile的区别在于:hotshot对目标代码的运行影响较小,代价是更多的后处理时间,而且hotshot已经停止维护了。需要注意的是,profile(Cprofile hotshot)只适合单线程的python程序。
对于多线程,可以使用yappi,yappi不仅支持多线程,还可以精确到CPU时间
对于协程(greenlet),可以使用greenletprofiler,基于yappi修改,用greenlet context hook住thread context。

profile的结果可以用gprof2dot生成函数调用开销图,进行分析。

这里介绍另外一个好用的工具pyflame。对单线程,多线程,协程支持都很好,使用简单,不用修改源码,直接profile运行的进程。效率较高,进程运行只会慢3倍左右,建议非线上环境使用。最最关键的是可以直接生成火焰图,具体介绍可以看github链接pyflame。
火焰图怎么看先google学习下,比gprof2dot的图更清晰明了。


pyflame的安装步骤在github上介绍的很详细,对centos7也是适用的。这里介绍下内核较老的centos6+python2.6下面的安装(是一个C API 缺失setns)。

阅读全文 »

install openvswitch 2.7.0 and ovn on centos 7

发表于 2017-03-11 | 分类于 openvswitch , ovn |

前言

主要参考此安装文档 http://docs.openvswitch.org/en/latest/intro/install/fedora/
不过此文档只适用于fedora。

rpm编译

在centos7上编译过程如下:

  1. 安装依赖包

    1
    yum install rpm-build autoconf automake libtool systemd-units openssl openssl-devel python-devel groff graphviz desktop-file-utils python-twisted python-zope-interface python-six procps-ng checkpolicy selinux-policy-devel libcap-ng libcap-ng-devel
  2. 安装额外的依赖包python3-devel。

    1
    2
    rpm -ivh http://li.nux.ro/download/nux/dextop/el7/x86_64/nux-dextop-release-0-5.el7.nux.noarch.rpm
    yum install python3-devel
  3. 如果要支持ovs-dpdk,

    • 安装dpdk 16.11,rpm包地址 https://cbs.centos.org/koji/buildinfo?buildID=15283
    • yum install numactl-devel libpcap-devel
  4. 初始化环境

    1
    2
    3
    4
    tar xf openvswitch-2.7.0.tar.gz
    cd openvswitch-2.7.0
    ./boot.sh
    ./configure --prefix=/usr --localstatedir=/var --sysconfdir=/etc
  5. 生成用户态rpm包,

    • 如果不需要dpdk,把–with dpdk去掉。同时,这里去掉了测试。

      1
      make rpm-fedora RPMBUILD_OPT="--with dpdk --without check"
  6. 生成内核态rpm包,

    1
    make rpm-fedora-kmod

生成的包在rpm/rpmbuild/RPMS下,包括ovn相关的。如果只想体验ovs,安装openvswitch-2.7.0-1.el7.centos.x86_64.rpm和openvswitch-kmod-2.7.0-1.el7.centos.x86_64.rpm即可。

rpm安装时的注意事项

  • 如果安装rpm时,提示没有依赖包python2-six/python2-twisted/python2-zope-interface,加参数--nodep跳过依赖(前面其实已经安装了python-six等)
  • openvswitch-ovn依赖firewalld-filesystem,通过yum install firewalld-filesystem安装。
123
faicker

faicker

13 日志
14 分类
26 标签
RSS
© 2017 faicker
由 Hexo 强力驱动

Hosted by Coding Pages