管理卷¶
根据您的云提供商的设置,他们可能会为您提供一个用于管理卷的端点。您可以使用 openstack 命令行界面来管理卷。
对于计算服务而言,附加、分离和从卷创建服务器是主要关注点。
有关更多信息,请参阅CLI 文档。
卷多重附加¶
Nova 在 17.0.0 Queens 版本中增加了对多重附加卷的支持。
本文档涵盖此功能的 Nova 特定方面。有关创建支持多重附加的卷的更多详细信息,请参阅块存储管理员指南。
支持从卷启动并将卷附加到未 SHELVED_OFFLOADED 的服务器。最终执行这些操作的能力取决于所使用的计算主机和虚拟机管理程序驱动程序。
还有一个关于卷多重附加的录制概览和演示。
需求¶
已知问题¶
尚不支持在单个请求中创建多个以支持多重附加的卷作为根磁盘的服务器:https://bugs.launchpad.net/nova/+bug/1747985
对同一卷的后续附加在块存储服务中默认都以读/写模式附加。Nova 或 Cinder 未来的更改可能会解决此问题,以便后续附加以只读模式进行,或者用户在将卷附加到服务器时可以指定模式。
测试¶
卷多重附加功能的持续集成测试通过 tempest-full 和 tempest-slow 作业进行,这些作业以及测试本身都定义在tempest 仓库中。
管理卷附件¶
在实例的生命周期中,管理员可能需要检查给定卷如何映射到实例以及承载该实例的基础计算的各个方面。这甚至可能包括刷新附件的不同元素,以确保已应用环境中的最新配置更改。
注意
如果您在 Nova 或 Cinder 数据库中遇到任何悬空卷附件,对受影响实例执行 hard reboot 可以帮助解决问题。在实例重启过程中,Nova 执行同步机制,验证 Cinder 数据库中卷附件的可用性。在 hard reboot 过程中,会检测到任何缺失或悬空/陈旧的附件,并从 Nova 和 Cinder 中删除。
检查现有附件¶
可以使用以下OpenStack 客户端命令检查现有卷附件
列出给定实例的所有卷附件
$ openstack server volume list 216f9481-4c9d-4530-b865-51cedfa4b8e7
+--------------------------------------+----------+--------------------------------------+--------------------------------------+
| ID | Device | Server ID | Volume ID |
+--------------------------------------+----------+--------------------------------------+--------------------------------------+
| 8b9b3491-f083-4485-8374-258372f3db35 | /dev/vdb | 216f9481-4c9d-4530-b865-51cedfa4b8e7 | 8b9b3491-f083-4485-8374-258372f3db35 |
+--------------------------------------+----------+--------------------------------------+--------------------------------------+
列出给定实例的所有卷附件,其中还列出 Cinder 卷附件和块设备映射 UUID,微版本 >=2.89
$ openstack --os-compute-api-version 2.89 server volume list 216f9481-4c9d-4530-b865-51cedfa4b8e7
+----------+--------------------------------------+--------------------------------------+------+------------------------+--------------------------------------+--------------------------------------+
| Device | Server ID | Volume ID | Tag | Delete On Termination? | Attachment ID | BlockDeviceMapping UUID |
+----------+--------------------------------------+--------------------------------------+------+------------------------+--------------------------------------+--------------------------------------+
| /dev/vdb | 216f9481-4c9d-4530-b865-51cedfa4b8e7 | 8b9b3491-f083-4485-8374-258372f3db35 | None | False | d338fb38-cfd5-461f-8753-145dcbdb6c78 | 4e957e6d-52f2-44da-8cf8-3f1ab755e26d |
+----------+--------------------------------------+--------------------------------------+------+------------------------+--------------------------------------+--------------------------------------+
从微版本 >= 3.27 列出给定卷的所有 Cinder 卷附件
$ openstack --os-volume-api-version 3.27 volume attachment list --volume-id 8b9b3491-f083-4485-8374-258372f3db35
+--------------------------------------+--------------------------------------+--------------------------------------+----------+
| ID | Volume ID | Server ID | Status |
+--------------------------------------+--------------------------------------+--------------------------------------+----------+
| d338fb38-cfd5-461f-8753-145dcbdb6c78 | 8b9b3491-f083-4485-8374-258372f3db35 | 216f9481-4c9d-4530-b865-51cedfa4b8e7 | attached |
+--------------------------------------+--------------------------------------+--------------------------------------+----------+
从微版本 >= 3.27 显示 Cinder 卷附件的详细信息
$ openstack --os-volume-api-version 3.27 volume attachment show d338fb38-cfd5-461f-8753-145dcbdb6c78
+-------------+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
| Field | Value |
+-------------+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
| ID | d338fb38-cfd5-461f-8753-145dcbdb6c78 |
| Volume ID | 8b9b3491-f083-4485-8374-258372f3db35 |
| Instance ID | 216f9481-4c9d-4530-b865-51cedfa4b8e7 |
| Status | attached |
| Attach Mode | rw |
| Attached At | 2021-09-14T13:03:38.000000 |
| Detached At | |
| Properties | access_mode='rw', attachment_id='d338fb38-cfd5-461f-8753-145dcbdb6c78', auth_method='CHAP', auth_password='4XyNNFV2TLPhKXoP', auth_username='jsBMQhWZJXupA4eWHLQG', cacheable='False', driver_volume_type='iscsi', encrypted='False', qos_specs=, target_discovered='False', target_iqn='iqn.2010-10.org.openstack:volume-8b9b3491-f083-4485-8374-258372f3db35', target_lun='0', target_portal='192.168.122.99:3260', volume_id='8b9b3491-f083-4485-8374-258372f3db35' |
+-------------+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
使用 nova-manage 刷新卷附件¶
版本 24.0.0 中新增: (Xena)
管理员还可以使用以下 nova-manage 命令刷新现有卷附件。
注意
用户还可以通过搁置然后解除搁置实例来刷新卷附件。以下是该工作流程的替代方案,对于管理员需要在整个环境中批量刷新附件时非常有用。
注意
未来的工作将探讨引入 os-refresh 管理 API,该 API 将包括协调实例的关闭和刷新卷附件等功能。
首先,管理员可以使用 volume_attachment show 子命令直接从 Nova 数据库转储附件的现有详细信息。这包括 API 未共享的缓存 connection_info。
$ nova-manage volume_attachment show 216f9481-4c9d-4530-b865-51cedfa4b8e7 8b9b3491-f083-4485-8374-258372f3db35 --json | jq .attachment_id
"d338fb38-cfd5-461f-8753-145dcbdb6c78"
如果存储的 connection_info 或 attachment_id 不正确,则管理员可能希望通过重新创建 Cinder 卷附件记录并拉取新的 connection_info 来完全刷新到计算主机的附件。为此,我们首先需要确保实例已停止
$ openstack server stop 216f9481-4c9d-4530-b865-51cedfa4b8e7
停止后,必须使用 volume_attachment get_connector 子命令获取承载实例的计算的主机连接器
root@compute $ nova-manage volume_attachment get_connector --json > connector.json
注意
未来的工作将取消此要求,并将主机连接器的收集整合到主刷新命令中。不幸的是,在此之前,它必须仍然是一个单独的手动步骤。
然后我们可以将此连接器提供给 volume_attachment refresh 子命令。此命令将连接到计算,断开任何主机卷连接,删除现有的 Cinder 卷附件,重新创建卷附件,最后更新 Nova 的数据库。
$ nova-manage volume_attachment refresh 216f9481-4c9d-4530-b865-51cedfa4b8e7 8b9b3491-f083-4485-8374-258372f3db35 connector.json
Nova 数据库中存储的 Cinder 卷附件和 connection_info 现在应该已更新
$ nova-manage volume_attachment show 216f9481-4c9d-4530-b865-51cedfa4b8e7 8b9b3491-f083-4485-8374-258372f3db35 --json | jq .attachment_id
"9ce46f49-5cfc-4c6c-b2f0-0287540d3246"
然后可以重新启动实例并检查事件列表
$ openstack server start $instance