第 8 章 创建 Overcloud 后执行的任务


本章介绍了在创建 Overcloud 后需要执行的任务。

8.1. 创建 Overcloud Tenant 网络

Overcloud 需要为实例提供一个 Tenant 网络。source overcloud 并在 Neutron 中创建一个初始的 Tenant 网络。例如:

$ source ~/overcloudrc
$ neutron net-create default
$ neutron subnet-create --name default --gateway 172.20.1.1 default 172.20.0.0/16
Copy to Clipboard Toggle word wrap

这会创建一个名为 default 的基本 Neutron 网络。Overcloud 会使用一个内部的 DHCP 来从这个网络中自动分配 IP 地址。

使用 neutron net-list 来确定创建的网络:

$ neutron net-list
+-----------------------+-------------+----------------------------------------------------+
| id                    | name        | subnets                                            |
+-----------------------+-------------+----------------------------------------------------+
| 95fadaa1-5dda-4777... | default     | 7e060813-35c5-462c-a56a-1c6f8f4f332f 172.20.0.0/16 |
+-----------------------+-------------+----------------------------------------------------+
Copy to Clipboard Toggle word wrap

8.2. 创建 Overcloud External 网络

在此之前,已配置了节点接口来使用 External 网络(第 6.2 节 “分离网络”),但您仍需要在 Overcloud 中创建这个网络,从而可以为实例分配浮动 IP 地址。

使用原生的 VLAN

这个步骤假设 External 网络有一个专用的接口,或一个原生的 VLAN。

source overcloud,并在 Neutron 中创建一个 External 网络:

$ source ~/overcloudrc
$ neutron net-create nova --router:external --provider:network_type flat --provider:physical_network datacentre
$ neutron subnet-create --name nova --enable_dhcp=False --allocation-pool=start=10.1.1.51,end=10.1.1.250 --gateway=10.1.1.1 nova 10.1.1.0/24
Copy to Clipboard Toggle word wrap

在这个示例中,创建了一个名为 nova 的网络。Overcloud 需要使用这个特定的名称来实现浮动 IP 地址池。另外,它对验证测试也非常重要(第 8.5 节 “验证 Overcloud”)。

这个命令还会把网络映射到 datacentre 物理网络。作为一个默认的设置,datacentre 会被映射到 br-ex 网桥。如果在创建 Overcloud 时没有使用经过定制的 neutron 设置,这个选项就需要使用默认的设置。

使用非原生的 VLAN

如果没有使用原生的 VLAN,使用以下命令把网络分配给一个 VLAN:

$ source ~/overcloudrc
$ neutron net-create nova --router:external --provider:network_type vlan --provider:physical_network datacentre --provider:segmentation_id 104
$ neutron subnet-create --name nova --enable_dhcp=False --allocation-pool=start=10.1.1.51,end=10.1.1.250 --gateway=10.1.1.1 nova 10.1.1.0/24
Copy to Clipboard Toggle word wrap

provider:segmentation_id 的值定义了要使用的 VLAN。在这个示例中,使用 104。

使用 neutron net-list 来确定创建的网络:

$ neutron net-list
+-----------------------+-------------+---------------------------------------------------+
| id                    | name        | subnets                                           |
+-----------------------+-------------+---------------------------------------------------+
| d474fe1f-222d-4e32... | nova        | 01c5f621-1e0f-4b9d-9c30-7dc59592a52f 10.1.1.0/24  |
+-----------------------+-------------+---------------------------------------------------+
Copy to Clipboard Toggle word wrap

8.3. 创建额外的浮动 IP 地址网络

只要满足以下条件,浮动 IP 网络可以使用任何网桥,而不只局限于 br-ex

  • 在网络环境文件中,NeutronExternalNetworkBridge 被设置为 "''"
  • 在部署的过程中已映射了额外的网桥。例如,把一个名为 br-floating 的新网桥映射到 floating 物理网络:

    $ openstack overcloud deploy --templates -e /usr/share/openstack-tripleo-heat-templates/environments/network-isolation.yaml -e ~/templates/network-environment.yaml --neutron-bridge-mappings datacentre:br-ex,floating:br-floating
    Copy to Clipboard Toggle word wrap

在创建 Overcloud 后创建浮动 IP 网络:

$ neutron net-create ext-net --router:external --provider:physical_network floating --provider:network_type vlan --provider:segmentation_id 105
$ neutron subnet-create --name ext-subnet --enable_dhcp=False --allocation-pool start=10.1.2.51,end=10.1.2.250 --gateway 10.1.2.1 ext-net 10.1.2.0/24
Copy to Clipboard Toggle word wrap

8.4. 创建 Overcloud 供应商网络

供应商(provider)网络就是一个被物理地附加到位于部署的 Overcloud 以外的网络。它可以是一个已存在的基础架构网络,或是一个通过路由而不是浮动 IP 来为实例提供直接外部访问的网络。

在创建一个供应商网络时,可以使用网桥映射把它和一个物理网络相关联。这和创建浮动 IP 网络相似。您需要把供应商网络添加到 Controller 节点和 Compute 节点中,这是因为 Compute 节点会把虚拟机的虚拟网络接口直接附加到附加的网络接口上。

例如,供应商网络是 br-ex bridge 网桥上的一个 VLAN,使用以下命令在 VLAN 201 上添加一个供应商网络:

$ neutron net-create --provider:physical_network datacentre --provider:network_type vlan --provider:segmentation_id 201 --shared provider_network
Copy to Clipboard Toggle word wrap

这个命令会创建一个共享的网络。另外,也可以通过不使用 --shared 来创建一个租户网络,这个网络将只对特定的租户有效。如果把一个供应商网络标记为外部,则只有操作员可以在这个网络上创建端口。

如果需要 neutron 为租户实例提供 DHCP 服务,则需要向供应商网络添加一个子网:

$ neutron subnet-create --name provider-subnet --enable_dhcp=True --allocation-pool start=10.9.101.50,end=10.9.101.100 --gateway 10.9.101.254 provider_network 10.9.101.0/24
Copy to Clipboard Toggle word wrap

8.5. 验证 Overcloud

Overcloud 使用 Tempest 进行一组集成测试。以下展示了如何使用 Tempest 来验证 Overcloud。如果从 Undercloud 运行这个测试,需要确保 Undercloud 主机可以访问 Overcloud 的内部 API 网络。例如,在 Undercloud 主机上添加一个临时的 VLAN(ID: 201)来访问内部 API 网络,使用 172.16.0.201/24 地址:

$ source ~/stackrc
$ sudo ovs-vsctl add-port br-ctlplane vlan201 tag=201 -- set interface vlan201 type=internal
$ sudo ip l set dev vlan201 up; sudo ip addr add 172.16.0.201/24 dev vlan201
Copy to Clipboard Toggle word wrap

在运行 Tempest 前,检查 heat_stack_owner 角色存在于 Overcloud:

$ source ~/overcloudrc
$ openstack role list
+----------------------------------+------------------+
| ID                               | Name             |
+----------------------------------+------------------+
| 6226a517204846d1a26d15aae1af208f | swiftoperator    |
| 7c7eb03955e545dd86bbfeb73692738b | heat_stack_owner |
+----------------------------------+------------------+
Copy to Clipboard Toggle word wrap

如果角色不存在,则创建它:

$ keystone role-create --name heat_stack_owner
Copy to Clipboard Toggle word wrap

安装 Tempest toolset:

$ sudo yum install openstack-tempest
Copy to Clipboard Toggle word wrap

stack 用户的家目录中设置一个 tempest 目录,并复制一个本地版本的 Tempest 套件:

$ mkdir ~/tempest
$ cd ~/tempest
$ /usr/share/openstack-tempest-10.0.0/tools/configure-tempest-directory
Copy to Clipboard Toggle word wrap

这会创建一个本地版本的 Tempest 工具集。

在 Overcloud 创建过程完成后,director 会创建一个名为 ~/tempest-deployer-input.conf 的文件。这个文件会提供一组和您的 Overcloud 相关的 Tempest 配置选项。运行以下命令来使用这个文件来配置 Tempest:

$ tools/config_tempest.py --deployer-input ~/tempest-deployer-input.conf --debug --create identity.uri $OS_AUTH_URL identity.admin_password $OS_PASSWORD --network-id d474fe1f-222d-4e32-9242-cd1fefe9c14b
Copy to Clipboard Toggle word wrap

$OS_AUTH_URL$OS_PASSWORD 这两个环境变量使用 overcloudrc 中设置的值。--network-id 是在 第 8.2 节 “创建 Overcloud External 网络” 中创建的外部网络的 UUID。

重要

这个配置脚本从 Tempest 测试中下载 Cirros 镜像。请确保这个目录可以直接访问互联网或通过代理服务器访问互联网。如果命令行操作需要通过代理进行,需要设置 http_proxy 环境变量。

使用以下命令运行整个 Tempest 测试:

$ tools/run-tests.sh
Copy to Clipboard Toggle word wrap
注意

完整运行整个 Tempest 测试可能会需要佷长时间。您可以使用 '.*smoke' 选项来只运行其中一部分的测试。

$ tools/run-tests.sh '.*smoke'
Copy to Clipboard Toggle word wrap

每个测试会针对 Overcloud 运行,它们的输出会显示每个测试以及它们的结果。在相同的目录中会产生一个包括更多测试信息的文件 tempest.log。例如,输出结果可能会显示以下失败的测试:

{2} tempest.api.compute.servers.test_servers.ServersTestJSON.test_create_specify_keypair [18.305114s] ... FAILED
Copy to Clipboard Toggle word wrap

这会包括一个相关的、包括更多信息的日志条目。在日志中搜索使用冒号分隔的测试命名空间的最后两个部分。在这个示例中,搜索 ServersTestJSON:test_create_specify_keypair

$ grep "ServersTestJSON:test_create_specify_keypair" tempest.log -A 4
2016-03-17 14:49:31.123 10999 INFO tempest_lib.common.rest_client [req-a7a29a52-0a52-4232-9b57-c4f953280e2c ] Request (ServersTestJSON:test_create_specify_keypair): 500 POST http://192.168.201.69:8774/v2/2f8bef15b284456ba58d7b149935cbc8/os-keypairs 4.331s
2016-03-17 14:49:31.123 10999 DEBUG tempest_lib.common.rest_client [req-a7a29a52-0a52-4232-9b57-c4f953280e2c ] Request - Headers: {'Content-Type': 'application/json', 'Accept': 'application/json', 'X-Auth-Token': '<omitted>'}
        Body: {"keypair": {"name": "tempest-key-722237471"}}
    Response - Headers: {'status': '500', 'content-length': '128', 'x-compute-request-id': 'req-a7a29a52-0a52-4232-9b57-c4f953280e2c', 'connection': 'close', 'date': 'Thu, 17 Mar 2016 04:49:31 GMT', 'content-type': 'application/json; charset=UTF-8'}
        Body: {"computeFault": {"message": "The server has either erred or is incapable of performing the requested operation.", "code": 500}} _log_request_full /usr/lib/python2.7/site-packages/tempest_lib/common/rest_client.py:414
Copy to Clipboard Toggle word wrap
注意

使用 -A 4 选项会显示接下来的 4 行内容,它们通常是请求的 header 和 body,以及返回的 header 和 body。

在验证完成后,删除所有到 Overcloud 的内部 API 的临时连接。在这个示例中,使用以下命令删除以前在 Undercloud 中创建的 VLAN:

$ source ~/stackrc
$ sudo ovs-vsctl del-port vlan201
Copy to Clipboard Toggle word wrap

8.6. 隔离 Controller 节点

隔离(fencing)就是把一个节点和集群中的其它节点进行隔离来保护整个集群和它的资源。如果没有隔离功能,一个有问题的节点可能会导致集群中的数据被破坏。

director 使用 Pacemaker 来为 Controller 节点提供高可用性集群。Pacemaker 使用 STONITH(Shoot-The-Other-Node-In-The-Head)进程来隔离有问题的节点。在默认情况下,STONITH 在集群中被禁用,您需要手工配置来使 Pacemaker 可以控制集群中的每个节点的电源管理。

注意

使用 director 上的 stack 用户,以 heat-admin 用户身份登录到每个节点。Overcloud 的创建过程会自动把 stack 用户的 SSH 密钥复制给每个节点的 heat-admin 用户。

运行 pcs status 验证您有一个正在运行的集群:

$ sudo pcs status
Cluster name: openstackHA
Last updated: Wed Jun 24 12:40:27 2015
Last change: Wed Jun 24 11:36:18 2015
Stack: corosync
Current DC: lb-c1a2 (2) - partition with quorum
Version: 1.1.12-a14efad
3 Nodes configured
141 Resources configured
Copy to Clipboard Toggle word wrap

使用 pcs property show 验证 stonith 被禁用:

$ sudo pcs property show
Cluster Properties:
cluster-infrastructure: corosync
cluster-name: openstackHA
dc-version: 1.1.12-a14efad
have-watchdog: false
stonith-enabled: false
Copy to Clipboard Toggle word wrap

Controller 节点为 director 支持的不同电源管理设备包括了一组隔离代理。这包括:

Expand
表 8.1. 隔离代理

设备

类型

fence_ipmilan

Intelligent Platform Management Interface (IPMI)

fence_idracfence_drac5

Dell Remote Access Controller (DRAC)

fence_ilo

Integrated Lights-Out (iLO)

fence_ucs

Cisco UCS - 如需了解更多信息,请参阅 Configuring Cisco Unified Computing System (UCS) Fencing on an OpenStack High Availability Environment

fence_xvmfence_virt

Libvirt 和 SSH

这一节的剩余部分会使用 IPMI 代理(fence_ipmilan)作为示例。

查看 Pacemaker 支持的完整 IPMI 选项列表:

$ sudo pcs stonith describe fence_ipmilan
Copy to Clipboard Toggle word wrap

每个节点都需要配置 IPMI 设备来控制电源管理。这包括为每个节点在 pacemaker 中添加一个 stonith 设备。在集群中使用以下命令:

注意

每个示例中的第二个命令保证了节点不会隔离自己。

对于 Controller 节点 0:

$ sudo pcs stonith create my-ipmilan-for-controller-0 fence_ipmilan pcmk_host_list=overcloud-controller-0 ipaddr=192.0.2.205 login=admin passwd=p@55w0rd! lanplus=1 cipher=1 op monitor interval=60s
$ sudo pcs constraint location my-ipmilan-for-controller-0 avoids overcloud-controller-0
Copy to Clipboard Toggle word wrap

对于 Controller 节点 1:

$ sudo pcs stonith create my-ipmilan-for-controller-1 fence_ipmilan pcmk_host_list=overcloud-controller-1 ipaddr=192.0.2.206 login=admin passwd=p@55w0rd! lanplus=1 cipher=1 op monitor interval=60s
$ sudo pcs constraint location my-ipmilan-for-controller-1 avoids overcloud-controller-1
Copy to Clipboard Toggle word wrap

对于 Controller 节点 2:

$ sudo pcs stonith create my-ipmilan-for-controller-2 fence_ipmilan pcmk_host_list=overcloud-controller-2 ipaddr=192.0.2.207 login=admin passwd=p@55w0rd! lanplus=1 cipher=1 op monitor interval=60s
$ sudo pcs constraint location my-ipmilan-for-controller-2 avoids overcloud-controller-2
Copy to Clipboard Toggle word wrap

运行以下命令来设置所有 stonith 资源:

$ sudo pcs stonith show
Copy to Clipboard Toggle word wrap

运行以下命令来查看一个特定的 stonith 资源:

$ sudo pcs stonith show [stonith-name]
Copy to Clipboard Toggle word wrap

最后,把 stonith 属性设置为 true 来启用隔离功能:

$ sudo pcs property set stonith-enabled=true
Copy to Clipboard Toggle word wrap

验证属性:

$ sudo pcs property show
Copy to Clipboard Toggle word wrap

8.7. 修改 Overcloud 环境

有些时候,您可能会需要修改 Overcloud 来添加一些功能,或改变它的运行方式。要修改 Overcloud,在您的定制环境文件和 Heat 模板中进行修改,然后从您的初始 Overcloud 创建中重新运行 openstack overcloud deploy 命令。例如,如果根据 第 7 章 创建 Overcloud 创建了一个 Overcloud,您应该重新运行以下命令:

$ openstack overcloud deploy --templates -e /usr/share/openstack-tripleo-heat-templates/environments/network-isolation.yaml -e ~/templates/network-environment.yaml -e ~/templates/storage-environment.yaml --control-scale 3 --compute-scale 3 --ceph-storage-scale 3 --control-flavor control --compute-flavor compute --ceph-storage-flavor ceph-storage --ntp-server pool.ntp.org --neutron-network-type vxlan --neutron-tunnel-types vxlan
Copy to Clipboard Toggle word wrap

director 会在 heat 中检查 overcloud 栈,然后根据环境文件和 heat 模板更新栈中的每个项。它不会重新创建 Overcloud,而是更改已存在的 Overcloud。

如果需要包括一个新的环境文件,在 openstack overcloud deploy 命令中使用 -e 选项添加它。例如:

$ openstack overcloud deploy --templates -e /usr/share/openstack-tripleo-heat-templates/environments/network-isolation.yaml -e ~/templates/network-environment.yaml -e ~/templates/storage-environment.yaml -e ~/templates/new-environment.yaml --control-scale 3 --compute-scale 3 --ceph-storage-scale 3 --control-flavor control --compute-flavor compute --ceph-storage-flavor ceph-storage --ntp-server pool.ntp.org --neutron-network-type vxlan --neutron-tunnel-types vxlan
Copy to Clipboard Toggle word wrap

这包括从环境文件中读入到栈中的新参数和资源。

重要

一般情况下,不要手工修改 Overcloud 的配置,因为 director 可能会在以后覆盖这些所做的修改。

8.8. 把虚拟机导入到 Overcloud

如果您有一个已存在的 OpenStack 环境,并希望把它的虚拟机迁移到 Red Hat OpenStack Platform 环境中,请进行以下操作。

为一个运行的服务器进行快照来创建一个新的镜像,然后下载这个镜像。

$ nova image-create instance_name image_name
$ glance image-download image_name --file exported_vm.qcow2
Copy to Clipboard Toggle word wrap

把导入的镜像上传到 Overcloud,然后启动一个新实例。

$ glance image-create --name imported_image --file exported_vm.qcow2 --disk-format qcow2 --container-format bare
$ nova boot --poll --key-name default --flavor m1.demo --image imported_image --nic net-id=net_id imported
Copy to Clipboard Toggle word wrap
重要

每个虚拟机磁盘都需要从存在的 OpenStack 环境中复制到新的 Red Hat OpenStack Platform。使用 QCOW 的快照将会丢掉它原始的层系统。

8.9. 从一个 Overcloud Compute 节点中迁移虚拟机

在一些情况下,您可以在 Overcloud Compute 节点上执行维护操作。为了避免下线时间,按照以下方法把 Compute 节点上的虚拟机迁移到 Overcloud 中的另外一个 Compute 节点上。

所有 Compute 节点都需要一个共享的 SSH 密钥,从而使每个主机的 nova 用户都可以在迁移的过程中访问这些节点。使用以下步骤在每个 Compute 节点上设置一个 SSH 密钥对。

创建一个 SSH 密钥:

$ ssh-keygen -t rsa -f nova_id_rsa
Copy to Clipboard Toggle word wrap

把 SSH 密钥复制到每个 Compute 节点上的 nova 用户的家目录中。

nova 用户登录到每个 Compute 节点,运行以下命令来设置密钥:

NOVA_SSH=/var/lib/nova/.ssh
mkdir ${NOVA_SSH}

cp nova_id_rsa ${NOVA_SSH}/id_rsa
chmod 600 ${NOVA_SSH}/id_rsa
cp nova_id_rsa.pub ${NOVA_SSH}/id_rsa.pub
cp nova_id_rsa.pub ${NOVA_SSH}/authorized_keys

chown -R nova.nova ${NOVA_SSH}

# enable login for nova user on compute hosts:
usermod -s /bin/bash nova

# add ssh keys of overcloud nodes into known hosts:
ssh-keyscan -t rsa `os-apply-config --key hosts --type raw --key-default '' | awk '{print $1}'` >> /etc/ssh/ssh_known_hosts
Copy to Clipboard Toggle word wrap

在 director 上,source overcloudrc,并获得当前的 nova 服务列表:

$ source ~/stack/overcloudrc
$ nova service-list
Copy to Clipboard Toggle word wrap

在要迁移的节点上禁用 nova-compute 服务。

$ nova service-disable [hostname] nova-compute
Copy to Clipboard Toggle word wrap

这会防止新的虚拟机在它上面运行。

启动从节点上迁移实例的操作:

$ nova host-servers-migrate [hostname]
Copy to Clipboard Toggle word wrap

使用以下命令可以查看迁移过程的当前状态:

$ nova migration-list
Copy to Clipboard Toggle word wrap

当一个实例的迁移过程完成后,它在 nova 中的状态将变为 VERIFY_RESIZE。此时,您可以选择确认迁移已成功完成,或把它恢复到原来的状态。要确认迁移已成功完成,运行以下命令:

$ nova resize-confirm [server-name]
Copy to Clipboard Toggle word wrap

这会从一个主机上迁移所有实例。现在,您就可以在没有实例下线的情况下执行维护操作。要把主机返回到启用的状态,运行以下命令:

$ nova service-enable [hostname] nova-compute
Copy to Clipboard Toggle word wrap

8.10. 防止 Overcloud 被删除

为了避免无意中使用 heat stack-delete overcloud 命令造成 Overcloud 被删除,Heat 包括了一组策略来防止这个问题的出现。打开 /etc/heat/policy.json 并找到以下参数:

"stacks:delete": "rule:deny_stack_user"
Copy to Clipboard Toggle word wrap

把它改为:

"stacks:delete": "rule:deny_everybody"
Copy to Clipboard Toggle word wrap

保存这个文件。

这会避免使用 heat 客户端删除 Overcloud。为了可以删除 Overcloud,把策略恢复为原来的值。

8.11. 删除 Overcloud

在需要的时候,Overcloud 整个可以被删除。

删除一个存在的 Overcloud:

$ heat stack-delete overcloud
Copy to Clipboard Toggle word wrap

确认删除 Overcloud:

$ heat stack-list
Copy to Clipboard Toggle word wrap

删除操作会需要几分钟完成。

在删除操作完成后,按照标准的步骤重新安装您的 Overcloud。

返回顶部
Red Hat logoGithubredditYoutubeTwitter

学习

尝试、购买和销售

社区

关于红帽文档

通过我们的产品和服务,以及可以信赖的内容,帮助红帽用户创新并实现他们的目标。 了解我们当前的更新.

让开源更具包容性

红帽致力于替换我们的代码、文档和 Web 属性中存在问题的语言。欲了解更多详情,请参阅红帽博客.

關於紅帽

我们提供强化的解决方案,使企业能够更轻松地跨平台和环境(从核心数据中心到网络边缘)工作。

Theme

© 2025 Red Hat