首页 文章 精选 留言 我的

精选列表

搜索[openstack],共3159篇文章
优秀的个人博客,低调大师

Openstack_通用模块_Oslo_vmware 创建 vSS PortGroup

目录 目录 vSS vSSPG vSphere SDK 中相关的网络对象 创建 vSS PortGroup vSS & vSSPG vSS(Standard vSwitch 标准交换机) 为在同一 ESXi/ESX 或不同 ESXi/ESX 上 VirtualMachine 之间的连接, 也可以让 VirtualMachine 连接到外部网络. vSSPG(Standard vSwitch PortGroup 标准交换机端口组) 是 vSphere 的基本网络对象模型, VirtualMachine 会通过一个 PortGroup 来访问网络. 使用 oslo.vmware 模块结合 vSphere API 来创建 vSSPG 是一个相对综合的调用过程, 在实现的过程中能让我们理解 vSphere SDK 定义的相关概念模型, 以及熟悉 VMware vSphere API Reference Docs. vSphere SDK 中相关的网络对象 vSphere Web Services SDK 包括下列对象和方法来管理网络配置: HostNetworkSystem(Managed Object): 代表了主机的网路配置, 拥有检索和改变网络配置的方法. 所以我们能够使用 HostNetworkSystem MO 对象来访问和控制 ESX/ESXi 的网络概念模型. HostNetworkConfig(Data Object): 用于规划 ESXi Host 详细的网络配置. 创建 vSS PortGroup 首先我们已经知道创建标准交换机端口组需要使用 HostNetowrkSystem MO 的 AddPortGroup 方法, 所以调用该方法的前提就是能够获取到HostNetowrkSystem MO. 但遗憾的是我们无法通过 oslo.vmware 模块提供的 get_objects invoke_api 来直接获取, 这就需要我们费些心思去找到其上级且可使用 get_objects invoke_api 来获取的 MO. NOTE: 下述多数截图出自于 VMware vSphere API Reference Docs. 从下图可知 HostNetworkSystem MO 的上级 Property 是 HostConfigManager, 那么我们首先进入到 HostConfigManager 的 Docs. 然后从下图可知 HostConfigManager 是一个 Data object, 我们仍无法通过 get_object invoke_api 的方式来获取这个对象, 所以继续进入 HostConfigManager 对象的上级 Property. 直到现在我们看到了非常熟悉的 HostSystem MO, 这是一个非常常用的 MO, 并且支持 get_object invoke_api 的获取方式, 所以从 HostSystem 开始, 我们就能够其属性, 直到得到 HostNetowrkSystem MO 为止. Step 1: 连接到 vCenter 或 ESXi/ESX from oslo_vmware import api from oslo_vmware import vim_util # Create the vmware session session = api.VMwareAPISession( '200.21.102.7', 'root', 'vmware', 1, 0.1) Step 2: 获取 HostSystem MO hosts = session.invoke_api( vim_util, 'get_objects', session.vim, 'HostSystem', 100) # 我们随意选取一个 ESXi Host, 并且打印其 Object host_obj = hosts.objects[0].obj In [17]: hosts.objects[0].obj Out[17]: (obj){ value = "host-10" _type = "HostSystem" } Step 3: 从下图可以看出 HostSystem 的 Properties configManager 就是 HostConfigManager 对象, HostConfigManager 的 Properties networkSystem 就是 HostNetworkSystem 对象. (HostSystem ==> HostConfigManager) (HostConfigManager ==> HostNetworkSystem) # 获取 HostNetworkSystem MO, 并打印其 Value host_network_system_val = session.invoke_api( vim_util, 'get_object_properties_dict', session.vim, host_obj, 'configManager.networkSystem') In [24]: host_network_system_val Out[24]: {configManager.networkSystem: (val){ value = "networkSystem-10" _type = "HostNetworkSystem" }} Step 4: 在得到了 host_network_system_val 对象之后, 我们就能够通过 session.invoke_api 来调用该对象的 AddPortGroup 方法了. 但仍有一个前提, 就是我们需要为 AddPortGroup 准备好需要传入的实参 portgrp(HostPortGroupSpec). 再如下图, 我们得知 HostPortGroupSpec 是一个 Data Object, 所以我们能够通过 session.vim.client.factory.create 方法来获取该对象的数据结构. # 获取 HostPortGroupSpec 对象的数据结构, 并打印 client_factory = session.vim.client.factory vswitch_port_group_spec = client_factory.create('ns0:HostPortGroupSpec') In [26]: vswitch_port_group_spec Out[26]: (HostPortGroupSpec){ dynamicType = None dynamicProperty[] = <empty> name = None vlanId = None vswitchName = None policy = (HostNetworkPolicy){ dynamicType = None dynamicProperty[] = <empty> security = (HostNetworkSecurityPolicy){ dynamicType = None dynamicProperty[] = <empty> allowPromiscuous = None macChanges = None forgedTransmits = None } nicTeaming = (HostNicTeamingPolicy){ dynamicType = None dynamicProperty[] = <empty> policy = None reversePolicy = None notifySwitches = None rollingOrder = None failureCriteria = (HostNicFailureCriteria){ dynamicType = None dynamicProperty[] = <empty> checkSpeed = None speed = None checkDuplex = None fullDuplex = None checkErrorPercent = None percentage = None checkBeacon = None } nicOrder = (HostNicOrderPolicy){ dynamicType = None dynamicProperty[] = <empty> activeNic[] = <empty> standbyNic[] = <empty> } } offloadPolicy = (HostNetOffloadCapabilities){ dynamicType = None dynamicProperty[] = <empty> csumOffload = None tcpSegmentation = None zeroCopyXmit = None } shapingPolicy = (HostNetworkTrafficShapingPolicy){ dynamicType = None dynamicProperty[] = <empty> enabled = None averageBandwidth = None peakBandwidth = None burstSize = None } } } Step 5: 通过设置 HostPortGroupSpec 的项目值来达到设置 PortGroup 属性的目的 一般我们需要关注的项目值在 Docs 中都有明确的指示: # 其中 policy 项的值有必须是一个 HostNetworkPolicy Data Object # 所以我们需要使用与获取 HostPortGroupSpec 相同的方式来获取 HostNetworkPolicy 对象的数据结构. policy = client_factory.create('ns0:HostNetworkPolicy') nicteaming = client_factory.create('ns0:HostNicTeamingPolicy') nicteaming.notifySwitches = True policy.nicTeaming = nicteaming port_group_name = 'fanguiju-test' vswitch_name = 'vSwitch0' vlan_id = '0' vswitch_port_group_spec.policy = policy vswitch_port_group_spec.name = port_group_name vswitch_port_group_spec.vswitchName = vswitch_name vswitch_port_group_spec.vlanId = int(vlan_id) 直到现在, 我们终于准备好了 AddPortGroup 方法的实参, 接下来就能够调用这个方法实现标准交换机端口组的创建. Step 6: 调用 AddPortGroup 方法 session.invoke_api(session.vim, 'AddPortGroup', host_network_system_val['configManager.networkSystem'], portgrp=vswitch_port_group_spec) # session.invoke_api() 的使用方法: # - 第二个参数是我们要调用的目标方法: AddPortGroup # - 第三个参数是我们要调用的目标方法 AddPortGroup 的属主 MO: HostNetowrkSystem # - 第四个~第 n 个参数是传递给目标方法 AddPortGroup 的实参 Step 7: 验证结果

优秀的个人博客,低调大师

配置 LBaaS - 每天5分钟玩转 OpenStack(121)

上一节学习了 Neutron LBaaS 的原理,今天开始实践。首先在配置中启用 LBaaS 服务。 Neutron 通过 lbaas plugin 和 lbaas agent 提供 LBaaS 服务。 lbaas plugin 与 Neutron Server 一起运行在控制节点上。 lbaas agent 运行在网络节点上。 对于我们的实验环境,控制节点和网络节点是一个,都是 devstack-controller。 配置 LBaaS agent Neutron 配置 LBaaS agent 的地方是 /etc/neutron/services/loadbalancer/haproxy/lbaas_agent.ini。 定义 interface_driver: interface_driver 的作用是设置 load balancer 的网络接口驱动,可以有两个选项: Linux Bridge interface_driver = neutron.agent.linux.interface.BridgeInterfaceDriver Open vSwitch interface_driver = neutron.agent.linux.interface.OVSInterfaceDriver 配置 LBaaS plugin 在 /etc/neutron/neutron.conf 中设置启用 LBaaS plugin 在 /etc/neutron/neutron_lbaas.conf 中设置 service provider 从注释信息可以看到,除了默认的 HAProxy,Neutron 也支持第三方 provider,比如 radware,VMWareEdge 等。 重启 neutron 服务,确保 LBaaS 正常运行。 我们将实践如下 LBaaS 环境。 该环境描述如下: 1. 创建一个 Pool “web servers”。 2. 两个 pool member “WEB1” 和 “WEB2”,均为运行 Ubuntu cloud image 的 instance。 3. load balancer VIP 与 floating IP 关联。 4. 位于外网的 client 通过 floating IP 访问 web server。 下一节开始我们将一步一步实现这个 LBaaS。

优秀的个人博客,低调大师

创建 VXLAN - 每天5分钟玩转 OpenStack(111)

前面我们讨论了 VXLAN 的理论知识,并且在 ML2 中完成了相关配置。今天将通过 Web UI 创建 vxlan100_net 并观察节点网络结构的变化。 打开菜单 Admin -> Networks,点击 “Create Network” 按钮 显示创建页面。 Provider Network Type 选择 “VXLAN” Segmentation ID 即 VNI,设置为 100 点击 “Create Network”,vxlan100 创建成功。 点击 vxlan100 链接,进入 network 配置页面,目前还没有 subnet,点击 “Create Subnet” 按钮。 创建 subnet_172_16_100_0,IP 地址为 172.16.100.0/24。 底层网络发生了什么变化 在控制节点上执行 brctl show,查看当前的网络结构。 Neutron 创建了: 1. vxlan100 对应的网桥 brq1762d312-d4 2. vxlan interface vxlan-100 3. dhcp 的 tap 设备 tap4df76d0e-59 vxlan-100 和 tap4df76d0e-59 已经连接到 brq1762d312-d4,vxlan100 的二层网络就绪。 执行 ip -d link show dev vxlan-100 查看 vxlan interface 的详细配置。 可见,vxlan-100 的 VNI 是 100,对应的 VTEP 网络接口为 eth1。 此时 vxlan100 结构如图所示: 下节我们将部署 instance 到vxlan100_net 并分析网络的连通性。

优秀的个人博客,低调大师

openstack 命令行管理十九 - 日志管理 (备忘)

instance 终端以日志方式输出方法 [root@station140 ~(network_admin)]# nova console-log --length 80 terry_instance1 | tail Starting atd: [ OK ][ OK ] Starting yum-updatesd: [ OK ] Failed to retrieve hostname from instance metadata. This is a soft error so we'll continue Failed to retrieve user-data from instance metadata. This is a soft error so we'll continue Starting smartd: [ OK ] CentOS release 5.8 (Final) Kernel 2.6.18-308.el5 on an x86_64 host-10-0-0-50 login:

优秀的个人博客,低调大师

openstack 命令行管理十四 - 路由管理 (备忘)

 帮助 [root@station140 ~(network_admin)]# neutron help | grep route l3-agent-list-hosting-router List L3 agents hosting a router. l3-agent-router-add Add a router to a L3 agent. l3-agent-router-remove Remove a router from a L3 agent. net-gateway-connect Add an internal network interface to a router. router-create Create a router for a given tenant. router-delete Delete a given router. router-gateway-clear Remove an external network gateway from a router. router-gateway-set Set the external network gateway for a router. router-interface-add Add an internal network interface to a router. router-interface-delete Remove an internal network interface from a router. router-list List routers that belong to a given tenant. router-list-on-l3-agent List the routers on a L3 agent. router-port-list List ports that belong to a given tenant, with specified router. router-show Show information of a given router. router-update Update router's information. 查询 tenant [root@station140 ~(network_admin)]# keystone tenant-list +----------------------------------+----------+---------+ | id | name | enabled | +----------------------------------+----------+---------+ | 9467f30b8bba4770a06a687e4584636b | cloud | True | +----------------------------------+----------+---------+ 创建路由连接到外部网络, 这个路由可以与内部网络进行连接 你可以创建过程中指定一个 tenant, 利用参数 --tenant-id 9467f30b8bba4770a06a687e4584636b 进行定义 创建路由 neutron router-create ext-to-int --tenant-id 9467f30b8bba4770a06a687e4584636b Created a new router: +-----------------------+--------------------------------------+ | Field | Value | +-----------------------+--------------------------------------+ | admin_state_up | True | | external_gateway_info | | | id | b83f43cd-bf8f-42f8-812a-708c2c372820 | | name | ext-to-int | | status | ACTIVE | | tenant_id | 9467f30b8bba4770a06a687e4584636b | +-----------------------+--------------------------------------+ 查询方法 [root@station140 ~(keystone_admin)]# neutron router-list | grep -v router1 +--------------------------------------+------------+------------------------+ | id | name | external_gateway_info | +--------------------------------------+------------+------------------------+ | b83f43cd-bf8f-42f8-812a-708c2c372820 | ext-to-int | null | +--------------------------------------+------------+------------------------+ 查询外部网络 [root@station140 ~(keystone_admin)]# neutron net-list | grep pub1 +--------------------------------------+---------+------------------------------------------------------+ | id | name | subnets | +--------------------------------------+---------+------------------------------------------------------+ | aebe75f0-6013-4a5e-bbd9-cb81e1f017bc | pub1 | 59cc431b-498e-49a0-bc60-4a8ca1ca6f48 192.168.48.0/24 | +--------------------------------------+---------+------------------------------------------------------+ 连接路由到外部网络, 设定外部网络网关 # neutron router-gateway-set b83f43cd-bf8f-42f8-812a-708c2c372820 aebe75f0-6013-4a5e-bbd9-cb81e1f017bc [root@station140 ~(keystone_admin)]# neutron router-list | grep -v router1 +--------------------------------------+------------+-----------------------------------------------------------------------------+ | id | name | external_gateway_info | +--------------------------------------+------------+-----------------------------------------------------------------------------+ | b83f43cd-bf8f-42f8-812a-708c2c372820 | ext-to-int | {"network_id": "aebe75f0-6013-4a5e-bbd9-cb81e1f017bc", "enable_snat": true} | +--------------------------------------+------------+-----------------------------------------------------------------------------+ 列出子网信息 [root@station140 ~(keystone_admin)]# neutron subnet-list | grep terry +--------------------------------------+----------------+-----------------+------------------------------------------------------+ | id | name | cidr | allocation_pools | +--------------------------------------+----------------+-----------------+------------------------------------------------------+ | 3066c397-bccf-4473-8a94-72b09a97a70a | terry_pri_net1 | 10.0.0.0/8 | {"start": "10.0.0.50", "end": "10.0.0.100"} | | 59cc431b-498e-49a0-bc60-4a8ca1ca6f48 | terry_pub_net1 | 192.168.48.0/24 | {"start": "192.168.48.142", "end": "192.168.48.148"} | +--------------------------------------+----------------+-----------------+------------------------------------------------------+ 创建内部网络路由接口 [root@station140 ~(network_admin)]# neutron router-interface-add b83f43cd-bf8f-42f8-812a-708c2c372820 3066c397-bccf-4473-8a94-72b09a97a70a Added interface c9566299-44ed-4924-b845-4fc48bd4de98bbfe84a2-508e-47a1-a664-27b2e8121893 to router b83f43cd-bf8f-42f8-812a-708c2c372820. 显示路由信息 [root@station140 ~(keystone_admin)]# neutron router-show b83f43cd-bf8f-42f8-812a-708c2c372820 +-----------------------+-----------------------------------------------------------------------------+ | Field | Value | +-----------------------+-----------------------------------------------------------------------------+ | admin_state_up | True | | external_gateway_info | {"network_id": "aebe75f0-6013-4a5e-bbd9-cb81e1f017bc", "enable_snat": true} | | id | b83f43cd-bf8f-42f8-812a-708c2c372820 | | name | ext-to-int | | routes | | | status | ACTIVE | | tenant_id | 9467f30b8bba4770a06a687e4584636b | +-----------------------+-----------------------------------------------------------------------------+ 移除路由接口 (interface) [root@station140 ~(keystone_admin)]# neutron router-interface-delete b83f43cd-bf8f-42f8-812a-708c2c372820 3066c397-bccf-4473-8a94-72b09a97a70a Removed interface from router b83f43cd-bf8f-42f8-812a-708c2c372820 移除路由的默认网关 查询 [root@station140 ~(keystone_admin)]# neutron router-list | grep network | grep ext-to-int +--------------------------------------+------------+-----------------------------------------------------------------------------+ | id | name | external_gateway_info | +--------------------------------------+------------+-----------------------------------------------------------------------------+ | b83f43cd-bf8f-42f8-812a-708c2c372820 | ext-to-int | {"network_id": "aebe75f0-6013-4a5e-bbd9-cb81e1f017bc", "enable_snat": true} | +--------------------------------------+------------+-----------------------------------------------------------------------------+ 当 external_gateway_info 则表示具有默认网关 删除网关接口 [root@station140 ~(keystone_admin)]# neutron router-gateway-clear b83f43cd-bf8f-42f8-812a-708c2c372820 Removed gateway from router b83f43cd-bf8f-42f8-812a-708c2c372820 下面显示为不具备网关的路由 [root@station140 ~(keystone_admin)]# neutron router-list | grep ext-to-int +--------------------------------------+------------+-----------------------+ | id | name | external_gateway_info | +--------------------------------------+------------+-----------------------+ | b83f43cd-bf8f-42f8-812a-708c2c372820 | ext-to-int | null | +--------------------------------------+------------+-----------------------+ 删除路由 [root@station140 ~(keystone_admin)]# neutron router-delete b83f43cd-bf8f-42f8-812a-708c2c372820 Deleted router: b83f43cd-bf8f-42f8-812a-708c2c372820

资源下载

更多资源
Mario

Mario

马里奥是站在游戏界顶峰的超人气多面角色。马里奥靠吃蘑菇成长,特征是大鼻子、头戴帽子、身穿背带裤,还留着胡子。与他的双胞胎兄弟路易基一起,长年担任任天堂的招牌角色。

Rocky Linux

Rocky Linux

Rocky Linux(中文名:洛基)是由Gregory Kurtzer于2020年12月发起的企业级Linux发行版,作为CentOS稳定版停止维护后与RHEL(Red Hat Enterprise Linux)完全兼容的开源替代方案,由社区拥有并管理,支持x86_64、aarch64等架构。其通过重新编译RHEL源代码提供长期稳定性,采用模块化包装和SELinux安全架构,默认包含GNOME桌面环境及XFS文件系统,支持十年生命周期更新。

Sublime Text

Sublime Text

Sublime Text具有漂亮的用户界面和强大的功能,例如代码缩略图,Python的插件,代码段等。还可自定义键绑定,菜单和工具栏。Sublime Text 的主要功能包括:拼写检查,书签,完整的 Python API , Goto 功能,即时项目切换,多选择,多窗口等等。Sublime Text 是一个跨平台的编辑器,同时支持Windows、Linux、Mac OS X等操作系统。

WebStorm

WebStorm

WebStorm 是jetbrains公司旗下一款JavaScript 开发工具。目前已经被广大中国JS开发者誉为“Web前端开发神器”、“最强大的HTML5编辑器”、“最智能的JavaScript IDE”等。与IntelliJ IDEA同源,继承了IntelliJ IDEA强大的JS部分的功能。

用户登录
用户注册