TripleO-Quickstart使用
有好几年没有写博客了,这次趁着周末有时间,花了一天的时间写了一篇。在公司做了三年的开发,之后转到运维做了将近一年的运维,然后最近又从运维转到了DevOps,终于脱离了苦逼的运维岁月,想想那些年背的锅,辛酸苦楚只能自己体会,这些年开发与运维的经历,真的是我人生宝贵的财富,也为我现在转向DevOps奠定了坚实的基础。转到DevOps之后,负责的第一个重要的事情,就是OpenStack的部署工具,说的大一点,就是要解决OpenStack的交付问题,之前公司没有经验,交付存在各种问题,尤其影响到后面的继续维护,而部署工具是交付的重要一环,因此公司经过多次争论,决定使用社区的TripleO,放弃之前自己开发的部署工具,因此我承担起了对TripleO的开发维护工作,今天介绍的就是TripleO中的一个工具:tripleo-quickstart。
介绍
TripleO-Quckstart是一个用来快速搭建TripleO测试环境的Ansible程序。在部署生产环境时,会用到instack-undercloud这个项目来部署undercloud,在该项目中有一个叫做instack-virt-setup的脚本,用来搭建测试tripleo用的虚拟环境,该脚本在Ocata版本将会被废弃,tripleo-quickstart就是用来取代它的,tripleo-quickstart通过一系列playbook,不仅可以用来搭建虚拟环境,还能在其上部署undercloud和overcloud,而且支持多种部署模式,部署完成之后,还能跑多种测试,检验部署结果,quickstart已经形成了一个完整的体系,而且使用方便,现在已经被社区用来跑TripleO的CI程序。
和tripleo-quickstart相关的还有一个叫做tripleo-quickstart-extras的项目,它是tripleo-quickstart功能的扩展,其实tripleo-quickstart本身只包含搭建虚拟测试环境的功能,包括环境检查,网络/存储/虚拟机的建立等等,而具体的搭建undercloud,overcloud的功能则是在tripleo-quickstart-extras中实现的,也包括测试验证,这些功能都被抽象成了ansible中的role。其实tripleo-quickstart-extras对tripleo-quickstart是没有依赖关系的,只要有环境,tripleo-quickstart-extras就用来部署undercloud/overcloud,不论是否是虚拟环境,因此在部署生产环境时也可以使用tripleo-quickstart-extras。其实本身tripleo的部署步骤就不复杂,tripleo-quickstart-extras只是将其中一些需要手动执行的命令编排了一下,让部署变得更加简单高效了。
TripleO-Quickstart默认定义很多的部署模式,主要有以下几种:
- minimal,只部署一台controller和一台compute节点
- ha,部署三台controller和一台compute节点,三台controller的HA使用pacemaker管理
- ha_big,部署三台controller和三台compute,三台controller的HA使用pacemaker管理
- ceph,支持部署Ceph的Storage节点
其实这些都是通过简单的配置文件来设置的,tripleo-quickstart底层已经进行了很好的抽象,上层只需要简单的定义就可以支持多种部署模式了。
TripeO-Quickstart-Extras中还包含了很多验证部署结果的playbook,对部署完的集群功能是否正常进行有效验证,目前实现的主要有下面几种:
- validate-simple,简单验证,通过执行一系列OpenStack命令,比如创建网络,建虚拟机,创建stack,来验证基本的功能是否OK
- validate-tempest,功能验证,通过对overcloud来跑tempest测试来进行API层面的全面验证
- validate-ha,验证HA功能,通过关停一些节点和服务来验证HA的功能
- validate-undercloud,通过重装undercloud或者是跑一些常用OpenStack命令来验证undercloud功能
TripleO-Quickstart使用方便,环境要求简单,可以用来搭建开发测试环境,并且适合新手快速上手TripleO和OpenStack。
解析
TripeleO-Quickstart是使用Ansible Playbook进行编排的,抽象出了一系列role,role中包含了各种具体的task,然后通过playbook对指定host进行编排,Ansible程序写的非常好,是一个很好的典范,这里对整个流程做下解析,方便加深对其的掌握,理解其原理。下图为执行quickstart过程中一些主要的步骤:
整个过程大体可以分为4个阶段,上图中分别用4种颜色标识:
- 第一个阶段,即浅红色部分,主要工作是清理上一次跑quickstart留下的环境,其中的non_root_user是在裸机上创建的一个用户,默认为stack,具有sudo权限,之后在裸机上执行的所有操作都是以这个用户的身份完成的。
- 第二个阶段,即浅黄色部分,是环境的准备阶段,因为是要在一台裸机上装虚拟机测试TripleO,所以要安装kvm,libvirt等包,而且要创建虚拟机使用的volume pool和libvirt network,下载镜像,然后定义undercloud和overcloud虚拟机,并且启动undercloud虚拟机等待下一个阶段使用。需要注意的是,这里仅仅下载了undercloud的镜像,因为undercloud镜像中已经包含了overcloud镜像,所以不需要额外下载。
- 第三个阶段,即浅绿色部分,是部署阶段,首先部署undercloud,然后部署overcloud,并且生成相应的rc文件,方便后面使用。因为本身tripleo本身就用了OpenStack中的很多组件,尤其是heat,已经进行了非常高度的抽象,因此部署步骤就很简单,quickstart将部署的命令都封装在了相应的脚本里,使用时,从ansible的模板生成,填上相应参数,传到undercloud的机器里执行。
- 第四个阶段,即浅蓝色部分,是验证阶段,验证OverCloud部署是否正常,验证HA是否正常,跑tempest进行功能验证等等。
这四个阶段,前两个阶段的步骤基本上都是在物理机上执行的,属于环境准备阶段,搭建起了TripleO的基本环境,这部分功能是在tripleo-quickstart中实现的,后两个阶段基本上都是在undercloud上执行的,是实际的部署验证阶段,这部分功能是在tripleo-quickstart-extras中实现的。
部署
TripleO-Quickstart的部署要求必须有一台物理服务器,在quickstart中称作VIRTHOST,因为要建多台虚拟机,所以配置至少是16G内存,32G更好,对网络没有特殊要求,能通公网就行。本次测试所使用的物理服务器为64G内存,CPU型号为Intel(R) Xeon(R) CPU E5-2620 v3 @ 2.40GHz,是在Softlayer上申请的一台物理机。Softlayer在2013年被IBM收购,被整合到IBM的Bluemix中,Softlayer除了提供多种云服务外,也是唯一一家提供裸机服务的公有云,使用体验非常不错。
除了有一台物理服务器外,还需要有一个客户端机器,能够ssh到物理服务器,操作系统需要是RedHat系的,在quickstart中称为localhost,需要将quickstart的程序放到localhost中,然后ssh到物理服务器上执行相应的ansible程序。
本次测试将会部署一个HA模式的TripleO环境,有3个控制节点和1个计算节点,控制节点同时充当网络节点,quickstart目前默认部署Newton版本OpenStack,没有部署Ceph,存储使用本地存储。执行过程如下:
1 | [root@localhost ~] export VIRTHOST='my_test_machine.example.com' |
在quickstart中,基本上为每一个task都通过tag做了分类,可以通过–tags来选择执行某些task,上面使用all即执行所有的task,也就是要搭建一个完整的环境。使用–config可以指定部署模式,这里选择的是ha模式,此外还有多种模式可以选择,该配置文件还定义了一些其他参数,比如虚拟机的配置,是否跑tempest等。因为在安装过程中要去装各种包,而且要下载undercloud的镜像,国外的网络环境较好,会遇到比较少的坑。
等待一杯咖啡的时间,一个具备HA的OpenStack虚拟环境就部署好了,包含三个控制节点,一个计算节点。
由于在OpenStack中最复杂最难懂的就是网络了,尤其是在虚拟环境中,网络拓扑要比物理环境还要复杂,而且是在一台物理服务器上安装一个具备完整功能的OpenStack环境,因此,下面重点介绍下用tripleo-quickstart部署出来的集群的网络拓扑,如下图:
在物理服务器上,通过libvirt network建立了两个linux bridge,分别为brext和brovc,brext用来桥接undercloud,brovc用来桥接overcloud节点,undercloud虚拟机有两个网卡,分别桥接在brext和brovc上。brext提供了访问公网的能力,brovc将多个overcloud和undercloud节点连接在一起。
Undercloud是一个单机版的OpenStack,安装了Nova, Neutron, Ironic, Heat等组件,Ironic通过使用pxe_ssh driver来管理overcloud节点,Neutron为overcloud节点提供网络环境,Heat则在TripleO中被用来编排,创建整个overcloud的stack。默认的TripleO会在undercloud中创建下面几个网络:
1 | [stack@undercloud ~]$ neutron net-list |
这几个网络都是Flat模式的网络,internal_api在overcloud中被用来作为内部API交互的网络,tenant是SDN网络,storage_mgmt是存储管理网络,ctlplane是管理网络,即ssh网络,external是外部网络,storage是存储网。
在上面的网络中,只有ctlplane的子网开启了DHCP功能,为overcloud的管理网络分配IP,因此在undercloud中有一个DHCP的namespace,通过veth tap桥接在br-int ovs网桥上。
external网络是用来开放API和面板的,跟internal_api对应,在overcloud中,API和面板分别绑定在了internal_api和external网络上,在undercloud的br-ctlplane ovs网桥上,创建了一个vlan10的port,并且在undercloud中加上了相应的路由信息,这样在undercloud中就可以直接通过这个网络访问overcloud中的API了:
1 | [stack@undercloud ~]$ ip r |
在overcloud中,通过在br-ex ovs网桥上绑定多个带tag的port,并且每个port分配了IP,来模拟多个网络,分别对应undercloud中创建的网络。在br-ex中的每个port都带着vlan tag,模拟交换机的access口,通过不同的vlan互相隔离。
控制节点和计算节点之间的SDN网络,即tenant网络,在上面图中使用黄色标注,即vlan50,通过vxlan建立隧道,使用vlan50上的ip作为对端IP。
其他就是标准的Neutron网络了。
附录
undercloud br-ctlplane流表
1
2
3
4
5[stack@undercloud ~]$ sudo ovs-ofctl dump-flows br-ctlplane
NXST_FLOW reply (xid=0x4):
cookie=0xa382b4ab161c4f5a, duration=287114.883s, table=0, n_packets=640, n_bytes=63449, idle_age=65534, hard_age=65534, priority=4,in_port=2,dl_vlan=1 actions=strip_vlan,NORMAL
cookie=0xa382b4ab161c4f5a, duration=287154.063s, table=0, n_packets=3, n_bytes=258, idle_age=65534, hard_age=65534, priority=2,in_port=2 actions=drop
cookie=0xa382b4ab161c4f5a, duration=287154.285s, table=0, n_packets=9441009, n_bytes=29995798300, idle_age=0, hard_age=65534, priority=0 actions=NORMALundercloud br-int流表
1
2
3
4
5
6
7[stack@undercloud ~]$ sudo ovs-ofctl dump-flows br-int
NXST_FLOW reply (xid=0x4):
cookie=0xbca7bd29346f9fa9, duration=287162.954s, table=0, n_packets=581299, n_bytes=31344498, idle_age=0, hard_age=65534, priority=3,in_port=1,vlan_tci=0x0000/0x1fff actions=mod_vlan_vid:1,NORMAL
cookie=0xbca7bd29346f9fa9, duration=287202.139s, table=0, n_packets=94718, n_bytes=7492743, idle_age=707, hard_age=65534, priority=2,in_port=1 actions=drop
cookie=0xbca7bd29346f9fa9, duration=287202.890s, table=0, n_packets=643, n_bytes=63707, idle_age=65534, hard_age=65534, priority=0 actions=NORMAL
cookie=0xbca7bd29346f9fa9, duration=287202.892s, table=23, n_packets=0, n_bytes=0, idle_age=65534, hard_age=65534, priority=0 actions=drop
cookie=0xbca7bd29346f9fa9, duration=287202.889s, table=24, n_packets=0, n_bytes=0, idle_age=65534, hard_age=65534, priority=0 actions=dropcontroll_0 br-tun流表
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18[root@overcloud-controller-1 ~]# ovs-ofctl dump-flows br-tun
NXST_FLOW reply (xid=0x4):
cookie=0x8513f3cebfb2fa84, duration=276881.519s, table=0, n_packets=583649, n_bytes=31994786, idle_age=0, hard_age=65534, priority=1,in_port=1 actions=resubmit(,2)
cookie=0x8513f3cebfb2fa84, duration=276869.341s, table=0, n_packets=9, n_bytes=670, idle_age=65534, hard_age=65534, priority=1,in_port=2 actions=resubmit(,4)
cookie=0x8513f3cebfb2fa84, duration=276869.338s, table=0, n_packets=4, n_bytes=280, idle_age=65534, hard_age=65534, priority=1,in_port=4 actions=resubmit(,4)
cookie=0x8513f3cebfb2fa84, duration=276869.335s, table=0, n_packets=40902, n_bytes=3189452, idle_age=3, hard_age=65534, priority=1,in_port=3 actions=resubmit(,4)
cookie=0x8513f3cebfb2fa84, duration=276881.518s, table=0, n_packets=0, n_bytes=0, idle_age=65534, hard_age=65534, priority=0 actions=drop
cookie=0x8513f3cebfb2fa84, duration=276881.516s, table=2, n_packets=40074, n_bytes=2719568, idle_age=3, hard_age=65534, priority=0,dl_dst=00:00:00:00:00:00/01:00:00:00:00:00 actions=resubmit(,20)
cookie=0x8513f3cebfb2fa84, duration=276881.515s, table=2, n_packets=543575, n_bytes=29275218, idle_age=0, hard_age=65534, priority=0,dl_dst=01:00:00:00:00:00/01:00:00:00:00:00 actions=resubmit(,22)
cookie=0x8513f3cebfb2fa84, duration=276881.514s, table=3, n_packets=0, n_bytes=0, idle_age=65534, hard_age=65534, priority=0 actions=drop
cookie=0x8513f3cebfb2fa84, duration=239847.949s, table=4, n_packets=40889, n_bytes=3188008, idle_age=3, hard_age=65534, priority=1,tun_id=0x5c actions=mod_vlan_vid:4,resubmit(,10)
cookie=0x8513f3cebfb2fa84, duration=276881.513s, table=4, n_packets=6, n_bytes=460, idle_age=65534, hard_age=65534, priority=0 actions=drop
cookie=0x8513f3cebfb2fa84, duration=276881.401s, table=6, n_packets=0, n_bytes=0, idle_age=65534, hard_age=65534, priority=0 actions=drop
cookie=0x8513f3cebfb2fa84, duration=276881.399s, table=10, n_packets=40909, n_bytes=3189942, idle_age=3, hard_age=65534, priority=1 actions=learn(table=20,hard_timeout=300,priority=1,cookie=0x8513f3cebfb2fa84,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=0x8513f3cebfb2fa84, duration=35533.393s, table=20, n_packets=17409, n_bytes=1251681, hard_timeout=300, idle_age=3, hard_age=2, priority=1,vlan_tci=0x0004/0x0fff,dl_dst=fa:16:3e:6b:d6:95 actions=load:0->NXM_OF_VLAN_TCI[],load:0x5c->NXM_NX_TUN_ID[],output:3
cookie=0x8513f3cebfb2fa84, duration=276881.398s, table=20, n_packets=53, n_bytes=3850, idle_age=65534, hard_age=65534, priority=0 actions=resubmit(,22)
cookie=0x8513f3cebfb2fa84, duration=239847.950s, table=22, n_packets=30, n_bytes=1316, idle_age=65534, hard_age=65534, priority=1,dl_vlan=4 actions=strip_vlan,load:0x5c->NXM_NX_TUN_ID[],output:3,output:4,output:2
cookie=0x8513f3cebfb2fa84, duration=276881.397s, table=22, n_packets=543596, n_bytes=29277612, idle_age=0, hard_age=65534, priority=0 actions=dropcontorll_0 br-int流表
1
2
3
4
5
6
7[root@overcloud-controller-1 ~]# ovs-ofctl dump-flows br-int
NXST_FLOW reply (xid=0x4):
cookie=0xbb0786bfe2f662c0, duration=265938.161s, table=0, n_packets=577089, n_bytes=31597998, idle_age=0, hard_age=65534, priority=3,in_port=1,vlan_tci=0x0000/0x1fff actions=mod_vlan_vid:3,NORMAL
cookie=0xbb0786bfe2f662c0, duration=276928.381s, table=0, n_packets=106165, n_bytes=7751821, idle_age=885, hard_age=65534, priority=2,in_port=1 actions=drop
cookie=0xbb0786bfe2f662c0, duration=276928.545s, table=0, n_packets=120741, n_bytes=9002846, idle_age=4, hard_age=65534, priority=0 actions=NORMAL
cookie=0xbb0786bfe2f662c0, duration=276928.547s, table=23, n_packets=0, n_bytes=0, idle_age=65534, hard_age=65534, priority=0 actions=drop
cookie=0xbb0786bfe2f662c0, duration=276928.544s, table=24, n_packets=0, n_bytes=0, idle_age=65534, hard_age=65534, priority=0 actions=dropcontroll_0 br-ex流表
1
2
3
4
5[root@overcloud-controller-1 ~]# ovs-ofctl dump-flows br-ex
NXST_FLOW reply (xid=0x4):
cookie=0xafa8d606ada81d76, duration=265988.920s, table=0, n_packets=39286, n_bytes=3071764, idle_age=5, hard_age=65534, priority=4,in_port=7,dl_vlan=3 actions=strip_vlan,NORMAL
cookie=0xafa8d606ada81d76, duration=276979.138s, table=0, n_packets=1265, n_bytes=66286, idle_age=21267, hard_age=65534, priority=2,in_port=7 actions=drop
cookie=0xafa8d606ada81d76, duration=276979.143s, table=0, n_packets=489065150, n_bytes=98446193899, idle_age=0, hard_age=65534, priority=0 actions=NORMALcompute_0 br-tun流表
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18[root@overcloud-novacompute-0 ~]# ovs-ofctl dump-flows br-tun
NXST_FLOW reply (xid=0x4):
cookie=0x85eb64bc3e0f6ac1, duration=277743.277s, table=0, n_packets=46825, n_bytes=3485282, idle_age=1, hard_age=65534, priority=1,in_port=1 actions=resubmit(,2)
cookie=0x85eb64bc3e0f6ac1, duration=277059.640s, table=0, n_packets=142, n_bytes=23696, idle_age=21319, hard_age=65534, priority=1,in_port=3 actions=resubmit(,4)
cookie=0x85eb64bc3e0f6ac1, duration=277023.273s, table=0, n_packets=40094, n_bytes=2719688, idle_age=1, hard_age=65534, priority=1,in_port=4 actions=resubmit(,4)
cookie=0x85eb64bc3e0f6ac1, duration=233719.067s, table=0, n_packets=62, n_bytes=5192, idle_age=65534, hard_age=65534, priority=1,in_port=2 actions=resubmit(,4)
cookie=0x85eb64bc3e0f6ac1, duration=277743.276s, table=0, n_packets=0, n_bytes=0, idle_age=65534, hard_age=65534, priority=0 actions=drop
cookie=0x85eb64bc3e0f6ac1, duration=277743.274s, table=2, n_packets=40113, n_bytes=3161002, idle_age=1, hard_age=65534, priority=0,dl_dst=00:00:00:00:00:00/01:00:00:00:00:00 actions=resubmit(,20)
cookie=0x85eb64bc3e0f6ac1, duration=277743.273s, table=2, n_packets=6712, n_bytes=324280, idle_age=65534, hard_age=65534, priority=0,dl_dst=01:00:00:00:00:00/01:00:00:00:00:00 actions=resubmit(,22)
cookie=0x85eb64bc3e0f6ac1, duration=277743.272s, table=3, n_packets=0, n_bytes=0, idle_age=65534, hard_age=65534, priority=0 actions=drop
cookie=0x85eb64bc3e0f6ac1, duration=197945.765s, table=4, n_packets=39836, n_bytes=2683592, idle_age=1, hard_age=65534, priority=1,tun_id=0x5c actions=mod_vlan_vid:6,resubmit(,10)
cookie=0x85eb64bc3e0f6ac1, duration=277743.271s, table=4, n_packets=15, n_bytes=1090, idle_age=65534, hard_age=65534, priority=0 actions=drop
cookie=0x85eb64bc3e0f6ac1, duration=277743.270s, table=6, n_packets=0, n_bytes=0, idle_age=65534, hard_age=65534, priority=0 actions=drop
cookie=0x85eb64bc3e0f6ac1, duration=277743.269s, table=10, n_packets=40283, n_bytes=2747486, idle_age=1, hard_age=65534, priority=1 actions=learn(table=20,hard_timeout=300,priority=1,cookie=0x85eb64bc3e0f6ac1,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=0x85eb64bc3e0f6ac1, duration=35687.268s, table=20, n_packets=17405, n_bytes=1695793, hard_timeout=300, idle_age=1, hard_age=1, priority=1,vlan_tci=0x0006/0x0fff,dl_dst=fa:16:3e:ea:0e:8f actions=load:0->NXM_OF_VLAN_TCI[],load:0x5c->NXM_NX_TUN_ID[],output:4
cookie=0x85eb64bc3e0f6ac1, duration=277743.268s, table=20, n_packets=112, n_bytes=11204, idle_age=21324, hard_age=65534, priority=0 actions=resubmit(,22)
cookie=0x85eb64bc3e0f6ac1, duration=197945.766s, table=22, n_packets=122, n_bytes=12480, idle_age=21324, hard_age=65534, priority=1,dl_vlan=6 actions=strip_vlan,load:0x5c->NXM_NX_TUN_ID[],output:4,output:3,output:2
cookie=0x85eb64bc3e0f6ac1, duration=277743.267s, table=22, n_packets=5678, n_bytes=276452, idle_age=65534, hard_age=65534, priority=0 actions=dropcompute_0 br-int流表
1
2
3
4
5
6
7
8
9
10
11
12[root@overcloud-novacompute-0 ~]# ovs-ofctl dump-flows br-int
NXST_FLOW reply (xid=0x4):
cookie=0xa765c80babd2ebcb, duration=197996.437s, table=0, n_packets=0, n_bytes=0, idle_age=65534, hard_age=65534, priority=10,icmp6,in_port=8,icmp_type=136 actions=resubmit(,24)
cookie=0xa765c80babd2ebcb, duration=197996.435s, table=0, n_packets=7167, n_bytes=301014, idle_age=8, hard_age=65534, priority=10,arp,in_port=8 actions=resubmit(,24)
cookie=0xa765c80babd2ebcb, duration=277794.862s, table=0, n_packets=648145, n_bytes=37251497, idle_age=1, hard_age=65534, priority=2,in_port=1 actions=drop
cookie=0xa765c80babd2ebcb, duration=197996.441s, table=0, n_packets=32551, n_bytes=2813463, idle_age=3, hard_age=65534, priority=9,in_port=8 actions=resubmit(,25)
cookie=0xa765c80babd2ebcb, duration=277794.916s, table=0, n_packets=40319, n_bytes=2750270, idle_age=3, hard_age=65534, priority=0 actions=NORMAL
cookie=0xa765c80babd2ebcb, duration=277794.918s, table=23, n_packets=0, n_bytes=0, idle_age=65534, hard_age=65534, priority=0 actions=drop
cookie=0xa765c80babd2ebcb, duration=197996.439s, table=24, n_packets=0, n_bytes=0, idle_age=65534, hard_age=65534, priority=2,icmp6,in_port=8,icmp_type=136,nd_target=fe80::f816:3eff:fe6b:d695 actions=NORMAL
cookie=0xa765c80babd2ebcb, duration=197996.436s, table=24, n_packets=7155, n_bytes=300510, idle_age=8, hard_age=65534, priority=2,arp,in_port=8,arp_spa=192.168.100.104 actions=resubmit(,25)
cookie=0xa765c80babd2ebcb, duration=277794.915s, table=24, n_packets=18, n_bytes=756, idle_age=21373, hard_age=65534, priority=0 actions=drop
cookie=0xa765c80babd2ebcb, duration=197996.443s, table=25, n_packets=39706, n_bytes=3113973, idle_age=3, hard_age=65534, priority=2,in_port=8,dl_src=fa:16:3e:6b:d6:95 actions=NORMALcompute_0 br-ex流表
1
2
3
4[root@overcloud-novacompute-0 ~]# ovs-ofctl dump-flows br-ex
NXST_FLOW reply (xid=0x4):
cookie=0xaff6936771f75f35, duration=277836.775s, table=0, n_packets=1199, n_bytes=62346, idle_age=21417, hard_age=65534, priority=2,in_port=5 actions=drop
cookie=0xaff6936771f75f35, duration=277836.795s, table=0, n_packets=6286307, n_bytes=3591027442, idle_age=0, hard_age=65534, priority=0 actions=NORMAL
TripleO-Quickstart使用
https://hackerain.me/2017/02/25/openstack/tripleo/quickstart.html