第 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
$ source ~/overcloudrc
$ neutron net-create default
$ neutron subnet-create --name default --gateway 172.20.1.1 default 172.20.0.0/16
这会创建一个名为 default
的基本 Neutron 网络。Overcloud 会使用一个内部的 DHCP 来从这个网络中自动分配 IP 地址。
使用 neutron net-list
来确定创建的网络:
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
$ 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
在这个示例中,创建了一个名为 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
$ 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
provider:segmentation_id
的值定义了要使用的 VLAN。在这个示例中,使用 104。
使用 neutron net-list
来确定创建的网络:
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
$ 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 Copied! Toggle word wrap Toggle overflow
在创建 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
$ 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
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
$ neutron net-create --provider:physical_network datacentre --provider:network_type vlan --provider:segmentation_id 201 --shared provider_network
这个命令会创建一个共享的网络。另外,也可以通过不使用 --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
$ 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
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
$ 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
在运行 Tempest 前,检查 heat_stack_owner
角色存在于 Overcloud:
如果角色不存在,则创建它:
keystone role-create --name heat_stack_owner
$ keystone role-create --name heat_stack_owner
安装 Tempest toolset:
sudo yum install openstack-tempest
$ sudo yum install openstack-tempest
在 stack
用户的家目录中设置一个 tempest
目录,并复制一个本地版本的 Tempest 套件:
mkdir ~/tempest cd ~/tempest /usr/share/openstack-tempest-10.0.0/tools/configure-tempest-directory
$ mkdir ~/tempest
$ cd ~/tempest
$ /usr/share/openstack-tempest-10.0.0/tools/configure-tempest-directory
这会创建一个本地版本的 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
$ 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
$OS_AUTH_URL
和 $OS_PASSWORD
这两个环境变量使用 overcloudrc
中设置的值。--network-id
是在 第 8.2 节 “创建 Overcloud External 网络” 中创建的外部网络的 UUID。
这个配置脚本从 Tempest 测试中下载 Cirros 镜像。请确保这个目录可以直接访问互联网或通过代理服务器访问互联网。如果命令行操作需要通过代理进行,需要设置 http_proxy
环境变量。
使用以下命令运行整个 Tempest 测试:
tools/run-tests.sh
$ tools/run-tests.sh
完整运行整个 Tempest 测试可能会需要佷长时间。您可以使用 '.*smoke'
选项来只运行其中一部分的测试。
tools/run-tests.sh '.*smoke'
$ tools/run-tests.sh '.*smoke'
每个测试会针对 Overcloud 运行,它们的输出会显示每个测试以及它们的结果。在相同的目录中会产生一个包括更多测试信息的文件 tempest.log
。例如,输出结果可能会显示以下失败的测试:
{2} tempest.api.compute.servers.test_servers.ServersTestJSON.test_create_specify_keypair [18.305114s] ... FAILED
{2} tempest.api.compute.servers.test_servers.ServersTestJSON.test_create_specify_keypair [18.305114s] ... FAILED
这会包括一个相关的、包括更多信息的日志条目。在日志中搜索使用冒号分隔的测试命名空间的最后两个部分。在这个示例中,搜索 ServersTestJSON:test_create_specify_keypair
:
使用 -A 4
选项会显示接下来的 4 行内容,它们通常是请求的 header 和 body,以及返回的 header 和 body。
在验证完成后,删除所有到 Overcloud 的内部 API 的临时连接。在这个示例中,使用以下命令删除以前在 Undercloud 中创建的 VLAN:
source ~/stackrc sudo ovs-vsctl del-port vlan201
$ source ~/stackrc
$ sudo ovs-vsctl del-port vlan201
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
验证您有一个正在运行的集群:
使用 pcs property show
验证 stonith 被禁用:
Controller 节点为 director 支持的不同电源管理设备包括了一组隔离代理。这包括:
设备 |
类型 |
|
Intelligent Platform Management Interface (IPMI) |
|
Dell Remote Access Controller (DRAC) |
|
Integrated Lights-Out (iLO) |
|
Cisco UCS - 如需了解更多信息,请参阅 Configuring Cisco Unified Computing System (UCS) Fencing on an OpenStack High Availability Environment |
|
Libvirt 和 SSH |
这一节的剩余部分会使用 IPMI 代理(fence_ipmilan
)作为示例。
查看 Pacemaker 支持的完整 IPMI 选项列表:
sudo pcs stonith describe fence_ipmilan
$ sudo pcs stonith describe fence_ipmilan
每个节点都需要配置 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
$ 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
对于 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
$ 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
对于 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
$ 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
运行以下命令来设置所有 stonith 资源:
sudo pcs stonith show
$ sudo pcs stonith show
运行以下命令来查看一个特定的 stonith 资源:
sudo pcs stonith show [stonith-name]
$ sudo pcs stonith show [stonith-name]
最后,把 stonith
属性设置为 true
来启用隔离功能:
sudo pcs property set stonith-enabled=true
$ sudo pcs property set stonith-enabled=true
验证属性:
sudo pcs property show
$ sudo pcs property show
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
$ 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
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
$ 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
这包括从环境文件中读入到栈中的新参数和资源。
一般情况下,不要手工修改 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
$ nova image-create instance_name image_name
$ glance image-download image_name --file exported_vm.qcow2
把导入的镜像上传到 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
$ 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
每个虚拟机磁盘都需要从存在的 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
$ ssh-keygen -t rsa -f nova_id_rsa
把 SSH 密钥复制到每个 Compute 节点上的 nova
用户的家目录中。
以 nova
用户登录到每个 Compute 节点,运行以下命令来设置密钥:
在 director 上,source overcloudrc
,并获得当前的 nova 服务列表:
source ~/stack/overcloudrc nova service-list
$ source ~/stack/overcloudrc
$ nova service-list
在要迁移的节点上禁用 nova-compute
服务。
nova service-disable [hostname] nova-compute
$ nova service-disable [hostname] nova-compute
这会防止新的虚拟机在它上面运行。
启动从节点上迁移实例的操作:
nova host-servers-migrate [hostname]
$ nova host-servers-migrate [hostname]
使用以下命令可以查看迁移过程的当前状态:
nova migration-list
$ nova migration-list
当一个实例的迁移过程完成后,它在 nova 中的状态将变为 VERIFY_RESIZE
。此时,您可以选择确认迁移已成功完成,或把它恢复到原来的状态。要确认迁移已成功完成,运行以下命令:
nova resize-confirm [server-name]
$ nova resize-confirm [server-name]
这会从一个主机上迁移所有实例。现在,您就可以在没有实例下线的情况下执行维护操作。要把主机返回到启用的状态,运行以下命令:
nova service-enable [hostname] nova-compute
$ nova service-enable [hostname] nova-compute
8.10. 防止 Overcloud 被删除 复制链接链接已复制到粘贴板!
为了避免无意中使用 heat stack-delete overcloud
命令造成 Overcloud 被删除,Heat 包括了一组策略来防止这个问题的出现。打开 /etc/heat/policy.json
并找到以下参数:
"stacks:delete": "rule:deny_stack_user"
"stacks:delete": "rule:deny_stack_user"
把它改为:
"stacks:delete": "rule:deny_everybody"
"stacks:delete": "rule:deny_everybody"
保存这个文件。
这会避免使用 heat
客户端删除 Overcloud。为了可以删除 Overcloud,把策略恢复为原来的值。
8.11. 删除 Overcloud 复制链接链接已复制到粘贴板!
在需要的时候,Overcloud 整个可以被删除。
删除一个存在的 Overcloud:
heat stack-delete overcloud
$ heat stack-delete overcloud
确认删除 Overcloud:
heat stack-list
$ heat stack-list
删除操作会需要几分钟完成。
在删除操作完成后,按照标准的步骤重新安装您的 Overcloud。