第 4 章 管理卷(云硬盘)
卷就是一个块存储设备,它为 OpenStack 实例提供持久性的存储。在 Red Hat Enterprise OpenStack Platform 中,卷有时也被称为云硬盘。
4.1. 基本云硬盘(Volume)的使用和配置
以下介绍了对最终用户的云硬盘进行基本管理的方法
4.1.1. 创建云硬盘
- 在 dashboard 中选择项目 > Compute > 云硬盘。
点创建云硬盘,编辑以下项:
项 描述 云硬盘名称
云硬盘的名称
描述
对云硬盘的描述信息(可选)
类型
卷类型(可选)。请参阅 第 4.2.3 节 “使用云硬盘类型进行云硬盘分组设置”。
如果您有多个块存储后端,您可以在这里选择一个后端。请参阅 第 4.1.2 节 “为创建的云硬盘指定后端”。
大小(GB)
卷的大小(以 GB 为单位)
可用域
可用域(逻辑服务器组)和主机集合(host aggregate)是在 OpenStack 中进行资源聚合的常用方法。可用域在安装的过程中被定义。如需了解更多与可用域和主机集合相关的信息,请参阅 第 3.4 节 “管理主机集合”。
指定云硬盘源:
源 描述 没有源,空白云硬盘
云硬盘为空,不包括文件系统和分区表。
快照
使用一个存在的快照作为云硬盘的源。如果您选择这个选项,一个“使用快照作为源”的列表会被显示,您可以从这个列表中选择一个快照。如需了解更多与云硬盘快照相关的信息,请参阅 第 4.1.8 节 “创建、克隆或删除云硬盘快照”。
镜像
使用一个存在的镜像作为云硬盘源。如果您选择这个选项,一个“使用镜像作为源”的列表会出现,您可以从这个列表中选择一个镜像。
卷
使用一个存在的云硬盘作为云硬盘源。如果您选择这个选项,一个“将云硬盘作为源”的列表会出现,您可以从这个列表中选择一个云硬盘。
- 点创建云硬盘。云硬盘被创建后,它的名字会出现在云硬盘列表中。
4.1.2. 为创建的云硬盘指定后端
您可以配置 Block Storage 服务来使用多个后端。例如,配置 OpenStack 使用 NFS 后端介绍了如果配置 Block Storage 服务来使用一个 NFS 共享和默认后端的方法。
在创建多个 Block Storage 后端时,您还需要为每个后端创建一个云硬盘类型。然后,您可以使用这个类型来指定创建的云硬盘使用哪个后端。如需了解更多相关信息,请参阅 第 4.2.3 节 “使用云硬盘类型进行云硬盘分组设置”。
在创建云硬盘时通过在“类型”下拉列表中选择云硬盘类型来为它指定后端(请参阅 第 4.1.1 节 “创建云硬盘”)。
如果您在创建云硬盘时没有指定后端,Block Storage 服务会自动选择一个。默认情况下,它会选择有最大可用空间的设备作为后端。您也可以配置 Block Storage 服务在所有可用后端中随机进行选择。如需了解更多相关信息,请参阅 第 4.2.6 节 “配置如何在多后端间分配卷”。
4.1.3. 编辑一个云硬盘的名称或描述信息
- 在 dashboard 中选择项目 > Compute > 云硬盘。
- 按云硬盘的编辑云硬盘按钮。
- 根据需要修改云硬盘的名称和描述。
- 点编辑云硬盘保存您的改变。
要创建一个加密的卷,首先需要一个可以提供卷加密功能的卷类型。另外,Compute 和 Block Storage 服务都需要被配置为使用相同的静态密钥。如需了解更详细的信息,请参阅 第 4.2.5 节 “使用静态密钥加密卷”。
4.1.4. 删除卷
- 在 dashboard 中选择项目 > Compute > 云硬盘。
- 在云硬盘列表中,选择要删除的云硬盘。
- 点删除云硬盘。
当一个云硬盘(卷)存在快照时,这个云硬盘将无法被删除。如需了解删除快照的信息,请参阅 第 4.1.8 节 “创建、克隆或删除云硬盘快照”。
4.1.5. 为实例附加或取消附加一个云硬盘
实例可以使用一个云硬盘来进行持久保存。一个云硬盘同时只能附加到一个实例。如需了解更多与实例相关的信息,请参阅 第 3.1 节 “管理实例”。
4.1.5.1. 为实例挂载一个云硬盘
- 在 dashboard 中选择项目 > Compute > 云硬盘。
- 选择云硬盘的编辑挂载操作。如果这个云硬盘还没有挂载到一个实例,“挂载到云主机”下拉列表会被显示。
- 在挂载到云主机列表中选择需要挂载这个云硬盘的云主机。
- 点挂载云硬盘。
4.1.5.2. 从实例上断开一个云硬盘
- 在 dashboard 中选择项目 > Compute > 云硬盘。
- 选择云硬盘的管理挂载操作。如果这个云硬盘已被挂载到一个实例,实例的名称会出现在挂载项中。
- 点端口云硬盘。
4.1.6. 把云硬盘设为只读
您可以把一个云硬盘设置为允许多个用户对它进行访问,但不能对它的内容进行编辑。使用以下命令把云硬盘设置为只读
:
# cinder readonly-mode-update VOLUME true
使用目标云硬盘的 ID
替换 VOLUME
。
如果需要把只读云硬盘设为可读写,运行以下命令:
# cinder readonly-mode-update VOLUME true
4.1.7. 改变一个云硬盘的所有者
为了改变云硬盘的所有者,您需要进行一个"云硬盘传送(volume transfer)"操作。云硬盘传送操作由云硬盘的当前所有者发起,当云硬盘的新所有者接受了这个操作,云硬盘传送操作就完成了。
4.1.7.1. 通过命令行进行云硬盘传送
- 以云硬盘当前所有者身份登录。
列出有效的云硬盘:
# cinder list
启动云硬盘操作:
# cinder transfer-create VOLUME
其中的
VOLUME
是云硬盘的名称或ID
。例如:+------------+--------------------------------------+ | Property | Value | +------------+--------------------------------------+ | auth_key | f03bf51ce7ead189 | | created_at | 2014-12-08T03:46:31.884066 | | id | 3f5dc551-c675-4205-a13a-d30f88527490 | | name | None | | volume_id | bcf7d015-4843-464c-880d-7376851ca728 | +------------+--------------------------------------+
cinder transfer-create
命令清除了云硬盘的所有者设置,并为所有者转换的过程创建了一个id
和auth_key
。其它用户可以使用这些值接受所有者转换请求,并成为这个云硬盘的新所有者。新用户现在可以接受成为云硬盘的新所有者。用户需要从命令行登录并运行:
# cinder transfer-accept TRANSFERID TRANSFERKEY
其中,
TRANSFERID
和TRANSFERKEY
分别是cinder transfer-create
命令返回的id
和auth_key
的值。例如:# cinder transfer-accept 3f5dc551-c675-4205-a13a-d30f88527490 f03bf51ce7ead189
您可以使用以下命令查看所有有效的云硬盘转移:
# cinder transfer-list
4.1.7.2. 通过 Dashboard 进行云硬盘传送
通过 Dashboard 进行云硬盘传送
- 使用云硬盘(卷)所有者的身份在 dashboard 中选择项目 > 云硬盘。
- 在要进行传送的云硬盘的操作栏中选创建传送。
在创建传送对话框中,输入传送的名称,点新增存储卷迁移。
云硬盘传送操作会被创建,在存储卷迁移界面中包括了需要发送到接收项目的
传送号
和认证密钥
信息。注意认证密钥信息只会出现在存储卷迁移界面中。如果您丢失了这个信息,则需要取消这个存储卷迁移,并创建一个新的迁移来产生一个新的认证密钥。
关闭存储卷迁移界面返回卷列表。
卷的状态会变为
awaiting-transfer
,直到接收项目接受了这个转移操作
通过 dashboard 接受一个存储卷转移
- 使用接收项目所有者的身份在 dashboard 中选择项目 > 云硬盘。
- 点接受转移。
在接受存储卷转移对话框中,输入从存储卷当前所有者那里获得的
转移号
和认证密钥
,点接受存储卷转移。这个存储卷现在会出现在活跃项目的云硬盘列表中。
4.1.8. 创建、克隆或删除云硬盘快照
您可以通过创建一个云硬盘快照来保存一个云硬盘在某个时间点上的状态。然后,可以使用这个快照来克隆新的云硬盘。
为一个已经挂载到某个实例上的云硬盘创建快照可能会破坏快照的数据。如需了解如何把云硬盘从实例上断开,请参阅 第 4.1.5.2 节 “从实例上断开一个云硬盘”。
卷备份和快照有所不同。备份会保存包括在卷中的数据,而快照会保存一个卷在某个时间点上的状态。另外,当一个卷带有快照时,这个卷将无法被删除。卷备份的目的是防止数据丢失,而快照的目的是用于克隆。
因为这个原因,快照后端通常会和存储卷后端在一起,从而可以在进行克隆时最小化延迟的影响。相反的,在一个企业级的环境中,备份存储库通常会存在于不同的位置(例如,在不同的节点上、不同的物理存储上,甚至不同的地理位置)。这可以在存储卷后台被破坏时,备份数据不会受到影响。
如需了解更多与云硬盘备份相关的信息,请参阅 第 4.2.1 节 “备份和恢复一个云硬盘”。
创建云硬盘快照:
- 在 dashboard 中选择项目 > Compute > 云硬盘。
- 选择目标云硬盘的创建快照操作。
- 为快照输入一个快照名,点创建云硬盘快照。云硬盘快照标签也会显示所有快照。
当一个快照出现在云硬盘快照表中,您就可以使用它来克隆新云硬盘。点快照的创建云硬盘来克隆云硬盘。如需了解更多相关信息,请参阅 第 4.1.1 节 “创建云硬盘”。
要删除一个快照,选择删除云硬盘快照操作。
如果您的 OpenStack 部署使用 Red Hat Ceph 后端,请参阅 第 4.1.8.1 节 “Red Hat Ceph 后端中保护的快照和未保护的快照” 来获取更多相关信息。
4.1.8.1. Red Hat Ceph 后端中保护的快照和未保护的快照
当使用 Red Hat Ceph 作为 OpenStack 部署的后端时,可以把快照在后端设置为受保护的。在 OpenStack 中进行删除受保护的快照操作(通过 dashboard 或使用 cinder snapshot-delete
命令)将会失败。
如果需要删除受保护的快照,您需要先在 Red Hat Ceph 后端把快照设置为未保护,然后,就可以使用一般的方法在 OpenStack 中删除这个快照。
如需了解相关信息,请参阅 Protecting a Snapshot 和 Unprotecting a Snapshot。
4.1.9. 把一个云硬盘上传到 Image 服务
您可以把一个存在的云硬盘作为一个镜像直接上传到 Image 服务:
- 在 dashboard 中选择项目 > Compute > 云硬盘。
- 选择目标云硬盘的上传到镜像操作。
- 为云硬盘提供一个镜像名称,并从磁盘格式列表中选择一个值。
- 点上传。QEMU 磁盘镜像工具程序会使用您所提供的名称上传您所选择格式的镜像。
要查看上传的镜像,选项目 > Compute > 镜像。新的镜像会出现在镜像列表中。如需了解更多关于使用和配置镜像的信息,请参阅 第 1.2 节 “管理镜像”。
4.2. 高级卷配置
以下介绍了如何进行高级的卷管理。这些操作需要管理权限。
4.2.1. 备份和恢复一个云硬盘
云硬盘备份就是一个可以持久保存的云硬盘内容的副本。云硬盘备份通常被创建为项存储,在默认情况下,通过 Object Storage 服务进行管理。您也可以为您的备份设置不同的存储技术,OpenStack 支持 Ceph、GlusterFS 和 NFS 作为替代的存储后端。
当创建云硬盘备份时,所有备份的元数据被保存在 Block Storage 服务的数据库中。当 cinder
使用备份进行数据恢复时会使用这个元数据。因此,如果数据库已经被破坏,您在恢复云硬盘备份前需要首先恢复 Block Storage 服务的数据库。
如果您只希望配置云硬盘的一部分来使它可以在数据库被破坏的情况下仍然可以工作,您也可以导出备份的元数据。导出元数据后,您就可以在需要时把元数据重新导入到 Block Storage 数据库中。然后,就可以正常地恢复云硬盘。
卷备份和快照有所不同。备份会保存包括在卷中的数据,而快照会保存一个卷在某个时间点上的状态。另外,当一个卷带有快照时,这个卷将无法被删除。卷备份的目的是防止数据丢失,而快照的目的是用于克隆。
因为这个原因,快照后端通常会和存储卷后端在一起,从而可以在进行克隆时最小化延迟的影响。相反的,在一个企业级的环境中,备份存储库通常会存在于不同的位置(例如,在不同的节点上、不同的物理存储上,甚至不同的地理位置)。这可以在存储卷后台被破坏时,备份数据不会受到影响。
如需了解更多与云硬盘快照相关的信息,请参阅 第 4.1.8 节 “创建、克隆或删除云硬盘快照”。
4.2.1.1. 创建一个完全云硬盘备份
使用 cinder backup-create
命令可以对云硬盘进行备份。在默认情况下,这个命令会对云硬盘创建一个完全备份。如果这个云硬盘已经存在了备份,则可以创建一个增量备份(请参阅 第 4.2.1.2 节 “创建一个增量云硬盘备份”)。
您可以对您有访问权限的云硬盘进行备份。这意味着,有管理权限的用户可以备份任何云硬盘(无论这些云硬盘的所有者是谁)。如需了解更详细的信息,请参阅 第 4.2.1.1.1 节 “以 Admin 身份创建云硬盘备份”。
查看需要备份的云硬盘的
ID
或Display Name
:# cinder list
备份云硬盘:
# cinder backup-create VOLUME
使用要备份的云硬盘的
ID
或Display Name
替换 VOLUME。例如:+-----------+--------------------------------------+ | Property | Value | +-----------+--------------------------------------+ | id | e9d15fc7-eeae-4ca4-aa72-d52536dc551d | | name | None | | volume_id | 5f75430a-abff-4cc7-b74e-f808234fa6c5 | +-----------+--------------------------------------+
注意备份的
volume_id
会和被备份的源云硬盘的ID
相同。运行以下命令检查云硬盘备份是否已经成功完成:
# cinder backup-list
当备份项的
Status
为available
时,意味着云硬盘备份已完成。
现在,您还可以导出并保存云硬盘备份的元数据。这将使您可以在 Block Storage 数据库被破坏的情况下仍然可以恢复云硬盘的备份。运行以下命令:
# cinder --os-volume-api-version 2 backup-export BACKUPID
其中的 BACKUPID 是云硬盘备份的 ID 或名称。例如:
+----------------+------------------------------------------+ | Property | Value | +----------------+------------------------------------------+ | backup_service | cinder.backup.drivers.swift | | backup_url | eyJzdGF0dXMiOiAiYXZhaWxhYmxlIiwgIm9iam...| | | ...4NS02ZmY4MzBhZWYwNWUiLCAic2l6ZSI6IDF9 | +----------------+------------------------------------------+
云硬盘备份的元数据包括 backup_service
和 backup_url
的值。
4.2.1.1.1. 以 Admin 身份创建云硬盘备份
具有管理权限的用户(例如默认的 admin
用户)可以备份 OpenStack 管理的任何云硬盘。当 admin 用户备份一个所有者是非 admin 用户的云硬盘时,在默认情况下,所做的备份对云硬盘的所有者不可见。
作为一个 admin 用户,您可以创建一个云硬盘的备份,并且使这个备份对特定的租户有效。运行以下命令:
# cinder --os-auth-url KEYSTONEURL --os-tenant-name TENANTNAME --os-username USERNAME --os-password PASSWD backup-create VOLUME
其中:
- TENANTNAME 是可以访问这个备份的租户的名称。
- USERNAME 和 PASSWD 是 TENANTNAME 内的一个用户的 username/password 信息
- VOLUME 是您需要备份的云硬盘的名称或 ID。
- KEYSTONEURL 是 Identity 服务的 URL 端点(通常是 http://IP:5000/v2,其中的 IP 是 Identity 服务主机的 IP 地址)。
在进行这个操作时,备份的大小会占用 TENANTNAME 的配额,而不会占用 admin 的配额。
4.2.1.2. 创建一个增量云硬盘备份
在默认情况下,cinder backup-create
命令会对云硬盘创建一个完全备份。如果这个云硬盘已经存在了备份,则可以创建一个增量备份。
因为云硬盘的数据可能会随着使用时间的增加变得非常大,因此定期进行完全备份会消耗大量资源。而增量备份只记录从上一次备份(完全备份或增量备份)以来数据的变化,这样就可以定期记录云硬盘上数据的所有变化,同时最小化对资源的消耗。
使用 --incremental
选项创建一个增量备份:
# cinder backup-create VOLUME --incremental
使用要备份的云硬盘的 ID
或 Display Name
替换 VOLUME。
当存在增量备份时,不能删除相关的完全备份。例如,当一个完全备份有多个增量备份时,您只能删除最后一个增量备份。
增量备份在 NFS 和 Object Storage 备份存储库中被完全支持。Ceph 备份存储库也支持增量备份,但只针对于存储在 Ceph 后端的存储卷。
4.2.1.3. 当 Block Storage 数据库损坏时恢复云硬盘
Block Storage 数据库包括了云硬盘备份服务(openstack-cinder-backup
)所需的元数据,因此一般情况下,Block Storage 数据库损坏时将无法恢复一个云硬盘备份。元数据包括 backup_service
和 backup_url
的值,您可以在创建备份后导出它们(第 4.2.1.1 节 “创建一个完全云硬盘备份”)。
如果您已经导出并保存了元数据,就可以在需要时把它导入到一个新的 Block Storage 数据库,这样就可以对云硬盘备份进行恢复。
使用带有管理员权限的用户运行:
# cinder --os-volume-api-version 2 backup-import backup_service backup_url
其中的 backup_service 和 backup_url 包括在您导出的元数据中。例如,使用 第 4.2.1.1 节 “创建一个完全云硬盘备份” 导出的元数据:
# cinder --os-volume-api-version 2 backup-import cinder.backup.drivers.swift eyJzdGF0dXMi...c2l6ZSI6IDF9 +----------+--------------------------------------+ | Property | Value | +----------+--------------------------------------+ | id | 77951e2f-4aff-4365-8c64-f833802eaa43 | | name | None | +----------+--------------------------------------+
- 在元数据被导入到 Block Storage 服务数据库后,您就可以象一般情况一样恢复云硬盘(请参阅 第 4.2.1.4 节 “从备份恢复一个云硬盘”)。
4.2.1.4. 从备份恢复一个云硬盘
找到您需要使用的云硬盘备份的
ID
:# cinder backup-list
Volume ID
需要和您要恢复的云硬盘的 ID 相匹配。恢复云硬盘备份:
# cinder backup-restore BACKUP_ID
其中的 BACKUP_ID 是您要使用的云硬盘备份的 ID。
如果您不再需要一个备份,运行以下命令删除它:
# cinder backup-delete BACKUP_ID
4.2.1.5. 查看和修改租户的备份配额
和多数租户存储配额(云硬盘数量、云硬盘存储、快照等)不同,备份的配额当前还无法通过 dashboard 进行修改。
当前,备份配额只能通过命令行进行修改(使用 cinder quota-update
命令)。
使用以下命令查看某个特定租户(TENANTNAME)的存储配额:
# cinder quota-show TENANTNAME
运行以下命令更新一个特定租户可以创建的最大备份数量(MAXNUM):
# cinder quota-update --backups MAXNUM TENANTNAME
运行以下命令更新一个特定租户可以创建的所有备份的总量(MAXGB):
# cinder quota-update --backup-gigabytes MAXGB TENANTNAME
运行以下命令查看一个特定租户的存储配额的使用情况:
# cinder quota-usage TENANTNAME
4.2.1.6. 通过 Dashboard 启用云硬盘备份管理功能
现在,您可以通过 dashboard 创建、查看、删除和恢复云硬盘备份。使用项目 > Compute > 云硬盘 > 云硬盘备份标签页可以进行这些操作。
在默认情况下,云硬盘备份标签页没有被启用,您需要根据以下步骤配置 dashboard 来启用它:
-
打开
/etc/openstack-dashboard/local_settings
文件。 找到以下设置:
OPENSTACK_CINDER_FEATURES = { 'enable_backup': False, }
把这个设置改为:
OPENSTACK_CINDER_FEATURES = { 'enable_backup': True, }
通过重启
httpd
服务来重启 dashboard:# systemctl restart httpd.service
4.2.1.7. 设置一个 NFS 共享作为备份存储库
在默认情况下,Block Storage 服务使用 Object Storage 服务作为备份的存储库。您可以使用以下方法,把 Block Storage 服务配置为使用一个存在的 NFS 共享作为备份存储库:
- 使用一个带有管理权限的用户登录到提供备份服务(openstack-cinder-backup)的节点上。
把 Block Storage 服务配置为使用 NFS 备份驱动(
cinder.backup.drivers.nfs
):# openstack-config --set /etc/cinder/cinder.conf DEFAULT backup_driver cinder.backup.drivers.nfs
设置您需要作为备份存储库使用的 NFS 共享:
# openstack-config --set /etc/cinder/cinder.conf DEFAULT backup_share NFSHOST:PATH
其中:
- NFSHOST 是 NFS 服务器的 IP 地址或主机名。
- PATH 是 NFS 共享在 NFSHOST 上的绝对路径。
运行以下命令可以为 NFS 共享设置可选的挂载配置:
# openstack-config --set /etc/cinder/cinder.conf DEFAULT backup_mount_options NFSMOUNTOPTS
其中,NFSMOUNTOPTS 是由逗号分隔的 NFS 挂载选项(例如,
rw,sync
)。如需了解更多相关信息,请参阅 nfs 和 mount 的 man 页。重启 Block Storage 备份服务来使所做的改变生效:
# systemctl restart openstack-cinder-backup.service
4.2.1.7.1. 设置不同的备份文件大小
备份服务会使用一个最大的备份文件大小设置来限制备份文件的大小,当云硬盘备份的实际大小超过这个值时,备份会被分为多个文件。备份文件大小的默认值是 1.8GB。
运行以下命令可以修改备份文件大小的设置:
# openstack-config --set /etc/cinder/cinder.conf DEFAULT backup_file_size SIZE
使用您实际需要的值替换 SIZE(以字节为单位)。重启 Block Storage 备份服务使所做的修改生效:
# systemctl restart openstack-cinder-backup.service
4.2.2. 迁移卷
只有管理员可以迁移卷。迁移卷时卷不能被使用,也不能有任何快照。
以一个管理员用户的身份,列出所有有效的卷:
# cinder list
列出有效的后端(主机)和它们相关的可用域:
# cinder-manage host list
初始迁移的过程:
# cinder migrate VOLUME BACKEND
其中:
-
VOLUME
是要迁移卷的ID
。 -
BACKEND
是卷要被迁移到的后端。
-
查看迁移卷的当前状态:
# cinder show VOLUME
例如:
# cinder show 45a85c3c-3715-484d-ab5d-745da0e0bd5a +---------------------------------------+------------------+ | Property | Value | +---------------------------------------+------------------+ | ... | ... | | os-vol-host-attr:host | server1 | | os-vol-mig-status-attr:migstat | None | | ... | ... | +---------------------------------------+------------------+
在迁移过程中,请关注以下属性:
- os-vol-host-attr:host
- 卷当前的后台。当迁移完成后,它的值会变为目标后台(BACKEND 的值)。
- os-vol-mig-status-attr:migstat
-
迁移的状态。当它的值为
None
时说明迁移没有在进行。
4.2.3. 使用云硬盘类型进行云硬盘分组设置
OpenStack 允许您创建云硬盘类型,并在创建一个云硬盘时应用云硬盘类型中包括的设置(第 4.1.1 节 “创建云硬盘”)。例如,您可以设置:
- 是否对云硬盘进行加密(第 4.2.5.2 节 “配置云硬盘类型加密”)
- 云硬盘所使用的后端(第 4.1.2 节 “为创建的云硬盘指定后端”)
- Quality-of-Service (QoS) 规格
使用“键-值”对来与云硬盘类型进行关联的设置被称为特别设定(Extra Specs)。当您在创建云硬盘时指定一个云硬盘类型,Block Storage 调度器会应用这些使用“键/值”对指定的设置。您可以为同一个云硬盘类型关联多个“键/值”对。
云硬盘类型可以为不同用户提供不同级别的存储级别。通过使用“键/值”对为云硬盘类型关联相关的设置,您可以为不同的云硬盘类型指定不同的存储级别。然后,您就可以在创建云硬盘时通过指定云硬盘类型来为云硬盘指定相应的存储级别。
被支持的特别设定会根据卷驱动的不同而有所不同。请参考您的卷驱动的相关文档来获得详细信息。
4.2.3.1. 创建并配置一个云硬盘类型
- 使用一个 admin 用户,在 dashboard 中选择管理员 > 云硬盘 > 云硬盘类型。
- 点创建云硬盘类型。
- 在名称项中输入云硬盘类型的名称。
- 点创建云硬盘类型。新类型会出现在云硬盘类型项中。
- 选择云硬盘类型的查看特别设定操作。
- 点创建,设置键和值。所指定的键/值对必须有效,否则在创建云硬盘时指定云硬盘类型会出现错误。
- 点创建。相关联的设置(“键/值”对)会出现在特别设定列表中。
在默认情况下,所有的云硬盘类型对于所有 OpenStack 租户都有效。如果您创建的云硬盘类型需要对租户访问进行限制时,则需要使用 CLI 进行设置。如需了解相关信息,请参阅 第 4.2.3.4 节 “创建和配置私有云硬盘类型”。
您也可以为云硬盘类型关联一个 QOS 规格。如需了解详细信息,请参阅 第 4.2.4.2 节 “为云硬盘类型关联一个 QOS 规格”。
4.2.3.2. 编辑一个云硬盘类型
- 使用一个 admin 用户,在 dashboard 中选择管理员 > 云硬盘 > 云硬盘类型。
- 在云硬盘类型项中,选择云硬盘类型的查看特定设置操作。
在卷扩展规格属性列表中,您可以:
- 为云硬盘类型添加新设置。点创建,指定需要和这个云硬盘类型相关联的“键/值”对。
- 编辑一个存在的设置。选择编辑操作。
- 删除已存在的设置。点删除额外规格按钮。
4.2.3.3. 删除一个云硬盘类型
要删除一个云硬盘类型,在云硬盘类型列表中选择相应的云硬盘并点删除云硬盘类型。
4.2.3.4. 创建和配置私有云硬盘类型
在默认情况下,所有的云硬盘类型对于所有 OpenStack 租户都有效。您可以在创建云硬盘类型的过程中修改这个设置,把所创建的云硬盘类型设置为私有(把它的 Is_Public
标记设置为 False
)。
通过设置私有云硬盘类型,可以限制对特定云硬盘类型的访问。一般情况下,某些设置(例如,需要进行测试的新后端或超高性能配置)应该只可以被特定租户使用。
运行以下命令创建一个私有云硬盘类型:
# cinder --os-volume-api-version 2 type-create --is-public false _VTYPE_
+ 使用私有云硬盘类型的名称替换 VTYPE。
在默认情况下,私有云硬盘类型只能被它的创建者访问。admin 用户可以使用以下命令找到并查看私有云硬盘类型:
# cinder --os-volume-api-version 2 type-list --all
这个命令会列出公共云硬盘类型和私有云硬盘类型,并列出它们的名称和 ID。您需要使用云硬盘类型的 ID 对它们进行访问。
分配私有云硬盘类型的访问权限是在租户一级进行的。运行以下命令可以为一个租户分配访问一个私有云硬盘类型的权限:
# cinder --os-volume-api-version 2 type-access-add --volume-type _VTYPEID_ --project-id _TENANTID_
其中:
- VTYPEID 是私有云硬盘类型的 ID。
- TENANTID 是被分配可以访问 VTYPEID 权限的项目/租户 ID。
运行以下命令可以查看哪些租户可以访问某个私有云硬盘类型:
# cinder --os-volume-api-version 2 type-access-list --volume-type _VTYPE_
运行以下命令可以把一个租户从一个私有云硬盘的访问列表中删除:
# cinder --os-volume-api-version 2 type-access-remove --volume-type _VTYPE_ --project-id _TENANTID_
在默认情况下,只有具有管理权限的用户才可以创建、查看或配置私有云硬盘类型的访问权限。
4.2.4. 使用服务质量规格
您可以把多个性能设置包括在一个服务质量规格( Quality-of-Service specification,简称 QOS Specs)中,这样,就可以为不同类型的用户提供相应服务质量的性能。
和卷类型相似,性能设置通过一个“关键字/值”数据对来映射到规格。服务质量规格和卷类型的不同之处在于:
服务质量规格被用来实现性能设置,包括对磁盘读/写的限制。不同的存储驱动会支持不同性能设置。
如需了解您的后端所支持的 QOS 规格,请参阅您的后端设备的卷驱动文档。
- 卷类型会直接应用到卷,而 QOS 规格会与卷类型相关联。在创建卷时,指定卷类型的同时也会应用和这个卷类型相关联的 QOS 规格中定义的性能设置。
4.2.4.1. 创建并配置一个 QOS 规格
作为管理员,您可以通过 QOS 规格列表创建并配置 QOS 规格。您可以为同一个 QOS 规格管理多个“键/值”对。
- 使用一个 admin 用户,在 dashboard 中选择管理员 > 云硬盘 > 云硬盘类型。
- 在 QOS 规格项中点创建 QOS 规格。
- 为 QOS 规格 输入一个名称。
在消费者项中指定 QOS 规格在哪里被强制执行:
表 4.1. 消费者类型 类型 描述 back-end
QOS 规格需要应用到 Block Storage 后端。
front-end
QOS 规格需要应用到 Compute。
both
QOS 规格将应用到 Block Storage 和 Compute。
- 点创建。新创建的 QOS 规格应该出现在 QOS 规格列表中。
- 在 QOS 规格列表中,选择新规格的管理规格操作。
- 点创建,设置键和值。所指定的键/值对必须有效,否则在创建云硬盘时,指定和这个 QOS 规格相关联的云硬盘类型时会出现错误。
- 点创建。相关联的设置(“键/值”对)会出现在键值对列表中。
4.2.4.2. 为云硬盘类型关联一个 QOS 规格
作为一个管理员,您可以使用云硬盘类型列表为一个存在的卷类型关联 QOS 规格。
- 使用一个 admin 用户,在 dashboard 中选择管理员 > 云硬盘 > 云硬盘类型。
- 在云硬盘类型项中,选择云硬盘类型的管理 QOS 规格关联操作。
- 从要关联的 QOS 规格下拉列表中选择一个 QOS 规格。
- 点关联。所选的 QOS 规格将会出现在被编辑的云硬盘类型的已关联 QOS 规格栏中。
4.2.4.3. 为云硬盘类型取消关联一个 QOS 规格
- 使用一个 admin 用户,在 dashboard 中选择管理员 > 云硬盘 > 云硬盘类型。
- 在云硬盘类型项中,选择云硬盘类型的管理 QOS 规格关联操作。
- 从要关联的 QOS 规格列表中选择 None。
- 点关联。所选的 QOS 规格将会不会出现在被编辑的云硬盘类型的已关联 QOS 规格栏中。
4.2.5. 使用静态密钥加密卷
对卷进行加密可以在卷后台的安全性被破坏时为数据提供基本的安全保护。被加密卷的内容只有在使用一个特定密钥时才可以被读写;Compute 和 Block Storage 服务都需要被配置为使用相同的密钥来使实例可以使用加密的卷。以下介绍了如何配置 OpenStack 部署来使用一个密钥来加密卷。
4.2.5.1. 创建一个静态密钥
实现基本卷加密的第一步是设置一个静态密钥(static key)。这个密钥需要是一个十六进制的字符串,并被 Block Storage 卷服务(openstack-cinder-volume
)和所有 Compute 服务(openstack-nova-compute
)使用。要设置这两个服务使用这个密钥,在它们的相关配置文件中的 [keymgr]
项中使用这个密钥作为 fixed_key
的值。
-
通过命令行,以
root
身份登录到包括openstack-cinder-volume
的节点。 设置静态密钥:
# openstack-config --set /etc/cinder/cinder.conf keymgr fixed_key HEX_KEY
把
HEX_KEY
替换为一个 16 位的十六进制密钥值(例如0000000000000000000000000000000000000000000000000000000000000000
)。重启 Block Storage 卷服务:
# openstack-service restart cinder-volume
登录到包括
openstack-nova-compute
的节点,设置相同的静态密钥:# openstack-config --set /etc/nova/nova.conf keymgr fixed_key HEX_KEY
注意如果您有多个 Compute 节点(多个节点都包括
openstack-nova-compute
),您需要在每个节点的/etc/nova/nova.conf
中设置相同的静态密钥。重启 Compute 服务:
# openstack-service restart nova-compute
注意同样,如果您在多个 Compute 节点上设置了静态密钥,您需要在每个节点上都重启
openstack-nova-compute
服务。
到目前为止,Compute 和 Block Storage 卷服务都可以使用相同的静态密钥对卷进行加密和解密。新的实例将可以使用经过静态密钥(HEX_KEY
)加密的卷。
4.2.5.2. 配置云硬盘类型加密
为了使用 第 4.2.5.1 节 “创建一个静态密钥” 创建的静态密钥对云硬盘进行加密,您需要一个加密的云硬盘类型。配置一个加密的云硬盘类型包括设置 provider class、cipher 和 key_size。运行以下命令:
# cinder encryption-type-create --cipher aes-xts-plain64 --key_size BITSIZE --control_location front-end VOLTYPE nova.volume.encryptors.luks.LuksEncryptor
其中:
-
BITSIZE
是密钥的大小(例如,512
代表 512 位的密钥)。 -
VOLTYPE
是您需要加密的云硬盘类型的名称。
这个命令设置了 nova.volume.encryptors.luks.LuksEncryptor
provider class 和 aes-xts-plain64
cipher。在这个发行版本中,云硬盘加密只支持这个 class/cipher 配置。
在您创建了一个加密的云硬盘类型后,您就可以在创建加密云硬盘时自动使用它。在创建云硬盘窗口中的类型下拉菜单中选择需要的加密云硬盘类型(请参阅 第 4.1 节 “基本云硬盘(Volume)的使用和配置”)。
4.2.6. 配置如何在多后端间分配卷
如果 Block Storage 服务被配置为使用多后端,您可以使用配置的云硬盘类型来指定卷可以在哪里创建。如需更详细的信息,请参阅 第 4.1.2 节 “为创建的云硬盘指定后端”。
如果在创建云硬盘的过程中没有进行指定,Block Storage 服务会自动选择一个后端。Block Storage 把第一个定义的后端作为默认的后端,在这个后端还有空间时,它会被使用。如果第一个后端没有可用的空间,Block Storage 会把第 2 个后端设置为默认后端。以此类推。
如果这无法满足您的要求,则可以使用过滤调度程序来控制 Block Storage 如何选择后端。调度程序会根据不同的过滤规则选择适当的后端,例如:
- AvailabilityZoneFilter
- 过滤掉不符合所需卷的可用域要求的后端。
- CapacityFilter
- 只选择有足够空间的后端来保存云硬盘
- CapabilitiesFilter
- 只选择可以支持卷中的所有指定设置的后端
按照以下步骤配置过滤器:
启用
FilterScheduler
。# openstack-config --set /etc/cinder/cinder.conf DEFAULT scheduler_driver cinder.scheduler.filter_scheduler.FilterScheduler
设置哪个过滤器应该被激活:
# openstack-config --set /etc/cinder/cinder.conf DEFAULT scheduler_default_filters AvailabilityZoneFilter,CapacityFilter,CapabilitiesFilter
配置调度程序如何选择适当的后端。如果您需要调度程序:
总选择具有最多可用空间的后端,运行:
# openstack-config --set /etc/cinder/cinder.conf DEFAULT scheduler_default_weighers AllocatedCapacityWeigher # openstack-config --set /etc/cinder/cinder.conf DEFAULT allocated_capacity_weight_multiplier -1.0
在适当后端中随机选择,运行:
# openstack-config --set /etc/cinder/cinder.conf DEFAULT scheduler_default_weighers ChanceWeigher
重启 Block Storage 调度程序来使您的改变生效:
# openstack-service restart openstack-cinder-scheduler