设为首页 收藏本站
查看: 1190|回复: 0

[经验分享] 【OpenStack】Quantum(Grizzly) quantum agent(OVS)工作流

[复制链接]

尚未签到

发表于 2015-10-11 07:07:28 | 显示全部楼层 |阅读模式
Quantum(Grizzly) quantum agent(OVS)工作流
  本博客欢迎转发,但请保留原作者信息

新浪微博:@孔令贤HW;

博客地址:http://blog.iyunv.com/lynn_kong

内容系本人学习、研究和总结,如有雷同,实属荣幸!




继上一篇《Quantum(Grizzly) L3 agent工作流》,本篇介绍采用OVS(gre)实现的quantum agent工作流,系统环境参见上一篇博客。
  因为agent主要的工作是操作vSwitch,所以本篇的命令居多,关于OpenvSwitch的命令使用,请参考官网。

一、系统对象
  以下是我的环境中的虚拟机和网络信息,这要关注一下port的id,因为后面的命令都是基于port的信息来做的。

root@openstack:~# nova list



+--------------------------------------+--------+--------+-------------------------------------+
| ID                                   |Name   | Status | Networks                            |
+--------------------------------------+--------+--------+-------------------------------------+
| 50ab650a-289c-4b84-b9f6-9e6c93516a4b | cirros | ACTIVE | demo_net1=10.1.1.13,182.168.61.250 |
+--------------------------------------+--------+--------+-------------------------------------+

root@openstack:~# quantum net-list

+--------------------------------------+---------------+------------------------------------------------------+
| id                                   |name          | subnets                                              |
+--------------------------------------+---------------+------------------------------------------------------+
| c4d8b48b-6ff7-43b6-a203-8f1192a16f07 | demo_net1     | 1e18074b-2ad1-4306-a4f7-c39e6762295610.1.1.0/24     |
| e7bb2f41-4f2a-4dbf-a701-7630cfd72de5 | external_net1 |3d6037f5-74e9-4f9f-9c07-3cd8b7b69a46 182.168.61.0/24 |
+--------------------------------------+---------------+------------------------------------------------------+

root@openstack:~# quantum port-list

+--------------------------------------+------+-------------------+---------------------------------------------------------------------------------------+
| id                                   |name | mac_address       | fixed_ips                                                                            |
+--------------------------------------+------+-------------------+---------------------------------------------------------------------------------------+
| 0e2dfa90-d3c8-4938-b35f-e85ed71d0270 |     | fa:16:3e:2a:6e:1c | {"subnet_id":"1e18074b-2ad1-4306-a4f7-c39e67622956", "ip_address":"10.1.1.1"}       |
| 1e6720f1-8c3f-46c5-8313-72b0753037f8 |     | fa:16:3e:30:de:88 | {"subnet_id":"3d6037f5-74e9-4f9f-9c07-3cd8b7b69a46", "ip_address":"182.168.61.249"} |
| 3f1f785c-7015-46c4-95ba-9efd6cd323d0 |     | fa:16:3e:b6:fc:21 | {"subnet_id":"1e18074b-2ad1-4306-a4f7-c39e67622956", "ip_address":"10.1.1.12"}      |
| 45772766-6c9e-431c-9c04-0365d91b6ae4 |     | fa:16:3e:73:a2:59 | {"subnet_id":"3d6037f5-74e9-4f9f-9c07-3cd8b7b69a46", "ip_address":"182.168.61.250"} |
| 99f91280-a060-442e-90b0-d8324e50efc8 |     | fa:16:3e:02:dd:79 | {"subnet_id":"1e18074b-2ad1-4306-a4f7-c39e67622956", "ip_address":"10.1.1.13"}      |
+--------------------------------------+------+-------------------+---------------------------------------------------------------------------------------+

root@openstack:~# quantum router-list+--------------------------------------+--------------+--------------------------------------------------------+
| id                                   |name         | external_gateway_info                                  |
+--------------------------------------+--------------+--------------------------------------------------------+
| 0a23bd10-932e-435a-a673-0e508f0d56b9 | demo_router1 |{"network_id": "e7bb2f41-4f2a-4dbf-a701-7630cfd72de5"} |
+--------------------------------------+--------------+--------------------------------------------------------+


  

二、ovs agent初始化
  与agent工作相关的两个vSwitch分别是br-int和br-tun,所以初始化主要是围绕这两个设备进行。



先删除br-int上的patch-tun端口,同时删除所有的flow:

ovs-vsctl --timeout=2 -- --if-exists del-port br-int patch-tun
ovs-ofctl del-flows br-int
ovs-ofctl add-flow br-int hard_timeout=0,idle_timeout=0,priority=1,actions=normal

然后是对br-tun的处理以及关联br-int和br-tun:ovs-vsctl --timeout=2 -- --if-exists del-br br-tun
ovs-vsctl --timeout=2 add-br br-tun
ovs-vsctl --timeout=2 add-port br-int patch-tun
ovs-vsctl --timeout=2 set Interface patch-tun type=patch
ovs-vsctl --timeout=2 set Interface patch-tun options:peer=patch-int
root@openstack:~# ovs-vsctl --timeout=2 get Interface patch-tun ofport
6
ovs-vsctl --timeout=2 add-port br-tun patch-int
ovs-vsctl --timeout=2 set Interface patch-int type=patch
ovs-vsctl --timeout=2 set Interface patch-int options:peer=patch-tun
root@openstack:~# ovs-vsctl --timeout=2 get Interface patch-int ofport
1
ovs-ofctl del-flows br-tun
ovs-ofctl add-flow br-tun hard_timeout=0,idle_timeout=0,priority=1,actions=drop
  

三、ovs agent循环任务





3.1. tunnel同步
  因为我采用的是gre模式,所以在循环任务执行前,会向plugin注册本机tunnel,同时会收到plugin推送来的系统中所有tunnel的信息,对每一个tunnel(本地tunnel除外)有如下操作(因为我的系统中只有一个节点,所以不涉及下面的命令,这里列出是为了说明gre类型agent的机制):



ovs-vsctl --timeout=2 add-port br-tun <gre-tunnel_id>
ovs-vsctl --timeout=2 set Interface <gre-tunnel_id> type=gre
ovs-vsctl --timeout=2 set Interface <gre-tunnel_id> options:remote_ip=<remote_ip>
ovs-vsctl --timeout=2 set Interface <gre-tunnel_id> options:in_key=flow
ovs-vsctl --timeout=2 set Interface <gre-tunnel_id> options:out_key=flow这样,系统中的不同节点之间就能通过gre通道互通。  

3.2. 获取br-int上的设备
  循环任务开始,对于刚启动的agent来说,需要处理br-int上的每一个端口,所以需要先列出br-int上的端口,以下是我的环境中的命令及输出:

root@openstack:~# ovs-vsctl --timeout=2 list-ports br-int

patch-tun

qr-0e2dfa90-d3

qvo99f91280-a0

tap3f1f785c-70

上面的patch-tun是agent初始化时在br-int上创建;qr-0e2dfa90-d3是虚拟机的网关设备;qvo99f91280-a0是与虚拟机网卡相连的设备;tap3f1f785c-70是dhcp设备;



查询每一个设备的信息:



root@openstack:~# ovs-vsctl --timeout=2 get Interface patch-tun external_ids
{}
root@openstack:~# ovs-vsctl --timeout=2 get Interface qr-0e2dfa90-d3 external_ids
{attached-mac=&quot;fa:16:3e:2a:6e:1c&quot;,iface-id=&quot;0e2dfa90-d3c8-4938-b35f-e85ed71d0270&quot;, iface-status=active}
root@openstack:~# ovs-vsctl --timeout=2 get Interface qvo99f91280-a0 external_ids
{attached-mac=&quot;fa:16:3e:02:dd:79&quot;,iface-id=&quot;99f91280-a060-442e-90b0-d8324e50efc8&quot;, iface-status=active,vm-uuid=&quot;50ab650a-289c-4b84-b9f6-9e6c93516a4b&quot;}
root@openstack:~# ovs-vsctl --timeout=2 get Interface tap3f1f785c-70 external_ids
{attached-mac=&quot;fa:16:3e:b6:fc:21&quot;,iface-id=&quot;3f1f785c-7015-46c4-95ba-9efd6cd323d0&quot;, iface-status=active}注意,上面iface-id中记录了设备对应的port的id。  

3.3. 设置安全组规则
  本篇博客暂不关注安全组,如对安全组有兴趣,请继续关注我后续的博客,故此步略去。

3.4. 循环处理port
  1. 对每一个port循环(由上述iface-id得到port-id),这里先处理第一个port,即port-id=3f1f785c-7015-46c4-95ba-9efd6cd323d0,查询该设备在br-int上的属性:

root@openstack:~# ovs-vsctl --timeout=2 -- --columns=external_ids,name,ofport find Interface external_ids:iface-id=&quot;3f1f785c-7015-46c4-95ba-9efd6cd323d0&quot;

external_ids        :{attached-mac=&quot;fa:16:3e:b6:fc:21&quot;,iface-id=&quot;3f1f785c-7015-46c4-95ba-9efd6cd323d0&quot;, iface-status=active}

name                : &quot;tap3f1f785c-70&quot;

ofport              : 2



2. 对于port所属的network,需要做下面的操作(若已处理过该network,忽略此步):



ovs-ofctl add-flow br-tun hard_timeout=0,idle_timeout=0,priority=4,in_port=1,dl_vlan=1,actions=set_tunnel:2,normal
解释:
in_port:patch-int端口的ofport号,参见上面的命令输出
dl_vlan:系统分配的内部vlan号,用以识别不同的逻辑network
set_tunnel:2:这里的2指plugin分配的tunnel号
ovs-ofctl add-flow br-tun hard_timeout=0,idle_timeout=0,priority=3,dl_dst=01:00:00:00:00:00/01:00:00:00:00:00,tun_id=2,actions=mod_vlan_vid:1,output:1
其中的2,1,1分别是plugin分配的tunnel号、系统分配的内部vlan号、patch-int端口的ofport号3. 对port的设备执行下面命令

ovs-ofctl add-flow br-tun hard_timeout=0,idle_timeout=0,priority=3,dl_dst=fa:16:3e:b6:fc:21,tun_id=2,actions=mod_vlan_vid:1,normal

ovs-vsctl --timeout=2 set Port tap3f1f785c-70 tag=1

解释:

tag=1:系统分配的内部vlan号



ovs-ofctl del-flows br-int in_port=2

解释:

in_port=2:tap3f1f785c-70的ofport号



4. 循环执行上述的步骤1和步骤2,处理其他port

root@openstack:~# ovs-vsctl --timeout=2 -- --columns=external_ids,name,ofport find Interface external_ids:iface-id=&quot;99f91280-a060-442e-90b0-d8324e50efc8&quot;
external_ids        :{attached-mac=&quot;fa:16:3e:02:dd:79&quot;, iface-id=&quot;99f91280-a060-442e-90b0-d8324e50efc8&quot;,iface-status=active, vm-uuid=&quot;50ab650a-289c-4b84-b9f6-9e6c93516a4b&quot;}
name                :&quot;qvo99f91280-a0&quot;
ofport              : 5
ovs-ofctl add-flow br-tun hard_timeout=0,idle_timeout=0,priority=3,dl_dst=fa:16:3e:02:dd:79,tun_id=2,actions=mod_vlan_vid:1,normal
ovs-vsctl --timeout=2 set Port qvo99f91280-a0 tag=1
ovs-ofctl del-flows br-int in_port=5
root@openstack:~# ovs-vsctl --timeout=2 -- --columns=external_ids,name,ofport find Interface external_ids:iface-id=&quot;0e2dfa90-d3c8-4938-b35f-e85ed71d0270&quot;
external_ids        :{attached-mac=&quot;fa:16:3e:2a:6e:1c&quot;,iface-id=&quot;0e2dfa90-d3c8-4938-b35f-e85ed71d0270&quot;, iface-status=active}
name                :&quot;qr-0e2dfa90-d3&quot;
ofport              : 1
ovs-ofctl add-flow br-tun hard_timeout=0,idle_timeout=0,priority=3,dl_dst=fa:16:3e:2a:6e:1c,tun_id=2,actions=mod_vlan_vid:1,normal
ovs-vsctl --timeout=2 set Port qr-0e2dfa90-d3 tag=1
ovs-ofctl del-flows br-int in_port=1
  

四、vlan模型图(quntum agent&#43;dhcp agent&#43;l3 agent)
  上面的命令是使用ovs gre模式的命令,而如果使用ovs vlan模式,命令类&#20284;,只是操作的不再是br-tun,而是每一个network对应的物理br,下面的几张图应该能清晰的说明问题。



逻辑模型:

DSC0000.png



物理节点上quantum agent的实现:

DSC0001.png



物理节点上dhcp agent和l3 agent的实现,也可以参考上一篇博客:

DSC0002.png



如何实现namespace隔离:

DSC0003.png



版权声明:本文为博主原创文章,未经博主允许不得转载。

运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-125208-1-1.html 上篇帖子: 【OpenStack】Cinder(G版)中的volume type 下篇帖子: 【OpenStack】如何向社区贡献代码
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

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