热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

搭建OpenStackquantum开发环境

上篇中讲了如何建立openstack的最小开发环境(仅运行keystone,nova,glance,horion),今天看看如何运行quantum.quantum是什么呢?我们知道,一般虚拟网络有三种拓扑,一种是NET方式(即虚机里是内网地址,虚机间可以互访,虚机可以访问外面,但外面不可以访


         上篇中讲了如何建立openstack的最小开发环境(仅运行keystone, nova, glance, horion),今天看看如何运行quantum. quantum是什么呢?我们知道,一般虚拟网络有三种拓扑,一种是NET方式(即虚机里是内网地址,虚机间可以互访,虚机可以访问外面,但外面不可以访问虚机,当然宿主机除外),另一种是Bridge方式,这是linux内核自带的一种方式(虚机可以访问外面,外面也可以访问虚机),最后一种就是VLAN,通过标签虚拟网络可以分为更多的相互隔离的小子网,一般用openVPN就可以很容易实现。

         扯远了,quantum究竟是什么呢?上面三种网络拓扑是死的,quantum可以通过编程动态的调整拓扑,还可以动态定义网络QoS,并且基于一种openflow的标准协议,可以独立为一个单独的模块用在其他地方。

         open vSwitch又是什么呢?它是一种软件实现的交换机,用于给一台物理机上的虚机提供虚拟网络服务,它的实现原理蛮简单,就是TUN,TUN其实就是linux内核提供的用于两个进程间交换数据用的。在物理机里的两台虚机实际上就两个进程。

         先说概念, 如下图,虚机里面的虚拟网卡我们一般叫VIF, 它要和Quantum中的virtual port做映射。

        

           具体在quantum中通过API建立网络的过程如下:

1)服务(eg,nova)经它们的tenantAPIs暴露virtualinterface(VIF),表示这个服务里的设备都可以使用这个虚拟网络

nova.foo.com//network//eth0

2)创建virtualnetwork,返回UUID

quantum.foo.com//network/

3)创建virtualport,

quantum.foo.com/network//port/

4)virtualinterfacemapping to virtual port

setquantum.foo.com//network//port//attach

nova.foo.com//server//eth0

           我们再来看一起一般如果用quantum的话,它的结构是什么样子,如下图,

      

          Quatum首先有一个框架,然后有一些插件,例如vSwitch有它的插件,其他的openflow的交换机需要开发它们自己的插件。看了上在主张图,就应该知道建这个环境的大致步骤:

           1) QuantumManager, 通用框架

           2)要配置使用vswitch插件,quantum.plugins.openvswitch.ovs_quantum_plugin.OVSQuantumPlugin

           3)在计算结点得配置VIF

           不说了,从下面的安装步骤中会找到对应的等价物的。

5.2.1 安装vSwitch

cd/bak/openstack

wgethttp://openvswitch.org/releases/openvswitch-1.4.0.tar.gz

1)./configure--prefix=/usr--localstatedir=/var --with-linux=/lib/modules/`uname -r`/build

make& make install

2)加载模块用:/sbin/insmod./datapath/linux/openvswitch_mod.ko

dmesg|tail命令看日志

/sbin/rmmod./datapath/linux/openvswitch_mod.ko

/sbin/modinfoopenvswitch_mod

/sbin/modinfo/lib/modules/`uname -r`/kernel/net/bridge/bridge.ko

3)初始化数据库配置

mkdir-p /usr/local/etc/openvswitch

ovsdb-toolcreate /usr/local/etc/openvswitch/conf.db vswitchd/vswitch.ovsschema

4)启动数据库

mkdir-p /var/run/openvswitch

"en-US">ovsdb-server "en-US">  "en-US">--remote=punix:/var/run/openvswitch/db.sock --remote=db:Open_vSwitch,manager_options --pidfile --detach
"en-US">5)初始化数据库

ovs-vsctl --no-wait init

6)  "zh-CN">启动vSwitch daemon

ovs-vswitchd --pidfile --detach

7)建立接接

ovs-vsctl add-br br0

ovs-vsctl add-port br0 eth0

ovs-vsctl add-port br0 vif1.0

在启动vswitch之后,用linux内核的桥接命令是一样的效果

brctl addbr br0

brctl addif br0 eth0

brctl show

http://openvswitch.org/cgi-bin/gitweb.cgi?p=openvswitch;a=blob_plain;f=INSTALL.bridge;hb=HEAD

8)open vswitch与kvm

vi /etc/ovs-ifup

#!/bin/sh
switch='br0'
/sbin/ifconfig $1 0.0.0.0 up
ovs-vsctl add-port ${switch} $1

vi /etc/ovs-ifdown

#!/bin/sh
switch='br0'
/sbin/ifconfig $1 0.0.0.0 down
ovs-vsctl del-port ${switch} $1

创建KVM客户机

kvm -m 512 -netnic,maddr=00:11:22:EE:EE:EE -net \

tap,script=/etc/ovs-ifup,downscript=/etc/ovs-ifdown-drive \

file=/path/to/disk-image,boot=on

8) "zh-CN">举例:

Goal:

Isolate VMs using VLANs on the DataNetwork.
VLAN 1: VM1,VM3
VLAN 2: VM2,VM4

Configuration:

On Host1:

ovs-vsctladd-brbr0

ovs-vsctladd-portbr0eth0

ovs-vsctladd-portbr0tap0tag=1

ovs-vsctladd-portbr0tap1tag=2

On host2

ovs-vsctladd-brbr0

ovs-vsctladd-portbr0eth0

ovs-vsctladd-portbr0tap0tag=1

ovs-vsctladd-portbr0tap1tag=2

如果是限流量的,可以:

http://openvswitch.org/support/config-cookbooks/qos-rate-limiting/

ovs-vsctlsetInterfacetap0ingress_policing_rate=1000

ovs-vsctl set Interface tap0ingress_policing_burst=100

然后可以用Netperf工具测试,Netperf是一种网络性能的测量工具,以C/S模式工具,Server端叫netserver,客户端叫netperf。在linux系统中,可以直接运行可执行程序来启动netserver,也可以让inetd或xinetd 来自动启动netserver。当netserver在server 端启动以后,就可以在client端运行netperf 来测试网络的性能。

netperf -H 10.0.0.100

5.5.2 配置quantum

1) 安装依赖,我们的目的是在eclipse中可以调试quantum工程,但对于quantum-client工程要安装它们。

cd/bak/openstack/quantum

pip-python install-r tools/pip-requires

pip-python install-r tools/test-requires

cd /bak/openstack/python-quantumclient

pip-python install -r tools/pip-requires

pip-python install -r tools/test-requires

python setup.py develop

2集成后对horizon配置的改动:

ln -s/bak/openstack/python-quantumclient/quantum/bak/openstack/horizon/openstack_dashboard/quantum

sed -e "s,QUANTUM_ENABLED =False,QUANTUM_ENABLED = True,g" -i/bak/openstack/horizon/openstack_dashboard/local/local_settings.py

在/etc/nova/nova.conf中添加配置:

--network_manager=nova.network.quantum.manager.QuantumManager

--quantum_connection_host=localhost

--quantum_connection_port=9696

--libvirt_vif_type=ethernet

--libvirt_ovs_bridge=br-int

--libvirt_vif_driver=nova.virt.libvirt.vif.LibvirtOpenVswitchDriver

--linuxnet_interface_driver=nova.network.linux_net.LinuxOVSInterfaceDriver

--quantum_use_dhcp

这样配置之后,之前的?flat_network_bridge=br100 就失效了,改用br-int

if nova-network has DHCP enabled or isacting as the L3 gateway.

3)在keystone/etc/default_catalog.templates中添加:

catalog.RegionOne.network.publicURL =http://localhost:9696/

catalog.RegionOne.network.adminURL =http://localhost:9696/

catalog.RegionOne.network.internalURL =http://localhost:9696/

catalog.RegionOne.network.name =Quantum Service

并确保在keystone/etc/keystone.conf文件中使用keystone/etc/default_catalog.templates

[catalog]

# dynamic, sql-based backend (supportsAPI/CLI-based management commands)

#driver =keystone.catalog.backends.sql.Catalog

# static, file-based backend (does*NOT* support any management commands)

driver =keystone.catalog.backends.templated.TemplatedCatalog

template_file =./etc/default_catalog.templates

5)数据库

DROP DATABASE IF EXISTS ovs_quantum;

CREATE DATABASE IF NOT EXISTSovs_quantum;

vi./etc/quantum/plugins/openvswitch/ovs_quantum_plugin.ini

sql_cOnnection= mysql://root:password@localhost:3306/ovs_quantum

6)配置

vi./etc/quantum.conf

#auth_admin_user= admin

#auth_admin_password= password

auth_admin_token= ADMIN

6)启动quantum-server

vi/bak/openstack/quantum/etc/plugins.ini

provider= quantum.plugins.openvswitch.ovs_quantum_plugin.OVSQuantumPlugin

python./bin/quantum-server ./etc/quantum.conf

验证quantum-client与quantum能通信:

quantumcreate_net quantum-fake-tenant net1

list_nets[tenant-id]

rename_net [tenant-id] [net-id][new-name]

show_port [tenant-id] [net-id][port-id]

unplug_iface [tenant-id] [net-id][port-id]

plug_iface [tenant-id] [net-id][port-id] [iface-id]

show_net [tenant-id] [net-id]

delete_port [tenant-id] [net-id][port-id]

delete_net [tenant-id] [net-id]

set_port_state [tenant-id] [net-id][port-id] [new_state]

create_net [tenant-id] [net-name]

create_port [tenant-id] [net-id]

list_ports [tenant-id] [net-id]

7)在computenode需要安装quantumagent

sudo ovs-vsctl --no-wait -- --if-existsdel-br br-int

sudo ovs-vsctl --no-wait add-br br-int

sudo ovs-vsctl --no-waitbr-set-external-id br-int bridge-id br-int

上述的配置对应/etc/nova/nova.conf的:

--libvirt_ovs_bridge=br-int

及./etc/quantum/plugins/openvswitch/ovs_quantum_plugin.ini

integration-bridge= br-int

python/bak/openstack/quantum/quantum/plugins/openvswitch/agent/ovs_quantum_agent.py/bak/openstack/quantum/etc/quantum/plugins/openvswitch/ovs_quantum_plugin.ini-v8用

8)quantum manager创建网络

nova-manage network delete --uuid32b09c60-ac6f-45e4-8728-5b6dbea13af5

nova-manage network list

nova-manage network create--label=public --fixed_range_v4=192.168.99.0/24 --priority=0

nova-manage network create--label=admin-private --fixed_range_v4=10.10.10.0/24--project_id=986a58e77d8c49da9b4ff0dd1e823f0f --priority=1--gateway=10.10.10.1

验证,下列命令出来一定要有东西才算成功,如果没有的话,检查你的/etc/nova/nova.conf文件的--network_manager=nova.network.quantum.manager.QuantumManager一句是否生效,你最好将这些配置放到最下面,不然会被其他同名的--network_manager覆盖掉了。

quantum list_nets default

9)通过—nicnet-id参数启动实例

./bin/glance -f index

novaboot--image5213ac41-a588-419f-9b50-c86217433df9 --flavor 1 --nicnet-id=adc806ec-a13b-4f75-bbc9-945d71114fa5 test4

/bak/openstack/python-novaclient/novaclient/shell.py--os_username=admin --os_password=password --os_tenant_name=admin--os_auth_url=http://localhost:35357/v2.0 --debug boot --flavor 1--image 5213ac41-a588-419f-9b50-c86217433df9 --nicnet-id=adc806ec-a13b-4f75-bbc9-945d71114fa5 test5


推荐阅读
  • 本题来自WC2014,题目编号为BZOJ3435、洛谷P3920和UOJ55。该问题描述了一棵不断生长的带权树及其节点上小精灵之间的友谊关系,要求实时计算每次新增节点后树上所有可能的朋友对数。 ... [详细]
  • 嵌入式开发环境搭建与文件传输指南
    本文详细介绍了如何为嵌入式应用开发搭建必要的软硬件环境,并提供了通过串口和网线两种方式将文件传输到开发板的具体步骤。适合Linux开发初学者参考。 ... [详细]
  • 简化报表生成:EasyReport工具的全面解析
    本文详细介绍了EasyReport,一个易于使用的开源Web报表工具。该工具支持Hadoop、HBase及多种关系型数据库,能够将SQL查询结果转换为HTML表格,并提供Excel导出、图表显示和表头冻结等功能。 ... [详细]
  • 离线安装Grafana Cloudera Manager插件并监控CDH集群
    本文详细介绍如何离线安装Cloudera Manager (CM) 插件,并通过Grafana监控CDH集群的健康状况和资源使用情况。该插件利用CM提供的API接口进行数据获取和展示。 ... [详细]
  • Python 工具推荐 | PyHubWeekly 第二十一期:提升命令行体验的五大工具
    本期 PyHubWeekly 为大家精选了 GitHub 上五个优秀的 Python 工具,涵盖金融数据可视化、终端美化、国际化支持、图像增强和远程 Shell 环境配置。欢迎关注并参与项目。 ... [详细]
  • 版本控制工具——Git常用操作(下)
    本文由云+社区发表作者:工程师小熊摘要:上一集我们一起入门学习了git的基本概念和git常用的操作,包括提交和同步代码、使用分支、出现代码冲突的解决办法、紧急保存现场和恢复 ... [详细]
  • 本文详细介绍了 Python 中的条件语句和循环结构。主要内容包括:1. 分支语句(if...elif...else);2. 循环语句(for, while 及嵌套循环);3. 控制循环的语句(break, continue, else)。通过具体示例,帮助读者更好地理解和应用这些语句。 ... [详细]
  • 在寻找轻量级Ruby Web框架的过程中,您可能会遇到Sinatra和Ramaze。两者都以简洁、轻便著称,但它们之间存在一些关键区别。本文将探讨这些差异,并提供详细的分析,帮助您做出最佳选择。 ... [详细]
  • CentOS 7.6环境下Prometheus与Grafana的集成部署指南
    本文旨在提供一套详细的步骤,指导读者如何在CentOS 7.6操作系统上成功安装和配置Prometheus 2.17.1及Grafana 6.7.2-1,实现高效的数据监控与可视化。 ... [详细]
  • 基于Java的学生宿舍管理系统设计
    本论文探讨了如何利用Java技术设计和实现一个高效的学生宿舍管理系统。该系统旨在提高宿舍管理的效率,减少人为错误,同时增强用户体验。通过集成用户认证、数据管理和查询功能,系统能够满足学校宿舍管理的多样化需求。 ... [详细]
  • 本文探讨了为何相同的HTTP请求在两台不同操作系统(Windows与Ubuntu)的机器上会分别返回200 OK和429 Too Many Requests的状态码。我们将分析代码、环境差异及可能的影响因素。 ... [详细]
  • 本文将探讨2015年RCTF竞赛中的一道PWN题目——shaxian,重点分析其利用Fastbin和堆溢出的技巧。通过详细解析代码流程和漏洞利用过程,帮助读者理解此类题目的破解方法。 ... [详细]
  • CSS高级技巧:动态高亮当前页面导航
    本文介绍了如何使用CSS实现网站导航栏中当前页面的高亮显示,提升用户体验。通过为每个页面的body元素添加特定ID,并结合导航项的类名,可以轻松实现这一功能。 ... [详细]
  • 本文详细介绍了钩子(hook)的概念、原理及其在编程中的实际应用。通过对比回调函数和注册函数,解释了钩子的工作机制,并提供了具体的Python示例代码,帮助读者更好地理解和掌握这一重要编程工具。 ... [详细]
  • Flowable 6.6.0 表单引擎在Web应用中的集成与使用
    本文档提供了Flowable 6.6.0版本中表单引擎在Web应用程序中的配置和使用指南,包括表单引擎的初始化、配置以及在Web环境下的具体实现方法。 ... [详细]
author-avatar
亮仔
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有