Capabilities and Extra-Specs

云管理员创建共享类型,并使用额外规格来

  • 影响调度器将新共享放置的决策,以及

  • 指示共享文件系统服务或其存储驱动程序/们对用户的共享执行某些特殊操作。

作为管理员,您可以选择一个描述性的名称或为您的共享类型提供良好的描述,以向最终用户传达共享类型的功能。最终用户可以查看标准租户可见额外规格,这些规格可以让他们寻求所需行为并相应地自动化他们的应用程序。然而,设计上,共享类型的所有其他额外规格都不会暴露给非特权用户。

额外规格的类型

共享文件系统服务的后端存储驱动程序提供广泛的功能。这些功能的差异允许云管理员向其最终用户提供存储服务目录。共享类型额外规格与这些功能相关联。

某些后端功能非常特定于存储系统,并且对共享文件系统服务或最终用户不透明。这些功能通过“作用域”额外规格来调用。使用作用域额外规格是一种在共享创建或共享操作期间向相关的存储驱动程序提供程序化指令的方式。您可以通过驱动程序文档了解不透明的功能,并在共享类型中将这些功能配置为作用域额外规格(例如:hpe3par:nfs_options)。共享文件系统服务的调度器在寻找合适的后端来配置共享时,会忽略作用域额外规格。

在 manila 中,有一些后端功能对调度器很重要。为了我们的理解,我们称这些为非作用域或不透明的功能。所有非作用域功能都可以直接用作共享类型的额外规格。它们被调度器的功能过滤器(以及部署者定义的任何自定义过滤器)考虑。

您可以使用以下命令从调度器获取非作用域功能列表

$ manila pool-list --detail

非作用域功能有三种类型

  • 与特定后端存储系统驱动程序相关的能力:例如,huawei_smartcache。任何共享文件系统服务 API 都不依赖于不透明的后端特定功能。

  • 对最终用户不可见的通用能力:manila 社区已经标准化了一些跨平台能力,例如thin_provisioningdedupecompressionqosipv6_supportipv4_support。这些选项的值对任何共享文件系统服务 API 都没有意义;但是,它们可以对 manila 服务本身表示一些含义。例如,当后端支持 thin_provisioning 时,调度器服务执行过度配置,如果后端未报告 ipv6_support 为 True,则 share-manager 服务在调用存储驱动程序更新访问规则之前会删除 IPv6 访问规则。

  • 对最终用户可见的通用能力:某些功能会影响通过共享文件系统服务 API 暴露的功能。例如,并非所有后端都支持快照,即使支持,它们可能也不支持所有快照操作。例如,将快照克隆到新的共享,原地将共享恢复到快照等。

    对这些功能的支持决定了用户是否能够使用 manila 执行某些控制平面操作。例如,后端驱动程序可能会报告 snapshot_support=True,允许最终用户创建共享快照,但是,驱动程序可以报告 create_share_from_snapshot_support=False。这种报告允许云管理员创建支持快照但不支持从快照创建共享的共享类型。当用户使用这种共享类型时,他们将无法将快照克隆到新的共享。可见的租户能力帮助 manila 验证请求并在无法满足请求时快速失败。它们还有助于设定用户对某些失败的期望。例如,如果在共享类型上将 snapshot_support 设置为 False,由于用户可以看到此设置,因此他们不会调用创建快照 API,即使他们这样做,他们也会更好地理解 HTTP 400(和错误消息)。

重要提示

所有额外规格都是可选的,除了一个:driver_handles_share_servers

调度器对非作用域额外规格的处理

共享文件系统调度器中的 CapabilitiesFilter 使用以下匹配运算符

  • 无运算符 这默认执行 python ==。此外,它还将匹配布尔值。

  • <=, >=, ==, !=

    这执行浮点数转换,然后按预期使用 python 运算符。

  • <in>

    这会选择具有部分匹配字符串在功能中的主机,或者如果它匹配列表中的任何值,则选择主机。例如,如果使用“<in> sse4”,它将匹配报告能力为“sse4_1”或“sse4_2”的主机。

  • <or>

    这会选择具有指定项目之一的主机。如果字符串中的第一个单词是 <or>,则可以连接另一个 <or> 和值对。示例是“<or> 3”、“<or> 3 <or> 5”和“<or> 1 <or> 3 <or> 7”。这仅适用于字符串值。

  • <is>

    这会选择匹配布尔值能力的主机。一个额外的规格值将是“<is> True”。

  • =

    这执行浮点数转换并选择具有等于或大于指定资源的的主机。出于历史原因,此运算符的行为方式是这样。

  • s==, s!=, s>=, s>, s<=, s<

    “s”表示它是字符串比较。这些选择满足能力和规格中字符串比较的主机。例如,如果“capabilities:replication_type s== dr”,则报告 replication_type 为“dr”的主机将被选择。如果使用“share_backend_name s!= cephfs”,则可以选择任何未命名为“cephfs”的主机。

对于需要对调度器可见的特定于供应商的非作用域功能,建议驱动程序使用供应商前缀后跟下划线。这不是严格要求,但可以提供与作用域额外规格一致的外观,并且将是区分供应商功能与通用功能的明确指标。

通用能力

通用能力适用于多个后端。与所有其他后端报告的功能一样,这些功能可以用作用于创建共享的共享类型中的 extra_specs。

对最终用户可见的共享类型通用能力额外规格:

  • driver_handles_share_servers 是一种特殊的、必需的通用能力。如果设置为 True,则调度器会将请求与能够使用专用共享服务器导出共享到用户提供的共享网络来隔离用户工作负载的后端进行匹配。

  • snapshot_support 指示是否支持为在池/后端上创建的共享创建快照。如果管理员未将此功能设置为共享类型的额外规格,则调度器可以将该类型的新共享放置在不考虑是否支持快照的池中,并且这些共享将不支持快照。

  • create_share_from_snapshot_support 指示后端是否可以从快照创建新的共享。如果管理员未将此功能设置为共享类型的额外规格,则调度器可以将该类型的新共享放置在不考虑是否支持从快照创建共享的池中,并且这些共享将不支持从快照创建共享。

  • revert_to_snapshot_support 指示驱动程序能够原地将共享恢复到其最新的快照。如果管理员未将此功能设置为共享类型的额外规格,则调度器可以将该类型的新共享放置在不考虑是否支持将共享恢复到快照的池中,并且这些共享将不支持将共享恢复到快照。

  • mount_snapshot_support 指示驱动程序能够导出可用于挂载的共享快照。用户可以提供和撤销对可挂载快照的访问权限,就像他们可以对共享一样。

  • replication_type 指示后端/池支持的复制样式。此 extra_spec 将具有字符串值,可以是 writablereadabledrwritable 复制类型涉及同步复制的共享,其中所有副本均可写入。不需要也不支持提升。 readabledr 复制类型涉及一个 activeprimary 副本和每个共享的一个或多个 non-active 或辅助副本。在 readable 类型的复制中,non-active 副本具有一个或多个 export_locations,因此可以挂载和读取,而 active 副本是唯一可以写入的副本。在 dr 样式的复制中,只能挂载、读取和写入 active 副本。

  • availability_zones 指示可以用于配置的逗号分隔的可用区列表。用户始终可以在共享创建期间提供特定的可用区,如果他们尝试在共享类型不允许的可用区中创建共享,他们将收到同步失败消息。如果您未设置此 extra_spec,则假定共享类型可以在共享文件系统服务已知的所有可用区中提供服务。

  • mount_point_name_support 是否可以在共享创建期间指定自定义导出位置。要启用用户为他们的共享指定自定义挂载点,管理员必须将此 extra-specification 设置为 True。他们还必须提供名为 provisioning:mount_point_prefix 的 extra-spec。服务将在共享创建期间使用此前缀与最终用户提供的挂载点名称结合使用。当 provisioning:mount_point_prefix 未在共享类型上设置,但 mount_point_name_support 已启用时,共享的导出位置将以 project_id 为前缀。但是,使用 project_id 前缀创建的共享不符合转移资格。为了将这些共享转移到另一个项目,管理员需要手动从当前项目卸载它们并将其挂载到目标项目。

对最终用户不可见的共享类型通用能力额外规格:

  • dedupe 指示后端/池可以使用某种去重技术提供共享。如果驱动程序未报告它,则 dedupe 功能的默认值是 False。驱动程序可以通过报告 dedupe=[True, False] 来支持单个存储池中的去重和非去重共享。您可以通过将此 extra-spec 设置为“<is> True”来使共享类型使用去重,或者通过将此 extra-spec 设置为“<is> False”来防止它。

  • compression 指示后端/池可以使用某种压缩技术提供共享。如果驱动程序未报告它,则 compression 功能的默认值是 False。驱动程序可以通过报告 compression=[True, False] 来支持压缩和非压缩共享。您可以通过将此 extra-spec 设置为“<is> True”来使共享类型使用压缩,或者通过将此 extra-spec 设置为“<is> False”来防止它。

  • thin_provisioning 可以在启用共享时不保证空间分配并且启用过度配置。此功能默认为 False。支持精简配置的后端/池为此功能报告 True。管理员可以通过将此 extra-spec 设置为“<is> True”来使共享类型使用精简配置的共享。如果驱动程序报告 thin_provisioning=False(默认值),则假定驱动程序正在执行厚配置并且关闭了过度配置。驱动程序可以通过报告 thin_provisioning=[True, False] 来支持精简配置和厚配置的共享。

    要在支持精简配置和厚配置的后端上配置厚共享,请在 extra specs 中设置以下其中之一

{'thin_provisioning': 'False'}
{'thin_provisioning': '<is> False'}
{'capabilities:thin_provisioning': 'False'}
{'capabilities:thin_provisioning': '<is> False'}
  • qos 指示后端/池可以使用某种 QoS(服务质量)规范提供共享。如果驱动程序未报告它,则 qos 功能的默认值是 False。您可以通过将此 extra-spec 设置为“<is> True”并设置正在使用的驱动程序的相关 QoS 相关 extra specs 来使共享类型使用 QoS。管理员可以通过将此 extra-spec 设置为“<is> False”来防止共享类型使用 QoS。不同的驱动程序有不同的方式来指定 QoS 限制(或保证),此 extra spec 只是允许调度器过滤具有或不具有 QoS 支持启用的池。

  • ipv4_support 指示后端是否可以创建可以通过 IPv4 协议访问的共享。如果管理员未将此功能设置为共享类型的额外规格,则调度器可以将该类型的新共享放置在不考虑是否支持 IPv4 的池中。

  • ipv6_support - 指示后端是否可以创建可以通过 IPv6 协议访问的共享。如果管理员未将此功能设置为共享类型的额外规格,则调度器可以将该类型的新共享放置在不考虑是否支持 IPv6 的池中。

  • provisioning:max_share_size 可以设置共享的最大尺寸,该值必须为大于 0 的整数。如果管理员将此功能作为共享类型中的额外规格(extra-spec)设置,则使用该共享类型创建的共享的尺寸不能大于指定值。

  • provisioning:min_share_size 可以设置共享的最小尺寸,该值必须为大于 0 的整数。如果管理员将此功能作为共享类型中的额外规格(extra-spec)设置,则使用该共享类型创建的共享的尺寸不能小于指定值。

  • provisioning:max_share_extend_size 可以设置共享扩展的最大尺寸,该值必须为大于 0 的整数。如果管理员将此功能作为共享类型中的额外规格(extra-spec)设置,则使用该共享类型扩展的共享的尺寸不能大于指定值。此功能对普通用户无效,只有“provisioning:max_share_size”才是唯一的有效限制。

  • provisioning:mount_point_prefix 可以设置人类可读的 mount_point_name 的前缀,该值必须是一个包含 ASCII 字母和可选下划线的字符串。