HPE 3PAR Driver for OpenStack Manila

HPE 3PAR manila 驱动程序使用 HPE 3PAR 的文件 Persona 功能,为 OpenStack 提供 NFS 和 CIFS 共享文件系统。

注意

在 Mitaka 之前的 OpenStack 版本中,此驱动程序被称为 HP 3PAR 驱动程序。Liberty 配置参考可以在这里找到:https://docs.openstack.org/2025.2/config-reference/content/hp-3par-share-driver.html

有关 HPE 3PAR Driver for OpenStack Manila 的信息,请参阅 内容包页面

支持的操作

以下操作支持 HPE 3PAR 文件 Persona

  • 创建/删除 NFS 和 CIFS 共享

    • 在访问规则允许访问之前,共享不可访问

  • 允许/拒绝 NFS 共享访问

    • NFS 共享访问需要 IP 访问规则

  • 允许/拒绝 CIFS 共享访问

    • CIFS 共享需要用户访问规则。

    • 用户访问需要 3PAR 本地或 AD 用户(尚未支持 LDAP)

  • 创建/删除快照

  • 从快照创建共享

不支持共享网络。共享直接在 3PAR 上创建,不使用共享服务器或服务 VM。网络连接在 manila 之外设置。

需求

在运行 manila 共享服务的系统上

  • python-3parclient 4.2.0 或更高版本,来自 PyPI。

在 HPE 3PAR 阵列上

  • HPE 3PAR 操作系统软件版本 3.2.1 MU3 或更高版本

  • 阵列类和硬件配置必须支持文件 Persona

HPE 3PAR 上的预配置

  • 必须初始化并启动 HPE 3PAR 文件 Persona (startfs)

  • 必须创建一个文件配置组 (FPG) 以供 manila 使用

  • 必须为 FPG 创建一个虚拟文件服务器 (VFS)

  • VFS 必须配置为具有适当的共享导出 IP 地址

  • CIFS 共享需要 Administrators 组中的本地用户

后端配置

需要在 HPE 3PAR 驱动程序的 manila 配置文件中配置以下参数

  • share_backend_name = <要启用的后端名称>

  • share_driver = manila.share.drivers.hpe.hpe_3par_driver.HPE3ParShareDriver

  • driver_handles_share_servers = False

  • hpe3par_fpg = <用于共享创建的 FPG>

  • hpe3par_share_ip_address = <用于共享导出位置的 IP 地址>

  • hpe3par_san_ip = <用于访问 SAN 控制器的 SSH IP 地址>

  • hpe3par_api_url = <3PAR WS API 服务器 URL>

  • hpe3par_username = <具有“编辑”角色的 3PAR 用户名>

  • hpe3par_password = <hpe3par_username 中指定用户的 3PAR 密码>

  • hpe3par_san_login = <用于访问 SAN 控制器的 SSH 用户名>

  • hpe3par_san_password = <用于访问 SAN 控制器的 SSH 密码>

  • hpe3par_debug = <False 或 True 用于额外的调试日志记录>

  • hpe3par_cifs_admin_access_username = <CIFS 管理员用户名>

  • hpe3par_cifs_admin_access_password = <CIFS 管理员密码>

  • hpe3par_cifs_admin_access_domain = <CIFS 管理员域>

  • hpe3par_share_mount_path = <挂载共享的完整路径>

hpe3par_share_ip_address 必须是配置的 FPG 的 VFS 的有效 IP 地址。此 IP 地址用于创建的共享的导出位置。必须配置网络以允许客户端与共享连接。

hpe3par_cifs_admin_access_usernamehpe3par_cifs_admin_access_password 必须提供才能删除嵌套的 CIFS 共享。如果省略,则会保留原始功能,并且文件树保持不变。hpe3par_cifs_admin_access_domainhpe3par_share_mount_path 也可以指定以创建进一步的自定义。

需要重新启动 manila-share 服务才能使配置更改生效。

AD 用户后端配置

需要通过 HPE 3PAR CLI 配置以下参数才能使用 AD 访问文件共享。

设置身份验证参数

$ setauthparam ldap-server IP_ADDRESS_OF_AD_SERVER
$ setauthparam binding simple
$ setauthparam user-attr AD_DOMAIN_NAME\\
$ setauthparam accounts-dn CN=Users,DC=AD,DC=DOMAIN,DC=NAME
$ setauthparam account-obj user
$ setauthparam account-name-attr sAMAccountName
$ setauthparam memberof-attr memberOf
$ setauthparam super-map CN=AD_USER_GROUP,DC=AD,DC=DOMAIN,DC=NAME

验证设置的新的身份验证参数是否符合预期

$ showauthparam

验证 AD 用户是否设置正确

$ checkpassword AD_USER

命令结果应显示 user AD_USER is authenticated and authorized 消息,表示配置成功。

在身份验证提供程序列表中添加“ActiveDirectory”

$ setfs auth ActiveDirectory Local

验证身份验证提供程序列表显示“ActiveDirectory”

$ showfs -auth

在 FS 上设置/添加 AD 用户

$ setfs ad –passwd PASSWORD AD_USER AD_DOMAIN_NAME

验证 FS 用户详细信息

$ showfs -ad

使用 AD 用户访问 CIFS 共享示例

先决条件

  • 应为 3PAR 后端配置共享类型

创建一个大小为 2GB 的 CIFS 文件共享

$ manila create --name FILE_SHARE_NAME --share-type SHARE_TYPE CIFS 2

检查文件共享是否创建成功

$ manila show FILE_SHARE_NAME

提供对 AD 用户共享访问权限的配置

$ manila access-allow FILE_SHARE_NAME user AD_DOMAIN_NAME\\\\AD_USER
  --access-level rw

检查用户权限是否设置正确

$ manila access-list FILE_SHARE_NAME

AD_DOMAIN_NAME\AD_USER 必须列在 access_to 列中,并且其状态列应显示 active,这是此命令的结果。

网络方法

存储阵列(SSH/CLI 和 WSAPI)与 manila 主机之间的连接对于共享管理是必需的。

客户端与 VFS 之间的连接对于挂载和使用共享是必需的。这包括

  • 从客户端到外部网络的路由

  • 为客户端分配外部 IP 地址(例如,浮动 IP)

  • 正确配置 manila 主机网络以进行 IP 转发

  • 正确配置 VFS 网络以进行客户端子网

共享类型

创建共享时,可以指定共享类型以确定将在何处以及如何创建共享。如果未指定共享类型,则使用 manila 配置文件的 default_share_type 设置。

Manila 要求共享类型包括 driver_handles_share_servers 额外规范。这可确保共享将在支持请求的 driver_handles_share_servers(共享网络)功能的后端上创建。对于 HPE 3PAR 驱动程序,必须将其设置为 False。

另一个常用的 manila 额外规范是 share_backend_name。当此额外规范在共享类型中定义时,共享将在具有匹配 share_backend_name 的后端上创建。

HPE 3PAR 驱动程序根据用于每个后端的 FPG 自动报告功能。管理员可以创建带有额外规范的共享类型,以控制哪些共享类型允许使用具有或不具有特定功能的 FPG。以下额外规范与功能筛选器和 HPE 3PAR 驱动程序一起使用

  • hpe3par_flash_cache = ‘<is> True’ 或 ‘<is> False’

  • thin_provisioning = ‘<is> True’ 或 ‘<is> False’

  • dedupe = ‘<is> True’ 或 ‘<is> False’

hpe3par_flash_cache 对于启用 3PAR 自适应闪存缓存的后端,将报告为 True。

thin_provisioning 对于使用精简配置卷的后端,将报告为 True。使用完全配置卷的 FPG 将报告 False。使用精简配置的后端也支持 manila 的过度订阅功能。

dedupe 对于使用重复数据删除技术的后端,将报告为 True。

作用域额外的规范用于影响特定于供应商的实现细节。作用域额外的规范使用前缀后跟冒号。对于 HPE 3PAR,这些额外的规范具有 hpe3par 前缀。对于 HP 3PAR,这些额外的规范具有 hp3par 前缀。

以下 HPE 3PAR 额外的规范在创建 CIFS (SMB) 共享时使用

  • hpe3par:smb_access_based_enum = true 或 false

  • hpe3par:smb_continuous_avail = true 或 false

  • hpe3par:smb_cache = off, manual, optimized 或 auto

smb_access_based_enum(基于访问的枚举)指定用户是否只能看到他们被允许访问共享中的文件和目录。默认值为 false

smb_continuous_avail(连续可用性)指定是否应为此共享启用 SMB3 连续可用性功能。如果未指定,则默认值为 true。此设置将在 hp3parclient 3.2.1 或更早版本中被忽略。

smb_cache 指定客户端离线文件的缓存。有效值为

  • off: 客户端不得缓存此共享中的任何文件。配置为禁止缓存共享。

  • manual: 客户端只能允许手动缓存从此共享打开的文件。

  • optimized: 客户端可以缓存它从此共享打开的每个文件。此外,客户端可以从其本地缓存满足文件请求。配置为允许自动缓存程序和文档。

  • auto: 客户端可以缓存它从此共享打开的每个文件。配置为允许自动缓存文档。

  • 如果未指定此项,则默认值为 manual

以下 HPE 3PAR 额外的规范在创建 NFS 共享时使用

  • hpe3par:nfs_options = 以逗号分隔的 NFS 导出选项列表

NFS 导出选项具有以下限制

  • rorw 不允许(manila 将确定只读选项)

  • no_subtree_checkfsid 不允许,因为 HPE 3PAR CLI 支持

  • (in)secure(no_)root_squash 不允许,因为 HPE 3PAR 驱动程序控制这些设置

所有其他 NFS 选项都转发到 HPE 3PAR 作为共享创建的一部分。HPE 3PAR 将在共享创建时进行额外的验证。有关更多详细信息,请参阅 HPE 3PAR CLI 帮助。

删除嵌套共享

当删除嵌套共享时(当 hpe_3par_fstore_per_share 设置为 False 时,将创建嵌套共享),文件树也会尝试被删除。

对于 NFS 共享,无需进行其他配置。

对于 CIFS 共享,必须提供 hpe3par_cifs_admin_access_usernamehpe3par_cifs_admin_access_password。如果省略,则会保留原始功能,并且文件树保持不变。hpe3par_cifs_admin_access_domainhpe3par_share_mount_path 也可以指定以创建进一步的自定义。

The manila.share.drivers.hpe.hpe_3par_driver 模块

HPE 3PAR Driver for OpenStack Manila。

class FPG(min_ip=0, max_ip=4, type_name='FPG')

Bases: String, IPAddress

FPG 类型。

用于表示每个后端多个池值。将配置值转换为 FPG 值。FPG 值格式

FPG name, IP address 1, IP address 2, ..., IP address 4

其中 FPG 名称是字符串值,IP 地址是 types.IPAddress 类型

可选地进行范围检查。如果值为空白或空字符串,将引发错误

参数:
  • min_ip – 可选检查 VFS 的最小 IP 地址数量。

  • max_ip – 可选检查 VFS 的最大 IP 地址数量。

  • type_name – 要在示例配置文件中使用的类型名称。

MAX_SUPPORTED_IP_PER_VFS = 4
class HPE3ParShareDriver(*args, **kwargs)

基类: ShareDriver

HPE 3PAR Manila 驱动程序。

支持具有文件 Persona 的数组上的 NFS 和 CIFS 协议。

版本历史

1.0.0 - Begin Liberty development (post-Kilo)
1.0.1 - Report thin/dedup/hp_flash_cache capabilities
1.0.2 - Add share server/share network support
2.0.0 - Rebranded HP to HPE
2.0.1 - Add access_level (e.g. read-only support)
2.0.2 - Add extend/shrink
2.0.3 - Remove file tree on delete when using nested shares #1538800
2.0.4 - Reduce the fsquota by share size
        when a share is deleted #1582931
2.0.5 - Add update_access support
2.0.6 - Multi pool support per backend
2.0.7 - Fix get_vfs() to correctly validate conf IP addresses at
        boot up #1621016
2.0.8 - Replace ConsistencyGroup with ShareGroup
VERSION = '2.0.8'
static build_share_comment(share)

创建一个仅供参考的注释,以帮助管理员和测试人员。

check_for_setup_error()

检查设置错误。

choose_share_server_compatible_with_share(context, share_servers, share, snapshot=None, share_group=None, encryption_key_ref=None)

允许驱动程序为提供的共享选择共享服务器的方法。

如果未找到兼容的共享服务器,该方法应返回 None。

参数:
  • context – 当前上下文

  • share_servers – 共享服务器模型列表

  • share – 共享模型

  • snapshot – 快照模型

  • share_group – 具有共享的 ShareGroup 模型

返回值:

共享服务器或 None

create_share(context, share, share_server=None)

用于创建共享。

create_share_from_snapshot(context, share, snapshot, share_server=None, parent_share=None)

用于从快照创建共享。

create_snapshot(context, snapshot, share_server=None)

创建共享的快照。

delete_share(context, share, share_server=None)

删除共享及其 fstore。

delete_snapshot(context, snapshot, share_server=None)

删除共享的快照。

do_setup(context)

共享驱动程序启动时执行的任何初始化。

ensure_share(context, share, share_server=None)

调用以确保共享已导出。

驱动程序可以使用此方法更新共享的导出位置列表(如果发生更改)。为此,应返回包含导出位置的列表。

如果驱动程序实现“get_backend_info”和“ensure_shares”,则优选而不是此例程。

返回值:

None 或包含导出位置的列表

extend_share(share, new_size, share_server=None)

扩展现有共享的大小。

get_network_allocations_number()

返回创建 VIF 的网络分配数量。

使用 Nova 进行共享服务器的驱动程序应在此处返回零 (0),就像通用驱动程序一样。因为 Nova 将处理网络资源分配。自行处理网络的驱动程序应根据自己的要求进行计算。它可以有 1 个或多个网络接口。

static sha1_hash(clazz)

获取类的来源的 SHA1 哈希值。

shrink_share(share, new_size, share_server=None)

缩小现有共享的大小。

update_access(context, share, access_rules, add_rules, delete_rules, update_rules, share_server=None)

更新对共享的访问权限。

to_list(var)

如果不是,则将 var 转换为列表类型