2.2. 块存储服务管理

以下流程解释了如何配置块存储服务以满足您的需要。所有这些流程都需要管理员特权。

重要

您必须在使用块存储服务(cinder)和光纤通道(FC)后端的任何部署中,在所有 Controller 节点和 Compute 节点上安装主机总线适配器(HBA)。

2.2.1. 主动-主动部署以实现高可用性

重要的
只有边缘站点的分布式计算节点(DCN)架构中才支持主动-主动模式。

在主动 - 被动模式中,如果块存储服务在超融合部署中失败,节点隔离就不可靠。这是因为节点隔离可以触发不必要的重新平衡存储。边缘站点不会部署 Pacemaker,但 Pacemaker 仍然存在于控制站点。相反,边缘站点在主动配置中部署块存储服务来支持高度可用的超融合部署。

主动-主动部署通过在所有可用节点之间平衡工作负载来提高扩展、性能并缩短响应时间。在主动配置中部署块存储服务可创建一个高可用性环境,可在部分网络中断期间维护管理层,以及单节点或多节点硬件故障。主动-主动部署允许集群在节点中断期间继续提供块存储服务。

但是,主动-主动部署不会启用工作流自动恢复。如果服务停止,在故障节点上运行的单个操作也会在中断期间失败。在这种情况下,确认服务已关闭,并启动已进行动态操作的资源清理。

2.2.1.1. 为高可用性启用主动配置

cinder-volume-active-active.yaml 文件允许您在 active-active 配置中部署块存储服务。此文件可确保 director 使用非 Pacemaker cinder-volume heat 模板,并将 etcd 服务作为分布式锁定管理器(DLM)添加到部署中。

cinder-volume-active-active.yaml 文件还通过为 CinderVolumeCluster 参数指定一个值来定义 active-active 集群名称。CinderVolumeCluster 是一个全局块存储参数。因此,您无法在同一部署中包含集群(主动-主动)和非集群后端。

重要

目前,块存储的主动配置仅适用于 Ceph RADOS 块设备(RBD)后端。如果您计划使用多个后端,则所有后端都必须支持主动配置。如果部署中包含不支持主动配置的后端,则该后端将不适用于存储。在主动-主动部署中,如果您在不支持主动配置的后端中保存数据,则风险数据丢失。

流程

要启用主动-主动块存储服务卷,请在 overcloud 部署中包含以下环境文件:

-e /usr/share/openstack-tripleo-heat-templates/environments/cinder-volume-active-active.yaml

2.2.1.2. 主动配置的维护命令

部署主动配置后,您可以使用一些命令来在使用 API 版本 3.17 及之后的版本时与环境交互。

用户目标

命令

查看服务列表,包括集群名称、主机、区域、状态、状态、禁用原因和后端状态等详情。

注意 :当由 director 为 Ceph 后端部署时,默认的集群名称为 tripleo@tripleo_ceph

cinder service-list

请参阅整个集群的详细信息和摘要信息,而不是单个服务。

cinder cluster-list

注意 :该命令需要 3.7 或更高版本的 cinder API 微版本。

查看有关特定集群的详细信息。

cinder cluster-show <cluster_name>

注意 :该命令需要 3.7 或更高版本的 cinder API 微版本。

启用禁用的服务。

cinder cluster-enable <cluster_name>

注意 :该命令需要 3.7 或更高版本的 cinder API 微版本。

禁用集群服务。

cinder cluster-disable <cluster_name>

注意 :该命令需要 3.7 或更高版本的 cinder API 微版本。

2.2.1.3. 卷管理和取消管理

不管理和管理机制有助于使用版本 X+1 将卷从一个服务从一个服务移动到另一个服务。两个服务都会在此过程中保持运行。

在 API 版本 3.17 或更高版本中,您可以看到可用于块存储集群中管理的卷和快照列表。要查看这些列表,请使用带有 cinder manageable-listcinder snapshot-manageable-list--cluster 参数。

在 API 版本 3.16 及更高版本中,cinder 管理命令也接受可选的 --cluster 参数,以便您可以将之前非受管卷添加到块存储集群中。

2.2.1.4. 集群服务上的卷迁移

使用 API 版本 3.16 和更高版本时,cinder migratecinder-manage 命令接受 --cluster 参数来定义主动-主动部署的目的地。

当您在块存储服务中迁移卷时,传递可选的 --cluster 参数并省略 主机 位置参数,因为参数是相互排斥的。

2.2.1.5. 启动服务器维护

所有块存储卷服务在启动时执行自己的维护。在一个集群中分组的多个卷服务的环境中,您可以清理当前没有运行的服务。

命令 work-cleanup 会触发服务器清理。该命令返回:

  • 命令可以清理的服务列表。
  • 命令无法清理的服务列表,因为它们目前没有在集群中运行。
注意

work-cleanup 命令仅适用于运行 API 版本 3.24 或更高版本的服务器。

流程

  1. 运行以下命令验证集群的所有服务是否正在运行:

    $ cinder cluster-list --detailed

    或者,运行 cluster show 命令。

  2. 如果有任何服务没有运行,请运行以下命令来识别这些特定服务:

    $ cinder service-list
  3. 运行以下命令来触发服务器清理:

    $ cinder work-cleanup [--cluster <cluster-name>] [--host <hostname>] [--binary <binary>] [--is-up <True|true|False|false>] [--disabled <True|true|False|false>] [--resource-id <resource-id>] [--resource-type <Volume|Snapshot>]
    注意

    过滤器(如 --cluster--host--binary )定义命令清理的内容。您可以过滤集群名称、主机名、服务的类型和资源类型,包括特定资源。如果您没有应用过滤,命令会尝试清理可清理的所有内容。

    以下示例按集群名称过滤:

    $ cinder work-cleanup --cluster tripleo@tripleo_ceph

2.2.2. 使用卷类型的组卷设置

使用 Red Hat OpenStack Platform,您可以创建卷类型,以便您可以将相关的设置应用到卷类型。您可以在卷创建过程中应用设置,请参阅 创建卷。您还可以在创建卷后应用设置,请参阅 更改卷的类型(Volume Re-typing)。以下列表显示了您可以应用到卷类型的一些关联的设置:

设置使用名为 Extra Specs 的键值对与卷类型关联。当您在卷创建过程中指定卷类型时,块存储调度程序会将这些键值对作为设置应用。您可以将多个键值对与同一卷类型关联。

卷类型提供为不同的用户提供存储层的功能。通过将特定性能、弹性和其他设置作为键值对关联到卷类型,您可以将特定于层的设置映射到不同的卷类型。然后,您可以通过指定对应的卷类型,在创建卷时应用层设置。

2.2.2.1. 列出主机驱动程序的功能

注意

可用的 Extra Specs 因后端驱动程序而异。如需有效 Extra Specs 列表,请参阅驱动程序文档。

另外,您可以直接查询块存储主机,以确定其驱动程序支持哪些定义良好的标准 Extra Spec。首先(通过命令行)登录托管块存储服务的节点。然后:

# cinder service-list

此命令将返回一个列表,其中包含每个块存储服务的主机(cinder-backupcinder-schedulercinder-volume)。例如:

+------------------+---------------------------+------+---------
|      Binary      |            Host           | Zone |  Status ...
+------------------+---------------------------+------+---------
|  cinder-backup   |   localhost.localdomain   | nova | enabled ...
| cinder-scheduler |   localhost.localdomain   | nova | enabled ...
|  cinder-volume   | *localhost.localdomain@lvm* | nova | enabled ...
+------------------+---------------------------+------+---------

要显示块存储服务支持的 Extra Specs (并反过来)的驱动程序功能,请运行:

# cinder get-capabilities _VOLSVCHOST_

其中 VOLSVCHOSTcinder-volume 主机的完整名称。例如:

# cinder get-capabilities localhost.localdomain@lvm
    +---------------------+-----------------------------------------+
    |     Volume stats    |                        Value            |
    +---------------------+-----------------------------------------+
    |     description     |                         None            |
    |     display_name    |                         None            |
    |    driver_version   |                        3.0.0            |
    |      namespace      | OS::Storage::Capabilities::localhost.loc...
    |      pool_name      |                         None            |
    |   storage_protocol  |                        iSCSI            |
    |     vendor_name     |                     Open Source         |
    |      visibility     |                         None            |
    | volume_backend_name |                         lvm             |
    +---------------------+-----------------------------------------+
    +--------------------+------------------------------------------+
    | Backend properties |                        Value             |
    +--------------------+------------------------------------------+
    |    compression     |      {u'type': u'boolean', u'description'...
    |        qos         |              {u'type': u'boolean', u'des ...
    |    replication     |      {u'type': u'boolean', u'description'...
    | thin_provisioning  | {u'type': u'boolean', u'description': u'S...
    +--------------------+------------------------------------------+

Backend properties 列显示您可以设置的 Extra Spec Keys 列表,而 Value 列则提供有关有效对应值的信息。

2.2.2.2. 创建并配置卷类型

  1. 在仪表板中作为 admin 用户,选择 Admin > Volumes > Volume Types
  2. 单击创建卷类型
  3. Name 字段中输入卷类型名称。
  4. 单击创建卷类型。新类型会出现在 卷类型 表中。
  5. 选择卷类型的 View Extra Specs 操作。
  6. Create 并指定 KeyValue。键值对必须有效;否则,在卷创建过程中指定卷类型将导致错误。
  7. Create。关联的设置(键值对)现在出现在 Extra Specs 表中。

默认情况下,所有 OpenStack 租户都可以访问所有卷类型。如果您需要创建具有受限访问权限的卷类型,则需要通过 CLI 完成此操作。具体说明请查看 第 2.2.2.5 节 “创建并配置私有卷类型”

注意

您还可以将 QoS Spec 与卷类型关联。更多信息请参阅 第 2.2.5.4 节 “将 QOS Spec 与卷类型关联”

2.2.2.3. 编辑卷类型

  1. 在仪表板中作为 admin 用户,选择 Admin > Volumes > Volume Types
  2. Volume Types 表中,选择卷类型的 View Extra Specs 操作。
  3. 在此页的 Extra Specs 表中,您可以:

    • 在卷类型中添加一个新的设置。要做到这一点,点 Create 并指定您要与卷类型关联的新设置的键/值对。
    • 选择设置的 Edit action 来编辑与卷类型关联的现有设置。
    • 选择 extra specs 复选框并单击 Delete Extra Specs 和下一个对话框屏幕,删除与卷类型关联的现有设置。

2.2.2.4. 删除卷类型

要删除卷类型,请从卷类型表中选中其对应的复选框,然后点 Delete Volume Types

2.2.2.5. 创建并配置私有卷类型

默认情况下,所有租户都可使用所有卷类型。您可以通过将其标记为 私有 来创建受限卷类型。为此,请将类型的 is-public 标志设为 false

私有卷类型可用于限制对具有特定属性的卷的访问。通常,这些设置应当仅可供特定租户使用;示例包括新的后端或被测试的超高性能配置。

要创建私有卷类型,请运行:

$ cinder type-create --is-public false  <TYPE-NAME>

默认情况下,私有卷类型只能被创建者访问。但是,管理员用户可使用以下命令查找并查看私有卷类型:

$ cinder type-list --all

此命令列出了公共和私有卷类型,它还包括每个的名称和 ID。您需要卷类型的 ID 来提供它的访问权限。

在租户级别授予私有卷类型的访问权限。要授予租户对私有卷类型的访问权限,请运行:

$ cinder  type-access-add --volume-type <TYPE-ID> --project-id <TENANT-ID>

要查看哪些租户有权访问私有卷类型,请运行:

$ cinder  type-access-list --volume-type <TYPE-ID>

要从私有卷类型的访问列表中删除租户,请运行:

$ cinder  type-access-remove --volume-type <TYPE-ID> --project-id <TENANT-ID>
注意

默认情况下,只有具有管理特权的用户才能创建、查看或配置私有卷类型的访问权限。

2.2.3. 为块存储服务创建和配置内部租户

有些块存储功能(如 Image-Volume 缓存)需要配置内部租户。块存储服务使用此租户(或项目)来管理块存储项目,它们不一定需要公开给普通用户。此类项目的示例是缓存用于频繁卷克隆或迁移卷的临时副本的镜像。

要配置内部项目,首先创建一个名为 cinder-internal 的通用项目和用户。要做到这一点,登录到 Controller 节点并运行:

# openstack project create --enable --description "Block Storage Internal Tenant" cinder-internal
    +-------------+----------------------------------+
    |   Property  |              Value               |
    +-------------+----------------------------------+
    | description |  Block Storage Internal Tenant   |
    |   enabled   |               True               |
    |      id     | cb91e1fe446a45628bb2b139d7dccaef |
    |     name    |         cinder-internal          |
    +-------------+----------------------------------+
# openstack user create --project cinder-internal cinder-internal
    +----------+----------------------------------+
    | Property |              Value               |
    +----------+----------------------------------+
    |  email   |               None               |
    | enabled  |               True               |
    |    id    | 84e9672c64f041d6bfa7a930f558d946 |
    |   name   |         cinder-internal          |
    |project_id| cb91e1fe446a45628bb2b139d7dccaef |
    | username |         cinder-internal          |
    +----------+----------------------------------+

添加 Extra Config 选项的步骤会创建一个内部租户。更多信息请参阅 第 2.2.4 节 “配置并启用 Image-Volume 缓存”

2.2.4. 配置并启用 Image-Volume 缓存

块存储服务具有可选的 Image-Volume 缓存,可在从镜像创建卷时使用。此缓存旨在改进从频繁使用的镜像创建卷的速度。有关如何从镜像创建卷的详情,请参考 第 2.3.1 节 “创建一个卷”

启用后,Image-Volume 缓存会在从中创建卷时存储镜像的副本。此存储的镜像将缓存到块存储后端,以帮助在镜像下次用于创建卷时提高性能。Image-Volume 缓存的限制可以设置为大小(以 GB 为单位)、镜像数或两者。

几个后端支持 Image-Volume 缓存。如果您使用第三方后端,请参考其文档来获取有关 Image-Volume 缓存支持的信息。

注意

Image-Volume 缓存要求为块存储服务 配置内部租户。具体说明请查看 第 2.2.3 节 “为块存储服务创建和配置内部租户”

要在后端上启用和配置 Image-Volume 缓存(BACKEND),请将值添加到 undercloud 上环境文件的 ExtraConfig 部分。例如:

parameter_defaults:
  ExtraConfig:
    cinder::config::cinder_config:
      DEFAULT/cinder_internal_tenant_project_id:
        value: TENANTID
      DEFAULT/cinder_internal_tenant_user_id:
        value: USERID
      BACKEND/image_volume_cache_enabled: 1
        value: True
      BACKEND/image_volume_cache_max_size_gb:
        value: MAXSIZE 2
      BACKEND/image_volume_cache_max_count:
        value: MAXNUMBER 3
1
BACKEND 替换为目标后端的名称(特别是其 volume_backend_name 值)。
2
默认情况下,Image-Volume 缓存大小仅受后端限制。将 MAXSIZE 更改为 GB 的数字。
3
您还可以使用 MAXNUMBER 设置最大镜像数。

块存储服务数据库使用时间戳来跟踪每个缓存的镜像上次用于创建镜像。如果设置了 MAXSIZEMAXNUMBER,则块存储服务将根据需要删除缓存的镜像,以便为新的镜像进行修改。每当满足 Image-Volume 缓存限制时,会首先删除带有旧时间戳的缓存镜像。

/home/stack/templates/ 中创建环境文件后,以 stack 用户身份登录并通过运行以下命令来部署配置:

$ openstack overcloud deploy --templates \
-e /home/stack/templates/<ENV_FILE>.yaml

其中 ENV_FILE.yaml 是之前添加的 ExtraConfig 设置的文件名。

重要

如果您在创建 overcloud 时传递任何额外的环境文件,请使用 -e 选项再次传递它们,以避免对 overcloud 进行不必要的更改。

如需有关 openstack overcloud deploy 命令的更多信息 请参阅 Director 安装和使用指南中的部署命令

2.2.5. 使用服务质量规格

您可以将多个性能设置映射到单个服务质量规格(QOS Specs)。这样,您可以为不同的用户类型提供性能层。

性能设置映射为 QOS Specs 的键值对,类似于卷设置与卷类型关联的方式。但是,在以下方面,QOS Specs 与卷类型不同:

  • QOS Specs 用于应用性能设置,其中包括对磁盘进行限制读/写操作。可用的和支持的性能设置因存储驱动程序而异。

    要确定后端支持哪些 QOS Spec,请参阅后端设备驱动程序的文档。

  • 卷类型直接应用于卷,而 QOS Specs 不是。相反,QOS Specs 与卷类型关联。在卷创建过程中,指定卷类型也会应用映射到卷类型关联的 QOS Specs 的性能设置。

2.2.5.1. 基本卷服务质量

您可以使用基本卷 QOS 值为每个卷定义性能限制。块存储服务支持以下选项:

  • read_iops_sec
  • write_iops_sec
  • total_iops_sec
  • read_bytes_sec
  • write_bytes_sec
  • total_bytes_sec
  • read_iops_sec_max
  • write_iops_sec_max
  • total_iops_sec_max
  • read_bytes_sec_max
  • write_bytes_sec_max
  • total_bytes_sec_max
  • size_iops_sec

2.2.5.2. 创建并配置 QOS 规格

作为管理员,您可以通过 QOS Specs 表创建和配置 QOS Spec。您可以将多个键/值对与同一 QOS Spec 关联。

  1. 在仪表板中作为 admin 用户,选择 Admin > Volumes > Volume Types
  2. QOS Specs 表中,点 Create QOS Spec
  3. 输入 QOS Spec 的名称。
  4. Consumer 字段中,指定应强制执行 QOS 策略的位置:

    表 2.1. 消费者类型

    类型描述

    back-end

    QOS 策略将应用到块存储后端。

    front-end

    QOS 策略将应用到 Compute。

    两者都

    QOS 策略将应用到块存储和计算。

  5. Create。新的 QOS Spec 现在应该会显示在 QOS Specs 表中。
  6. QOS Specs 表中,选择新的 spec 的 Manage Specs 操作。
  7. 单击 Create,再指定 KeyValue。键值对必须有效;否则,在卷创建过程中指定与此 QOS Spec 关联的卷类型将失败。

    例如,要将读取限制 IOPS 设置为 500,请使用以下 Key/Value 对:

    read_iops_sec=500
  8. Create。关联的设置(键值对)现在出现在 Key-Value Pairs 表中。

2.2.5.3. 设置 Capacity-Derived QoS 限制

您可以使用卷类型在卷上实现容量派生的服务质量(QoS)限制。这将允许您根据置备的卷的大小设置确定的 IOPS 吞吐量。这样做简化了存储资源如何提供给用户,为用户提供了预先确定的(并且最终具有高度可预测的)吞吐量率。

特别是,块存储服务允许您根据实际调配的大小设置要分配给卷的 IOPS 数。这个吞吐量由每个 GB 的 IOPS 通过以下 QoS 键设置:

read_iops_sec_per_gb
write_iops_sec_per_gb
total_iops_sec_per_gb

这些密钥允许您设置读取、写入或总 IOPS,以使用置备的卷的大小进行扩展。例如,如果卷类型使用 read_iops_sec_per_gb=500,则置备的 3GB 卷会自动具有读取 IOPS 1500。

容量派生的 QoS 限制是为每个卷类型设置,并像任何正常的 QoS 规格一样配置。另外,这些限制直接由底层块存储服务支持,不依赖于任何特定的驱动程序。

有关卷类型的详情,请参考 第 2.2.2 节 “使用卷类型的组卷设置”第 2.2.2.2 节 “创建并配置卷类型”。有关如何设置 QoS 规格的说明 第 2.2.5 节 “使用服务质量规格”

警告

当您将卷类型(或执行卷)带有 capacity-derived QoS 限制的卷类型(或执行卷)时,不会应用限制。只有在将卷从实例分离后,才会应用限制。

有关卷重新处理的信息,请参阅 第 2.3.16 节 “卷重新处理”

2.2.5.4. 将 QOS Spec 与卷类型关联

作为管理员,您可以使用卷类型表将 QOS Spec 与现有卷类型相关联。

  1. 在仪表板中以管理员身份,选择 Admin > Volumes > Volume Types
  2. Volume Types 表中,选择类型的 Manage QOS Spec Association 操作。
  3. 要关联的 QOS Spec 列表中选择 QOS Spec。
  4. 单击 关联。所选的 QOS Spec 现在会出现在编辑的卷类型的关联 QOS Spec 列中。

2.2.5.5. 从卷类型中解除 QOS Spec 解除关联

  1. 在仪表板中以管理员身份,选择 Admin > Volumes > Volume Types
  2. Volume Types 表中,选择类型的 Manage QOS Spec Association 操作。
  3. 从要关联的 QOS Spec 列表中选择 None
  4. 单击 关联。所选 QOS Spec 不再位于编辑 的卷类型的关联 QOS Spec 列中。

2.2.6. 配置卷加密

卷加密在卷后端被泄露或被盗时,提供基本数据保护。Compute 和 Block Storage 服务都集成在一起,以允许实例读取访问和使用加密卷。您必须部署 Key Manager 服务(barbican)才能使用卷加密。

重要
  • 基于文件的卷(如 NFS)不支持卷加密。
  • 不支持将未加密的卷重新设置为相同大小的加密卷,因为加密卷需要额外的空间来存储加密数据。有关加密未加密的卷的更多信息,请参阅 加密未加密的卷

使用卷类型应用卷加密。有关加密卷类型的详情,请查看 第 2.2.6.1 节 “通过控制面板配置卷类型加密”

2.2.6.1. 通过控制面板配置卷类型加密

要创建加密的卷,您首先需要一个 加密的卷类型。加密卷类型涉及设置它应使用的供应商类、密码和密钥大小:

  1. 在仪表板中作为 admin 用户,选择 Admin > Volumes > Volume Types
  2. 在要加密的卷的 Actions 列中,选择 Create Encryption 以启动 Create Volume Type Encryption 向导。
  3. 在这里,配置卷类型加密的 Provider,Control Location,Cipher, 和 Key Size 设置。Description 列描述了每个设置。

    重要

    以下列出的值是 ProviderCipherKey Size 唯一支持的选项。

    1. Provider 输入 luks
    2. Cipher 输入 aes-xts-plain64
    3. Key Size 输入 256
  4. 单击 Create Volume Type Encryption

有加密卷类型后,您可以调用它来自动创建加密的卷。有关创建卷类型的详情,请参考 第 2.2.2.2 节 “创建并配置卷类型”。具体来说,从 Create Volume 窗口中的 Type 下拉列表中选择加密的卷类型(请参阅 第 2.3 节 “基本卷使用和配置”)。

要通过 CLI 配置加密卷类型,请参阅 第 2.2.6.2 节 “通过 CLI 配置卷类型加密”

您还可以重新配置加密卷类型的加密设置。

  1. 从卷类型的 Actions 列中选择 Update Encryption 以启动 Update Volume Type Encryption 向导。
  2. Project > Compute > Volumes 中,检查 Volumes 表中的 Encrypted 列,以确定卷是否加密。
  3. 如果卷加密,请单击该列中的 Yes 以查看加密设置。

2.2.6.2. 通过 CLI 配置卷类型加密

要配置块存储卷加密,请执行以下操作:

  1. 创建卷类型:

    $ cinder type-create encrypt-type
  2. 配置密码、密钥大小、控制位置和提供程序设置:

    $ cinder encryption-type-create --cipher aes-xts-plain64 --key-size 256 --control-location front-end encrypt-type luks
  3. 创建一个加密卷:

    $ cinder --debug create 1 --volume-type encrypt-type --name DemoEncVol

2.2.6.3. 自动删除卷镜像加密密钥

将加密卷上传到镜像服务(glance)时,块存储服务(cinder)在密钥管理服务(barbican)中创建一个加密密钥。这会在加密密钥和存储的镜像之间创建一个 1:1 关系。

加密密钥删除可防止密钥管理服务无限度地消耗资源。块存储、密钥管理和镜像服务自动管理加密卷的密钥,包括删除密钥。

块存储服务会自动将两个属性添加到卷镜像中:

  • cinder_encryption_key_id - 密钥管理服务为特定镜像存储的加密密钥的标识符。
  • cinder_encryption_key_deletion_policy - 告知镜像服务是否删除与此镜像关联的密钥的策略。
重要

这些属性的值会被自动分配。为避免意外的数据丢失,请不要调整这些值

当您创建卷镜像时,块存储服务会将 cinder_encryption_key_deletion_policy 属性设置为 on_image_deletion。当您删除卷镜像时,如果 cinder_encryption_key_deletion_policy 等于 on_image_deletion _policy,则镜像服务会删除对应的加密密钥。

重要

红帽不推荐手动操作 cinder_encryption_key_idcinder_encryption_key_deletion_policy 属性。如果您使用由 cinder_encryption_key_id 值标识的加密密钥用于任何其他目的,则风险数据丢失。

如需更多信息,请参阅使用 OpenStack Key Manager 管理 secret 指南。

2.2.7. 配置卷如何分配为多个后端

如果块存储服务配置为使用多个后端,您可以使用配置的卷类型来指定应创建卷的位置。详情请查看 第 2.3.2 节 “为卷创建指定后端”

如果您在卷创建过程中没有指定后端,块存储服务将自动选择一个后端。块存储将第一个定义的后端设置为默认值;此后端将在用尽空间前使用。此时,块存储会将第二个定义的后端设置为默认后端,以此类推。

如果这不适用于您的需要,您可以使用过滤器调度程序来控制块存储应如何选择后端。此调度程序可以使用不同的过滤器来分类合适的后端,例如:

AvailabilityZoneFilter
过滤掉不符合所请求卷的可用区要求的所有后端。
CapacityFilter
仅选择具有足够空间的后端来容纳卷。
CapabilitiesFilter
仅选择可支持卷中任何指定设置的后端。
InstanceLocality
将集群配置为使用卷本地到同一节点。

要配置过滤器调度程序,请在包含以下内容的部署中添加环境文件:

parameter_defaults:
  ControllerExtraConfig: # 1
    cinder::config::cinder_config:
      DEFAULT/scheduler_default_filters:
        value: 'AvailabilityZoneFilter,CapacityFilter,CapabilitiesFilter,InstanceLocality'
1
您还可以在现有环境文件的 parameter_defaults: 部分中添加 ControllerExtraConfig: hook 及其嵌套部分。

2.2.8. 部署可用区

可用域是特定于供应商的,对云实例和服务进行分组的方法。director 使用 CinderXXXAvailabilityZone 参数(其中 XXX 与特定后端相关联)为块存储卷后端配置不同的可用区。

流程

为块存储卷后端部署不同的可用区:

  1. 在环境文件中添加以下参数来创建两个可用区:

    parameter_defaults:
     CinderXXXAvailabilityZone: zone1
     CinderYYYAvailabilityZone: zone2

    XXXYYY 替换为支持的后端值,例如:

    CinderISCSIAvailabilityZone
    CinderNfsAvailabilityZone
    CinderRbdAvailabilityZone
    注意

    /usr/share/openstack-tripleo-heat-templates/deployment/cinder/ 目录中搜索与后端关联的 heat 模板,以获取正确的后端值。

    以下示例部署两个后端,其中 rbd 是 zone 1,iSCSI 是 zone 2:

    parameter_defaults:
     CinderRbdAvailabilityZone: zone1
     CinderISCSIAvailabilityZone: zone2
  2. 部署 overcloud,并包含更新的环境文件。

2.2.9. 配置和使用一致性组

您可以使用 Block Storage (cinder)服务将一致性组设置为将多个卷作为单一实体分组在一起。这意味着,您可以同时对多个卷执行操作,而不是单独执行。您可以使用一致性组为多个卷同时创建快照。这也意味着您可以同时恢复或克隆这些卷。

卷可以是多个一致性组的成员。但是,在将卷添加到一致性组后,您无法删除、重新输入或迁移卷。

2.2.9.1. 配置一致性组

默认情况下,块存储安全策略禁用一致性组 API。在使用该功能前,您必须在此处启用它。托管 Block Storage API 服务的节点 /etc/cinder/policy.json 文件中的相关一致性组条目,openstack-cinder-api 列出默认设置:

"consistencygroup:create" : "group:nobody",
"consistencygroup:delete": "group:nobody",
"consistencygroup:update": "group:nobody",
"consistencygroup:get": "group:nobody",
"consistencygroup:get_all": "group:nobody",
"consistencygroup:create_cgsnapshot" : "group:nobody",
"consistencygroup:delete_cgsnapshot": "group:nobody",
"consistencygroup:get_cgsnapshot": "group:nobody",
"consistencygroup:get_all_cgsnapshots": "group:nobody",

您必须在环境文件中更改这些设置,然后使用 openstack overcloud deploy 命令将它们部署到 overcloud。不要直接编辑 JSON 文件,因为在下次部署 overcloud 时更改会被覆盖。

流程

  1. 编辑环境文件,并在 parameter_defaults 部分中添加新条目。这样可确保条目在容器中更新,并在 director 使用 openstack overcloud deploy 命令重新部署环境时保留条目。
  2. 使用 CinderApiPolicies 在环境文件中添加新部分来设置一致性组设置。带有 JSON 文件中的默认设置的等同 parameter_defaults 部分如下所示:

    parameter_defaults:
      CinderApiPolicies: { \
         cinder-consistencygroup_create: { key: 'consistencygroup:create', value: 'group:nobody' }, \
         cinder-consistencygroup_delete: { key: 'consistencygroup:delete', value: 'group:nobody' },  \
         cinder-consistencygroup_update: { key: 'consistencygroup:update', value: 'group:nobody' }, \
         cinder-consistencygroup_get: { key: 'consistencygroup:get', value: 'group:nobody' }, \
         cinder-consistencygroup_get_all: { key: 'consistencygroup:get_all', value: 'group:nobody' }, \
         cinder-consistencygroup_create_cgsnapshot: { key: 'consistencygroup:create_cgsnapshot', value: 'group:nobody' }, \
         cinder-consistencygroup_delete_cgsnapshot: { key: 'consistencygroup:delete_cgsnapshot', value: 'group:nobody' }, \
         cinder-consistencygroup_get_cgsnapshot: { key: 'consistencygroup:get_cgsnapshot', value: 'group:nobody' }, \
         cinder-consistencygroup_get_all_cgsnapshots: { key: 'consistencygroup:get_all_cgsnapshots', value: 'group:nobody' }, \
     }
  3. 'group:nobody' 确定没有组可以使用此功能,以便有效地禁用它。要启用它,请将组更改为另一个值。
  4. 为提高安全性,请将一致性组 API 和卷类型管理 API 的权限设置为相同。默认情况下,卷类型管理 API 会在同一个 /etc/cinder/policy.json_ file 文件中设置为 "rule:admin_or_owner"

    "volume_extension:types_manage": "rule:admin_or_owner",
  5. 要使一致性组功能可供所有用户使用,请将 API 策略条目设置为允许用户创建、使用和管理自己的一致性组。要做到这一点,请使用 rule:admin_or_owner:

    CinderApiPolicies: { \
         cinder-consistencygroup_create: { key: 'consistencygroup:create', value: 'rule:admin_or_owner' }, \
         cinder-consistencygroup_delete: { key: 'consistencygroup:delete', value: 'rule:admin_or_owner' },  \
         cinder-consistencygroup_update: { key: 'consistencygroup:update', value: 'rule:admin_or_owner' }, \
         cinder-consistencygroup_get: { key: 'consistencygroup:get', value: 'rule:admin_or_owner' }, \
         cinder-consistencygroup_get_all: { key: 'consistencygroup:get_all', value: 'rule:admin_or_owner' }, \
         cinder-consistencygroup_create_cgsnapshot: { key: 'consistencygroup:create_cgsnapshot', value: 'rule:admin_or_owner' }, \
         cinder-consistencygroup_delete_cgsnapshot: { key: 'consistencygroup:delete_cgsnapshot', value: 'rule:admin_or_owner' }, \
         cinder-consistencygroup_get_cgsnapshot: { key: 'consistencygroup:get_cgsnapshot', value: 'rule:admin_or_owner' }, \
         cinder-consistencygroup_get_all_cgsnapshots: { key: 'consistencygroup:get_all_cgsnapshots', value: 'rule:admin_or_owner’ }, \
     }
  6. 当您在 /home/stack/templates/ 中创建环境文件时,以 stack 用户身份登录并部署配置:

    $ openstack overcloud deploy --templates \
    -e /home/stack/templates/<ENV_FILE>.yaml

    <ENV_FILE.yaml > 替换为您添加的 ExtraConfig 设置的文件名称。

    重要

    如果您在创建 overcloud 时传递任何额外的环境文件,请使用 -e 选项再次传递它们,以避免对 overcloud 进行不必要的更改。

有关 openstack overcloud deploy 命令的更多信息,请参阅 Director 安装和使用指南中的使用 CLI 工具创建 Overcloud

2.2.9.2. 创建一致性组

启用一致性组 API 后,您可以开始创建一致性组。

流程

  1. 在仪表板中,选择 Project > Compute > Volumes > Volume Consistency Groups
  2. 单击 Create Consistency Group
  3. 在向导的 Consistency Group Information 选项卡中,输入您的一致性组的名称和描述。然后,指定其 可用区
  4. 您还可以将卷类型添加到一致性组中。当您在一致性组中创建卷时,块存储服务将从这些卷类型应用兼容的设置。要添加卷类型,请点击所有可用卷类型列表中的 + 按钮。
  5. 单击 Create Consistency Group。它会出现在 Volume Consistency Groups 表中。

2.2.9.3. 管理一致性组

流程

  1. 可选:您可以通过从 Action 列中选择 Edit Consistency Group 来更改一致性组的名称或描述。
  2. 要直接从一致性组中添加或删除卷,请在仪表板中以 admin 用户身份选择 Project > Compute > Volumes > Volume Consistency Groups
  3. 查找您要配置的一致性组。在该一致性组的 Actions 列中,选择 Manage Volumes。这将启动 Add/Remove Consistency Group Volumes 向导。

    1. 要将卷添加到一致性组中,请单击 All available volumes 列表中的 + 按钮。
    2. 要从一致性组中删除卷,请单击 Selected volumes 列表中的 - 按钮。
  4. 单击 Edit Consistency Group

2.2.9.4. 创建和管理一致性组快照

将卷添加到一致性组后,您现在可以从其中创建快照。

流程

  1. 在托管 openstack-cinder-api 的节点上,以 admin 用户身份登录,输入:

    # export OS_VOLUME_API_VERSION=2

    这会将客户端配置为使用 openstack-cinder-api 的版本 2

  2. 列出所有可用的一致性组及其对应 ID:

    # cinder consisgroup-list
  3. 使用一致性组创建快照:

    # cinder cgsnapshot-create --name <CGSNAPNAME> --description "<DESCRIPTION>" <CGNAMEID>

    替换:

    • <CGSNAPNAME > 带有快照名称(可选)。
    • <DESCRIPTION > 带有快照的描述(可选)。
    • <CGNAMEID> 带有一致性组的名称或 ID。
  4. 显示所有可用一致性组快照的列表:

    # cinder cgsnapshot-list

2.2.9.5. 克隆一致性组

您还可以使用一致性组同时创建整个预配置的卷。您可以通过克隆现有的一致性组或恢复一致性组快照来完成此操作。两个进程都使用相同的命令。

流程

  1. 克隆现有的一致性组:

    # cinder consisgroup-create-from-src --source-cg <CGNAMEID> --name <CGNAME> --description "<DESCRIPTION>"

    替换:

    • <CGNAMEID > 是您要克隆的一致性组的名称或 ID。
    • <CGNAME > 是一致性组的名称(可选)。
    • <DESCRIPTION > 是一致性组的描述(可选)。
  2. 从一致性组快照创建一致性组:

    # cinder consisgroup-create-from-src --cgsnapshot <CGSNAPNAME> --name <CGNAME> --description "<DESCRIPTION>

    将 < CGSNAPNAME > 替换为您要用于创建一致性组的快照的名称或 ID。