搜索

第 4 章 管理卷(云硬盘)

download PDF

卷就是一个块存储设备,它为 OpenStack 实例提供持久性的存储。在 Red Hat Enterprise OpenStack Platform 中,卷有时也被称为云硬盘。

4.1. 基本云硬盘(Volume)的使用和配置

以下介绍了对最终用户的云硬盘进行基本管理的方法

4.1.1. 创建云硬盘

  1. 在 dashboard 中选择项目 > Compute > 云硬盘
  2. 创建云硬盘,编辑以下项:

    描述

    云硬盘名称

    云硬盘的名称

    描述

    对云硬盘的描述信息(可选)

    类型

    卷类型(可选)。请参阅 第 4.2.3 节 “使用云硬盘类型进行云硬盘分组设置”

    如果您有多个块存储后端,您可以在这里选择一个后端。请参阅 第 4.1.2 节 “为创建的云硬盘指定后端”

    大小(GB)

    卷的大小(以 GB 为单位)

    可用域

    可用域(逻辑服务器组)和主机集合(host aggregate)是在 OpenStack 中进行资源聚合的常用方法。可用域在安装的过程中被定义。如需了解更多与可用域和主机集合相关的信息,请参阅 第 3.4 节 “管理主机集合”

  3. 指定云硬盘源

    描述

    没有源,空白云硬盘

    云硬盘为空,不包括文件系统和分区表。

    快照

    使用一个存在的快照作为云硬盘的源。如果您选择这个选项,一个“使用快照作为源”的列表会被显示,您可以从这个列表中选择一个快照。如需了解更多与云硬盘快照相关的信息,请参阅 第 4.1.8 节 “创建、克隆或删除云硬盘快照”

    镜像

    使用一个存在的镜像作为云硬盘源。如果您选择这个选项,一个“使用镜像作为源”的列表会出现,您可以从这个列表中选择一个镜像。

    使用一个存在的云硬盘作为云硬盘源。如果您选择这个选项,一个“将云硬盘作为源”的列表会出现,您可以从这个列表中选择一个云硬盘。

  4. 创建云硬盘。云硬盘被创建后,它的名字会出现在云硬盘列表中。

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. 编辑一个云硬盘的名称或描述信息

  1. 在 dashboard 中选择项目 > Compute > 云硬盘
  2. 按云硬盘的编辑云硬盘按钮。
  3. 根据需要修改云硬盘的名称和描述。
  4. 编辑云硬盘保存您的改变。
注意

要创建一个加密的卷,首先需要一个可以提供卷加密功能的卷类型。另外,Compute 和 Block Storage 服务都需要被配置为使用相同的静态密钥。如需了解更详细的信息,请参阅 第 4.2.5 节 “使用静态密钥加密卷”

4.1.4. 删除卷

  1. 在 dashboard 中选择项目 > Compute > 云硬盘
  2. 云硬盘列表中,选择要删除的云硬盘。
  3. 删除云硬盘
注意

当一个云硬盘(卷)存在快照时,这个云硬盘将无法被删除。如需了解删除快照的信息,请参阅 第 4.1.8 节 “创建、克隆或删除云硬盘快照”

4.1.5. 为实例附加或取消附加一个云硬盘

实例可以使用一个云硬盘来进行持久保存。一个云硬盘同时只能附加到一个实例。如需了解更多与实例相关的信息,请参阅 第 3.1 节 “管理实例”

4.1.5.1. 为实例挂载一个云硬盘

  1. 在 dashboard 中选择项目 > Compute > 云硬盘
  2. 选择云硬盘的编辑挂载操作。如果这个云硬盘还没有挂载到一个实例,“挂载到云主机”下拉列表会被显示。
  3. 挂载到云主机列表中选择需要挂载这个云硬盘的云主机。
  4. 挂载云硬盘

4.1.5.2. 从实例上断开一个云硬盘

  1. 在 dashboard 中选择项目 > Compute > 云硬盘
  2. 选择云硬盘的管理挂载操作。如果这个云硬盘已被挂载到一个实例,实例的名称会出现在挂载项中。
  3. 端口云硬盘

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. 通过命令行进行云硬盘传送

  1. 以云硬盘当前所有者身份登录。
  2. 列出有效的云硬盘:

    # cinder list
  3. 启动云硬盘操作:

    # 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 命令清除了云硬盘的所有者设置,并为所有者转换的过程创建了一个 idauth_key。其它用户可以使用这些值接受所有者转换请求,并成为这个云硬盘的新所有者。

  4. 新用户现在可以接受成为云硬盘的新所有者。用户需要从命令行登录并运行:

    # cinder transfer-accept TRANSFERID TRANSFERKEY

    其中,TRANSFERIDTRANSFERKEY 分别是 cinder transfer-create 命令返回的 idauth_key 的值。例如:

    # cinder transfer-accept 3f5dc551-c675-4205-a13a-d30f88527490 f03bf51ce7ead189
注意

您可以使用以下命令查看所有有效的云硬盘转移:

# cinder transfer-list

4.1.7.2. 通过 Dashboard 进行云硬盘传送

通过 Dashboard 进行云硬盘传送

  1. 使用云硬盘(卷)所有者的身份在 dashboard 中选择项目 > 云硬盘
  2. 在要进行传送的云硬盘的操作栏中选创建传送
  3. 创建传送对话框中,输入传送的名称,点新增存储卷迁移

    云硬盘传送操作会被创建,在存储卷迁移界面中包括了需要发送到接收项目的传送号认证密钥信息。

    注意

    认证密钥信息只会出现在存储卷迁移界面中。如果您丢失了这个信息,则需要取消这个存储卷迁移,并创建一个新的迁移来产生一个新的认证密钥。

  4. 关闭存储卷迁移界面返回卷列表。

    卷的状态会变为 awaiting-transfer,直到接收项目接受了这个转移操作

通过 dashboard 接受一个存储卷转移

  1. 使用接收项目所有者的身份在 dashboard 中选择项目 > 云硬盘
  2. 接受转移
  3. 接受存储卷转移对话框中,输入从存储卷当前所有者那里获得的转移号认证密钥,点接受存储卷转移

    这个存储卷现在会出现在活跃项目的云硬盘列表中。

4.1.8. 创建、克隆或删除云硬盘快照

您可以通过创建一个云硬盘快照来保存一个云硬盘在某个时间点上的状态。然后,可以使用这个快照来克隆新的云硬盘。

警告

为一个已经挂载到某个实例上的云硬盘创建快照可能会破坏快照的数据。如需了解如何把云硬盘从实例上断开,请参阅 第 4.1.5.2 节 “从实例上断开一个云硬盘”

注意

卷备份和快照有所不同。备份会保存包括在卷中的数据,而快照会保存一个卷在某个时间点上的状态。另外,当一个卷带有快照时,这个卷将无法被删除。卷备份的目的是防止数据丢失,而快照的目的是用于克隆。

因为这个原因,快照后端通常会和存储卷后端在一起,从而可以在进行克隆时最小化延迟的影响。相反的,在一个企业级的环境中,备份存储库通常会存在于不同的位置(例如,在不同的节点上、不同的物理存储上,甚至不同的地理位置)。这可以在存储卷后台被破坏时,备份数据不会受到影响。

如需了解更多与云硬盘备份相关的信息,请参阅 第 4.2.1 节 “备份和恢复一个云硬盘”

创建云硬盘快照:

  1. 在 dashboard 中选择项目 > Compute > 云硬盘
  2. 选择目标云硬盘的创建快照操作。
  3. 为快照输入一个快照名,点创建云硬盘快照云硬盘快照标签也会显示所有快照。

当一个快照出现在云硬盘快照表中,您就可以使用它来克隆新云硬盘。点快照的创建云硬盘来克隆云硬盘。如需了解更多相关信息,请参阅 第 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 SnapshotUnprotecting a Snapshot

4.1.9. 把一个云硬盘上传到 Image 服务

您可以把一个存在的云硬盘作为一个镜像直接上传到 Image 服务:

  1. 在 dashboard 中选择项目 > Compute > 云硬盘
  2. 选择目标云硬盘的上传到镜像操作。
  3. 为云硬盘提供一个镜像名称,并从磁盘格式列表中选择一个值。
  4. 上传。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 身份创建云硬盘备份”

  1. 查看需要备份的云硬盘的 IDDisplay Name

    # cinder list
  2. 备份云硬盘:

    # cinder backup-create VOLUME

    使用要备份的云硬盘的 IDDisplay Name 替换 VOLUME。例如:

      +-----------+--------------------------------------+
      |  Property |                Value                 |
      +-----------+--------------------------------------+
      |     id    | e9d15fc7-eeae-4ca4-aa72-d52536dc551d |
      |    name   |                 None                 |
      | volume_id | 5f75430a-abff-4cc7-b74e-f808234fa6c5 |
      +-----------+--------------------------------------+
    注意

    备份的 volume_id 会和被备份的源云硬盘的 ID 相同。

  3. 运行以下命令检查云硬盘备份是否已经成功完成:

    # cinder backup-list

    当备份项的 Statusavailable 时,意味着云硬盘备份已完成。

现在,您还可以导出并保存云硬盘备份的元数据。这将使您可以在 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_servicebackup_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 是可以访问这个备份的租户的名称。
  • USERNAMEPASSWDTENANTNAME 内的一个用户的 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

使用要备份的云硬盘的 IDDisplay Name 替换 VOLUME

注意

当存在增量备份时,不能删除相关的完全备份。例如,当一个完全备份有多个增量备份时,您只能删除最后一个增量备份。

增量备份在 NFS 和 Object Storage 备份存储库中被完全支持。Ceph 备份存储库也支持增量备份,但只针对于存储在 Ceph 后端的存储卷。

4.2.1.3. 当 Block Storage 数据库损坏时恢复云硬盘

Block Storage 数据库包括了云硬盘备份服务(openstack-cinder-backup)所需的元数据,因此一般情况下,Block Storage 数据库损坏时将无法恢复一个云硬盘备份。元数据包括 backup_servicebackup_url 的值,您可以在创建备份后导出它们(第 4.2.1.1 节 “创建一个完全云硬盘备份”)。

如果您已经导出并保存了元数据,就可以在需要时把它导入到一个新的 Block Storage 数据库,这样就可以对云硬盘备份进行恢复。

  1. 使用带有管理员权限的用户运行:

    # cinder --os-volume-api-version 2 backup-import backup_service backup_url

    其中的 backup_servicebackup_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                 |
    +----------+--------------------------------------+
  2. 在元数据被导入到 Block Storage 服务数据库后,您就可以象一般情况一样恢复云硬盘(请参阅 第 4.2.1.4 节 “从备份恢复一个云硬盘”)。

4.2.1.4. 从备份恢复一个云硬盘

  1. 找到您需要使用的云硬盘备份的 ID

    # cinder backup-list

    Volume ID 需要和您要恢复的云硬盘的 ID 相匹配。

  2. 恢复云硬盘备份:

    # cinder backup-restore BACKUP_ID

    其中的 BACKUP_ID 是您要使用的云硬盘备份的 ID。

  3. 如果您不再需要一个备份,运行以下命令删除它:

    # 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 来启用它:

  1. 打开 /etc/openstack-dashboard/local_settings 文件。
  2. 找到以下设置:

    OPENSTACK_CINDER_FEATURES = {
        'enable_backup': False,
    }

    把这个设置改为:

    OPENSTACK_CINDER_FEATURES = {
        'enable_backup': True,
    }
  3. 通过重启 httpd 服务来重启 dashboard:

    # systemctl restart httpd.service

4.2.1.7. 设置一个 NFS 共享作为备份存储库

在默认情况下,Block Storage 服务使用 Object Storage 服务作为备份的存储库。您可以使用以下方法,把 Block Storage 服务配置为使用一个存在的 NFS 共享作为备份存储库:

  1. 使用一个带有管理权限的用户登录到提供备份服务(openstack-cinder-backup)的节点上。
  2. 把 Block Storage 服务配置为使用 NFS 备份驱动(cinder.backup.drivers.nfs):

    # openstack-config --set /etc/cinder/cinder.conf DEFAULT backup_driver cinder.backup.drivers.nfs
  3. 设置您需要作为备份存储库使用的 NFS 共享:

    # openstack-config --set /etc/cinder/cinder.conf DEFAULT backup_share NFSHOST:PATH

    其中:

    • NFSHOST 是 NFS 服务器的 IP 地址或主机名。
    • PATH 是 NFS 共享在 NFSHOST 上的绝对路径。
  4. 运行以下命令可以为 NFS 共享设置可选的挂载配置:

    # openstack-config --set /etc/cinder/cinder.conf DEFAULT backup_mount_options NFSMOUNTOPTS

    其中,NFSMOUNTOPTS 是由逗号分隔的 NFS 挂载选项(例如,rw,sync)。如需了解更多相关信息,请参阅 nfsmountman 页。

  5. 重启 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. 迁移卷

只有管理员可以迁移卷。迁移卷时卷不能被使用,也不能有任何快照。

  1. 以一个管理员用户的身份,列出所有有效的卷:

    # cinder list
  2. 列出有效的后端(主机)和它们相关的可用域:

    # cinder-manage host list
  3. 初始迁移的过程:

    # cinder migrate VOLUME BACKEND

    其中:

    • VOLUME 是要迁移卷的 ID
    • BACKEND 是卷要被迁移到的后端。
  4. 查看迁移卷的当前状态:

    # 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 节 “创建云硬盘”)。例如,您可以设置:

使用“键-值”对来与云硬盘类型进行关联的设置被称为特别设定(Extra Specs)。当您在创建云硬盘时指定一个云硬盘类型,Block Storage 调度器会应用这些使用“键/值”对指定的设置。您可以为同一个云硬盘类型关联多个“键/值”对。

云硬盘类型可以为不同用户提供不同级别的存储级别。通过使用“键/值”对为云硬盘类型关联相关的设置,您可以为不同的云硬盘类型指定不同的存储级别。然后,您就可以在创建云硬盘时通过指定云硬盘类型来为云硬盘指定相应的存储级别。

注意

被支持的特别设定会根据卷驱动的不同而有所不同。请参考您的卷驱动的相关文档来获得详细信息。

4.2.3.1. 创建并配置一个云硬盘类型

  1. 使用一个 admin 用户,在 dashboard 中选择管理员 > 云硬盘 > 云硬盘类型
  2. 创建云硬盘类型
  3. 名称项中输入云硬盘类型的名称。
  4. 创建云硬盘类型。新类型会出现在云硬盘类型项中。
  5. 选择云硬盘类型的查看特别设定操作。
  6. 创建,设置。所指定的键/值对必须有效,否则在创建云硬盘时指定云硬盘类型会出现错误。
  7. 创建。相关联的设置(“键/值”对)会出现在特别设定列表中。

在默认情况下,所有的云硬盘类型对于所有 OpenStack 租户都有效。如果您创建的云硬盘类型需要对租户访问进行限制时,则需要使用 CLI 进行设置。如需了解相关信息,请参阅 第 4.2.3.4 节 “创建和配置私有云硬盘类型”

注意

您也可以为云硬盘类型关联一个 QOS 规格。如需了解详细信息,请参阅 第 4.2.4.2 节 “为云硬盘类型关联一个 QOS 规格”

4.2.3.2. 编辑一个云硬盘类型

  1. 使用一个 admin 用户,在 dashboard 中选择管理员 > 云硬盘 > 云硬盘类型
  2. 云硬盘类型项中,选择云硬盘类型的查看特定设置操作。
  3. 卷扩展规格属性列表中,您可以:

    • 为云硬盘类型添加新设置。点创建,指定需要和这个云硬盘类型相关联的“键/值”对。
    • 编辑一个存在的设置。选择编辑操作。
    • 删除已存在的设置。点删除额外规格按钮。

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 规格管理多个“键/值”对。

  1. 使用一个 admin 用户,在 dashboard 中选择管理员 > 云硬盘 > 云硬盘类型
  2. QOS 规格项中点创建 QOS 规格
  3. QOS 规格 输入一个名称。
  4. 消费者项中指定 QOS 规格在哪里被强制执行:

    表 4.1. 消费者类型
    类型描述

    back-end

    QOS 规格需要应用到 Block Storage 后端。

    front-end

    QOS 规格需要应用到 Compute。

    both

    QOS 规格将应用到 Block Storage 和 Compute。

  5. 创建。新创建的 QOS 规格应该出现在 QOS 规格列表中。
  6. QOS 规格列表中,选择新规格的管理规格操作。
  7. 创建,设置。所指定的键/值对必须有效,否则在创建云硬盘时,指定和这个 QOS 规格相关联的云硬盘类型时会出现错误。
  8. 创建。相关联的设置(“键/值”对)会出现在键值对列表中。

4.2.4.2. 为云硬盘类型关联一个 QOS 规格

作为一个管理员,您可以使用云硬盘类型列表为一个存在的卷类型关联 QOS 规格。

  1. 使用一个 admin 用户,在 dashboard 中选择管理员 > 云硬盘 > 云硬盘类型
  2. 云硬盘类型项中,选择云硬盘类型的管理 QOS 规格关联操作。
  3. 要关联的 QOS 规格下拉列表中选择一个 QOS 规格。
  4. 关联。所选的 QOS 规格将会出现在被编辑的云硬盘类型的已关联 QOS 规格栏中。

4.2.4.3. 为云硬盘类型取消关联一个 QOS 规格

  1. 使用一个 admin 用户,在 dashboard 中选择管理员 > 云硬盘 > 云硬盘类型
  2. 云硬盘类型项中,选择云硬盘类型的管理 QOS 规格关联操作。
  3. 从要关联的 QOS 规格列表中选择 None
  4. 关联。所选的 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 的值。

  1. 通过命令行,以 root 身份登录到包括 openstack-cinder-volume 的节点。
  2. 设置静态密钥:

    # openstack-config --set /etc/cinder/cinder.conf keymgr fixed_key HEX_KEY

    HEX_KEY 替换为一个 16 位的十六进制密钥值(例如 0000000000000000000000000000000000000000000000000000000000000000)。

  3. 重启 Block Storage 卷服务:

    # openstack-service restart cinder-volume
  4. 登录到包括 openstack-nova-compute 的节点,设置相同的静态密钥:

    # openstack-config --set /etc/nova/nova.conf keymgr fixed_key HEX_KEY
    注意

    如果您有多个 Compute 节点(多个节点都包括 openstack-nova-compute),您需要在每个节点的 /etc/nova/nova.conf 中设置相同的静态密钥。

  5. 重启 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
只选择可以支持卷中的所有指定设置的后端

按照以下步骤配置过滤器:

  1. 启用 FilterScheduler

    # openstack-config --set /etc/cinder/cinder.conf DEFAULT scheduler_driver cinder.scheduler.filter_scheduler.FilterScheduler
  2. 设置哪个过滤器应该被激活:

    # openstack-config --set /etc/cinder/cinder.conf DEFAULT scheduler_default_filters AvailabilityZoneFilter,CapacityFilter,CapabilitiesFilter
  3. 配置调度程序如何选择适当的后端。如果您需要调度程序:

    • 总选择具有最多可用空间的后端,运行:

      # 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
  4. 重启 Block Storage 调度程序来使您的改变生效:

    # openstack-service restart openstack-cinder-scheduler
Red Hat logoGithubRedditYoutubeTwitter

学习

尝试、购买和销售

社区

关于红帽文档

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

让开源更具包容性

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

關於紅帽

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

© 2024 Red Hat, Inc.