6.6. 验证分布式 control plane
验证分布式 control plane 的创建。
流程
根据 worker 节点,验证服务 pod 是否在正确的 AZ 中运行:
$ oc get pods -o wide -l service=<service_name>将
<service_name> 替换为cinder、glance或manila,以验证特定服务的服务 pod。例如,如果
worker-6节点位于 AZ3 中,则以下命令的输出确认cinder-dc29b-volume-volume-az3-0pod 在 AZ3 中正确运行:$ oc get pods -o wide -l service=cinder NAME READY STATUS RESTARTS AGE IP NODE NOMINATED NODE READINESS GATES cinder-dc29b-api-0 2/2 Running 0 4m24s 192.172.41.120 worker-7 <none> <none> cinder-dc29b-api-1 2/2 Running 0 4m48s 192.172.28.60 worker-5 <none> <none> cinder-dc29b-api-2 2/2 Running 0 5m5s 192.172.24.237 worker-0 <none> <none> cinder-dc29b-backup-0 2/2 Running 0 5m9s 192.172.24.234 worker-0 <none> <none> cinder-dc29b-scheduler-0 2/2 Running 0 5m5s 192.172.41.118 worker-7 <none> <none> cinder-dc29b-volume-az1-0 2/2 Running 0 5m9s 192.172.32.150 worker-2 <none> <none> cinder-dc29b-volume-az2-0 2/2 Running 0 5m9s 192.172.16.33 worker-3 <none> <none> cinder-dc29b-volume-az3-0 2/2 Running 0 5m8s 192.172.21.170 worker-6 <none> <none>
打开到
openstackclientpod 的远程 shell 连接:$ oc rsh -n openstack openstackclient确认内部服务端点已注册到每个服务:
$ openstack endpoint list -c 'Service Name' -c Interface -c URL --service glance +--------------+-----------+---------------------------------------------------------------+ | Service Name | Interface | URL | +--------------+-----------+---------------------------------------------------------------+ | glance | internal | https://glance-internal.openstack.svc | | glance | public | https://glance-default-public-openstack.apps.ostest.test.metalkube.org | +--------------+-----------+---------------------------------------------------------------+如果您将块存储服务(cinder)与 Red Hat Ceph Storage 搭配使用,请确认
cinder-volume服务在每个可用区(AZ)中运行:$ openstack volume service list +------------------+--------------------------------+------+---------+-------+----------------------------+ | Binary | Host | Zone | Status | State | Updated At | +------------------+--------------------------------+------+---------+-------+----------------------------+ | cinder-scheduler | cinder-dc29b-scheduler-0 | az1 | enabled | up | 2025-05-21T14:07:11.000000 | | cinder-backup | cinder-dc29b-backup-0 | az1 | enabled | up | 2025-05-21T14:07:18.000000 | | cinder-volume | cinder-dc29b-volume-az1-0@ceph | az1 | enabled | up | 2025-05-21T14:07:13.000000 | | cinder-volume | cinder-dc29b-volume-az2-0@ceph | az2 | enabled | up | 2025-05-21T14:07:16.000000 | | cinder-volume | cinder-dc29b-volume-az3-0@ceph | az3 | enabled | up | 2025-05-21T14:07:15.000000 | +------------------+--------------------------------+------+---------+-------+----------------------------+如果您将块存储服务与第三方存储搭配使用,请验证以下内容:
确认您可以通过 AZ 创建卷:
$ openstack volume create --size 1 --availability-zone az1 vol_az1 $ openstack volume create --size 1 --availability-zone az2 vol_az2 $ openstack volume create --size 1 --availability-zone az3 vol_az3作为管理员,通过只传递类型,确认您可以在特定的 AZ 中创建卷:
$ openstack volume create --size 1 --type glance-ontap-az1 vol_az1_by_type $ openstack volume create --size 1 --type glance-ontap-az2 vol_az2_by_type $ openstack volume create --size 1 --type glance-ontap-az3 vol_az3_by_type-
确认可以使用每个
glance类型的卷,然后删除它们。
验证块存储备份服务是否在可用区(AZ)之间正常工作。
测试以下情况,以确认您可以在 AZ 和不同的 AZ 中备份和恢复卷:
注意如果在创建块存储备份时没有指定 AZ,则会在与备份的卷相同的 AZ 中创建备份。当使用
openstack volume backup show查看此备份时,availability_zone字段为空。在 az1 中创建一个测试卷:
$ openstack volume create --size 1 vol-az1 --availability-zone az1 $ openstack volume show vol-az1场景 1:在同一 AZ 中备份和恢复。
在 az1 中创建备份:
$ openstack --os-volume-api-version 3.51 volume backup create --availability-zone az1 --name vol-az1-backup-az1 vol-az1 $ openstack volume backup show vol-az1-backup-az1将备份恢复到 az1 :
$ openstack --os-volume-api-version 3.47 volume create --backup vol-az1-backup-az1 --availability-zone az1 vol-az1-backup-az1-restore-az1 $ openstack volume show vol-az1-backup-az1-restore-az1验证
availability_zone字段显示az1。
场景 2:备份到不同的 AZ,并恢复到原始的 AZ。
在 az2 中为卷创建一个备份:
$ openstack --os-volume-api-version 3.51 volume backup create --availability-zone az2 --name vol-az1-backup-az2 vol-az1 $ openstack volume backup show vol-az1-backup-az2验证
availability_zone字段显示az2。将备份恢复到 az1 :
$ openstack --os-volume-api-version 3.47 volume create --backup vol-az1-backup-az2 --availability-zone az1 vol-az1-backup-az2-restore-az1 $ openstack volume show vol-az1-backup-az2-restore-az1验证
availability_zone字段显示az1。
场景 3:备份到不同的 AZ,并恢复到该 AZ。
重复使用在 Scenario 2 中创建的备份
vol-az1-backup-az2:$ openstack volume backup show vol-az1-backup-az2验证
availability_zone字段显示az2。将备份恢复到 az2:
$ openstack --os-volume-api-version 3.47 volume create --backup vol-az1-backup-az2 --availability-zone az2 vol-az1-backup-az2-restore-az2 $ openstack volume show vol-az1-backup-az2-restore-az2验证
availability_zone字段显示az2。
如果您使用带有第三方存储的镜像服务(glance),请验证以下内容以测试每个 AZ 镜像创建的镜像。
观察可用的存储:
$ glance stores-info +----------+----------------------------------------------------------------------------------+ | Property | Value | +----------+----------------------------------------------------------------------------------+ | stores | [{"id": "az1", "description": "AZ1 NetApp iscsi cinder backend", "default": | | | "true"}, {"id": "az2", "description": "AZ2 NetApp iscsi cinder backend"}, {"id": | | | "az3", "description": "AZ3 NetApp iscsi cinder backend"}] | +----------+----------------------------------------------------------------------------------+在不传递任何与存储相关的参数的情况下创建镜像,以检查结果:
sh-5.1$ openstack image create --disk-format qcow2 --container-format bare --public --file ./cirros-0.5.2-x86_64-disk.img cirros-default +------------------+----------------------------------------------------------------------------------------------------------------------------------------------------+ | Field | Value | +------------------+----------------------------------------------------------------------------------------------------------------------------------------------------+ | container_format | bare | | created_at | 2025-06-18T22:55:21Z | | disk_format | qcow2 | | file | /v2/images/10fcfc90-e178-4776-ac76-853a7082844b/file | | id | 10fcfc90-e178-4776-ac76-853a7082844b | | min_disk | 0 | | min_ram | 0 | | name | cirros-default | | owner | 439f0ee839144b4c8640b9153a596a30 | | properties | os_hidden='False', owner_specified.openstack.md5='', owner_specified.openstack.object='images/cirros-default', owner_specified.openstack.sha256='' | | protected | False | | schema | /v2/schemas/image | | status | queued | | tags | | | updated_at | 2025-06-18T22:55:21Z | | visibility | public | +------------------+----------------------------------------------------------------------------------------------------------------------------------------------------+ sh-5.1$该镜像在
az1中创建,因为它是默认的 AZ:sh-5.1$ openstack image show 10fcfc90-e178-4776-ac76-853a7082844b | grep stores | properties | os_hash_algo='sha512', os_hash_value='6b813aa46bb90b4da216a4d19376593fa3f4fc7e617f03a92b7fe11e9a3981cbe8f0959dbebe36225e5f53dc4492341a4863cac4ed1ee0909f3fc78ef9c3e869', os_hidden='False', owner_specified.openstack.md5='', owner_specified.openstack.object='images/cirros-default', owner_specified.openstack.sha256='', stores='az1' | sh-5.1$
创建镜像并传递参数,使其直接进入存储 az1 中:
$ glance image-create --disk-format raw --container-format bare --name cirros-test --file cirros-0.5.2-x86_64-disk.img --store az1 +------------------+----------------------------------------------------------------------------------+ | Property | Value | +------------------+----------------------------------------------------------------------------------+ | checksum | b874c39491a2377b8490f5f1e89761a4 | | container_format | bare | | created_at | 2025-06-18T22:47:10Z | | disk_format | raw | | id | 5073f3f0-e4ac-4cca-9883-fecade29a1f3 | | min_disk | 0 | | min_ram | 0 | | name | cirros-test | | os_hash_algo | sha512 | | os_hash_value | 6b813aa46bb90b4da216a4d19376593fa3f4fc7e617f03a92b7fe11e9a3981cbe8f0959dbebe3622 | | | 5e5f53dc4492341a4863cac4ed1ee0909f3fc78ef9c3e869 | | os_hidden | False | | owner | 439f0ee839144b4c8640b9153a596a30 | | protected | False | | size | 16300544 | | status | active | | stores | az1 | | tags | [] | | updated_at | 2025-06-18T22:48:00Z | | virtual_size | 16300544 | | visibility | shared | +------------------+----------------------------------------------------------------------------------+将镜像导入到 az2:
$ glance image-import 5073f3f0-e4ac-4cca-9883-fecade29a1f3 --stores az2 --import-method copy-image +-----------------------+----------------------------------------------------------------------------------+ | Property | Value | +-----------------------+----------------------------------------------------------------------------------+ | checksum | b874c39491a2377b8490f5f1e89761a4 | | container_format | bare | | created_at | 2025-06-18T22:47:10Z | | disk_format | raw | | id | 5073f3f0-e4ac-4cca-9883-fecade29a1f3 | | min_disk | 0 | | min_ram | 0 | | name | cirros-test | | os_glance_import_task | 7a141f7f-409a-4ea9-b66f-0658a83e907b | | os_hash_algo | sha512 | | os_hash_value | 6b813aa46bb90b4da216a4d19376593fa3f4fc7e617f03a92b7fe11e9a3981cbe8f0959dbebe3622 | | | 5e5f53dc4492341a4863cac4ed1ee0909f3fc78ef9c3e869 | | os_hidden | False | | owner | 439f0ee839144b4c8640b9153a596a30 | | protected | False | | size | 16300544 | | status | active | | stores | az1 | | tags | [] | | updated_at | 2025-06-18T22:48:00Z | | virtual_size | 16300544 | | visibility | shared | +-----------------------+----------------------------------------------------------------------------------+观察镜像处于 az1 和 az2 的存储中:
sh-5.1$ openstack image show 5073f3f0-e4ac-4cca-9883-fecade29a1f3 | grep stores | properties | os_glance_failed_import='', os_glance_importing_to_stores='', os_hash_algo='sha512', os_hash_value='6b813aa46bb90b4da216a4d19376593fa3f4fc7e617f03a92b7fe11e9a3981cbe8f0959dbebe36225e5f53dc4492341a4863cac4ed1ee0909f3fc78ef9c3e869', os_hidden='False', stores='az1,az2' | sh-5.1$观察 az1 和 az2 中的块存储服务卷,用于存储上一步中的镜像 ID:
sh-5.1$ openstack volume list --all | grep 5073f3f0-e4ac-4cca-9883-fecade29a1f3 | 713f25b2-accc-4f4f-b5ba-8c71e2fac3aa | image-5073f3f0-e4ac-4cca-9883-fecade29a1f3 | available | 1 | | | b1917ec2-2d8e-42cc-b58c-55db48f1e054 | image-5073f3f0-e4ac-4cca-9883-fecade29a1f3 | available | 1 | | sh-5.1$确认支持镜像的每个卷的 AZ、类型和主机:
sh-5.1$ openstack volume show b1917ec2-2d8e-42cc-b58c-55db48f1e054 -c type -c availability_zone -c os-vol-host-attr:host +-----------------------+---------------------------------------------------------------+ | Field | Value | +-----------------------+---------------------------------------------------------------+ | availability_zone | az1 | | os-vol-host-attr:host | cinder-cbca0-volume-ontap-iscsi-az1-0@ontap#cinder_iscsi_pool | | type | glance-ontap-az1 | +-----------------------+---------------------------------------------------------------+ sh-5.1$ openstack volume show 713f25b2-accc-4f4f-b5ba-8c71e2fac3aa -c type -c availability_zone -c os-vol-host-attr:host +-----------------------+---------------------------------------------------------------+ | Field | Value | +-----------------------+---------------------------------------------------------------+ | availability_zone | az2 | | os-vol-host-attr:host | cinder-cbca0-volume-ontap-iscsi-az2-0@ontap#cinder_iscsi_pool | | type | glance-ontap-az2 | +-----------------------+---------------------------------------------------------------+ sh-5.1$
如果您将共享文件系统服务(manila)与 Red Hat Ceph Storage 搭配使用,请确认
manila-share服务在每个 AZ 中运行:$ openstack share service list +----+------------------+----------------------+------+---------+-------+----------------------------+ | ID | Binary | Host | Zone | Status | State | Updated At | +----+------------------+----------------------+------+---------+-------+----------------------------+ | 1 | manila-scheduler | hostgroup | nova | enabled | up | 2025-05-21T14:10:08.498066 | | 4 | manila-share | hostgroup@cephfs_az3 | az3 | enabled | up | 2025-05-21T14:10:04.973221 | | 7 | manila-share | hostgroup@cephfs_az1 | az1 | enabled | up | 2025-05-21T14:10:05.228611 | | 10 | manila-share | hostgroup@cephfs_az2 | az2 | enabled | up | 2025-05-21T14:10:04.724407 | +----+------------------+----------------------+------+---------+-------+----------------------------+如果您使用带有第三方存储的共享文件系统服务,并且禁用 DHSS,请确认以下内容:
作为管理员,创建一个共享类型:
$ openstack share type create nfs-multiaz False --extra-specs share_backend_name=nfs_az观察共享类型:
$ openstack share type list +--------------------------------------+--------------+------------+------------+--------------------------------------+-----------------------------+-------------+ | ID | Name | Visibility | Is Default | Required Extra Specs | Optional Extra Specs | Description | +--------------------------------------+--------------+------------+------------+--------------------------------------+-----------------------------+-------------+ | a63ecc00-33f5-4bd8-9d93-a1fb31f2fe79 | nfs-multiaz | public | False | driver_handles_share_servers : False | share_backend_name : nfs_az | None | +--------------------------------------+--------------+------------+------------+--------------------------------------+-----------------------------+-------------+您可以以非 admin 用户身份运行以下命令。在每个 AZ 中创建共享:
openstack share create nfs 1 --name nfsaz1 --availability-zone az1 openstack share create nfs 1 --name nfsaz2 --availability-zone az2 openstack share create nfs 1 --name nfsaz3 --availability-zone az3openstack share create命令不需要 pass-share-type nfs-multiaz,因为OpenStackControlPlaneCR 中的manila模板中存在以下配置:manilaAPI: customServiceConfig: | [DEFAULT] storage_availability_zone = az1,az2,az3 default_share_type = nfs-multiaz如果没有设置
default_share_type字段,则使用openstack选项。share create命令传递--share-type nfs-multiaz
观察共享及其 AZ:
$ openstack share list +--------------------------------------+--------+------+-------------+-----------+-----------+-----------------+-------------------------------+-------------------+ | ID | Name | Size | Share Proto | Status | Is Public | Share Type Name | Host | Availability Zone | +--------------------------------------+--------+------+-------------+-----------+-----------+-----------------+-------------------------------+-------------------+ | ef1fa319-4661-4d18-880b-a24b5e708234 | nfsaz1 | 1 | NFS | available | False | nfs-multiaz | hostgroup@nfs_az1#n2_nvme_15T | az1 | | f91e1e59-e101-4e1f-8b92-fb49edd706cf | nfsaz2 | 1 | NFS | available | False | nfs-multiaz | hostgroup@nfs_az2#n2_nvme_15T | az2 | | 09c9f709-1cf6-4279-ba39-8c80669b118a | nfsaz3 | 1 | NFS | available | False | nfs-multiaz | hostgroup@nfs_az3#n2_nvme_15T | az3 | +--------------------------------------+--------+------+-------------+-----------+-----------+-----------------+-------------------------------+-------------------+获取共享的 NFS 路径:
示例:
$ openstack share show nfsaz1 | grep path | | path = 10.0.0.42:/share_9afcc8c4_2a09_4d05_8cdc_f28eb58a3dff根据 Compute 服务(nova)实例授予对适当的 IP 范围的访问权限,以访问共享:
$ openstack share access create nfsaz1 ip 10.0.0.0/24 --access-level rw在部署 Compute 服务时,您可以使用如下命令挂载共享:
示例:
$ mount -t nfs 10.0.0.42:/share_<UUID> /mnt/share
如果您使用带有第三方存储的共享文件系统服务,并且启用了 DHSS,请确认以下内容:
以 OpenStack 管理员身份,创建一个共享类型:
$ openstack share type create nfs-multiaz true --extra-specs share_backend_name='nfs_az'作为项目管理员,为共享文件系统服务创建一个网络和子网:
$ openstack network create --project rhoso --provider-network-type vlan manila_net openstack subnet create --network manila_net --subnet-range <subnet> --dns-nameserver <dns> manila-subnetaz1作为项目用户,使用上一步中的值创建共享网络,并为每个 AZ 定义共享:
$ openstack share network create --name share_net --neutron-net-id <net_id> --neutron-subnet-id <sub_net_id> $ openstack share create nfs 1 --name nfsaz1 --share-network share_net --availability-zone az1 $ openstack share create nfs 1 --name nfsaz2 --share-network share_net --availability-zone az2 $ openstack share create nfs 1 --name nfsaz3 --share-network share_net --availability-zone az3- 在本例中,共享网络没有 AZ 设置。它是跨越所有 AZ 的默认共享网络。
- 您可以为每个 AZ 创建网络服务(neutron)网络和子网,并将 AZ 中的共享创建限制到对应的网络和子网。要隔离共享创建,请在共享文件系统服务中创建多个共享网络子网,每个子网都有自己的网络服务网络、子网和 AZ。
openstack share create命令不需要 pass-share-type nfs-multiaz,因为OpenStackControlPlaneCR 中的manila模板中存在以下配置:manilaAPI: customServiceConfig: | [DEFAULT] storage_availability_zone = az1,az2,az3 default_share_type = nfs-multiaz如果没有设置
default_share_type字段,则使用openstack选项。share create命令传递--share-type nfs-multiaz
根据 Compute 服务实例授予对适当 IP 范围的访问权限,以访问共享:
$ openstack share access create nfsaz1 ip 10.0.0.0/24 --access-level rw在部署 Compute 服务时,您可以使用如下命令挂载共享:
示例:
$ mount -t nfs 10.0.0.42:/share_<UUID> /mnt/share
退出
OpenStackClientpod:$ exit