Manila 驱动配置

Manila 配置

驱动配置

Generic 驱动配置

网络配置

可以使用以下两种可能的配置之一进行共享配置

  • 服务 VM 具有来自连接到公共路由器的网络的一个网络接口。为了成功创建共享,用户网络也应该连接到公共路由器。
  • 服务 VM 有两个网络接口,第一个连接到服务网络,第二个直接连接到用户的网络。

服务镜像要求

  • 基于 Linux 的发行版
  • NFS 服务器
  • Samba 服务器> = 3.2.0,可以通过存储在注册表中的数据进行配置
  • SSH 服务器
  • 配置为 DHCP 的两个网络接口(请参阅网络配置)
  • exportfs和用于共享操作的库net conf
  • 以下文件会被使用,因此如果它们的路径不同,则至少需要为它们创建软链接:
    • /etc/exports:NFS 导出的永久文件
    • /var/lib/nfs/etab:使用 NFS 导出的临时文件 exportfs
    • /etc/fstab:已挂载文件系统的永久文件
    • /etc/mtab:临时文件,其中包含已安装的文件系统 mount

支持的操作

该驱动程序支持 CIFS 和 NFS 共享

支持以下操作:

  • 创建一个共享

  • 删除共享

  • 允许共享访问

    请注意以下限制:

    • NFS 和 CIFS 仅支持 IP 访问类型
  • 拒绝共享访问权限

  • 创建快照

  • 删除快照

  • 从快照创建共享

  • 扩大共享

  • 缩小共享

已知限制

  • nova 的配置之一只允许每台服务器 26 个共享。此限制来自用于块设备附加的最大虚拟 PCI 接口数。有 28 个虚拟 PCI 接口,在此配置中,其中两个用于服务器需求,另外 26 个用于附加用于共享的块设备
  • 在扩大共享操作期间,共享访问将被短暂中断
  • 缩小共享功能实质上并无实效,因为 generic 驱动程序仅缩小文件系统大小,并且不会缩小 Cinder 卷的大小

具体配置

配置共享后端
  • manila.conf 配置文件中加入 CEPHFS 协议

    1
    
    enabled_share_protocols = NFS,CIFS
    
  • 在配置文件最后创建一个 section 来定义 generic 后端

     1
     2
     3
     4
     5
     6
     7
     8
     9
    10
    11
    
    [generic1]
    driver_handles_share_servers = True
    service_instance_flavor_id = 100
    service_instance_user = manila
    service_instance_password = manila
    service_image_name = manila-service-image-master
    #path_to_private_key = /opt/stack/.ssh/id_rsa
    #path_to_public_key = /opt/stack/.ssh/id_rsa.pub
    manila_service_keypair_name = manila-service
    share_backend_name = GENERIC1
    share_driver = manila.share.drivers.generic.GenericShareDriver
    

    可以使用 SSH 密钥而不是密码身份验证来获取服务实例凭据,如果要使用 SSH 密钥可以向下面这样取消注释

    path_to_private_key = /opt/stack/.ssh/id_rsa path_to_public_key = /opt/stack/.ssh/id_rsa.pub

    另外 service_image_name, service_instance_flavor_id, service_instance_userservice_instance_password 等选项是设定的启动 share server 的相关参数,可根据情况做修改

    service_image_name 的值为 glance 中有的满足驱动要求的服务器镜像名

  • enabled_share_backends 配置项中加入定义的 generic1 后端

    1
    
    enabled_share_backends = generic1
    

    每次修改配置后都需要重启 manila-share 服务才能生效

创建共享
  • 首先创建一个 generic 共享类型

     1
     2
     3
     4
     5
     6
     7
     8
     9
    10
    11
    
    $ manila type-create default_share_type True
    +----------------------+--------------------------------------+
    | Property             | Value                                |
    +----------------------+--------------------------------------+
    | required_extra_specs | driver_handles_share_servers : True  |
    | Name                 | default_share_type                   |
    | Visibility           | public                               |
    | is_default           | -                                    |
    | ID                   | 8a35da28-0f74-490d-afff-23664ecd4f01 |
    | optional_extra_specs | snapshot_support : True              |
    +----------------------+--------------------------------------+
    
  • 如果没有 service image,可使用下面的命令进行创建

     1
     2
     3
     4
     5
     6
     7
     8
     9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    
    $ glance image-create \
    --name "manila-service-image" \
    --disk-format qcow2 \
    --container-format bare \
    --visibility public --progress < manila-service-image-master.qcow2
    [=============================>] 100%
    +------------------+--------------------------------------+
    | Property         | Value                                |
    +------------------+--------------------------------------+
    | checksum         | 48a08e746cf0986e2bc32040a9183445     |
    | container_format | bare                                 |
    | created_at       | 2016-01-26T19:52:24Z                 |
    | disk_format      | qcow2                                |
    | id               | 1fc7f29e-8fe6-44ef-9c3c-15217e83997c |
    | min_disk         | 0                                    |
    | min_ram          | 0                                    |
    | name             | manila-service-image                 |
    | owner            | e2c965830ecc4162a002bf16ddc91ab7     |
    | protected        | False                                |
    | size             | 306577408                            |
    | status           | active                               |
    | tags             | []                                   |
    | updated_at       | 2016-01-26T19:52:28Z                 |
    | virtual_size     | None                                 |
    | visibility       | public                               |
    +------------------+--------------------------------------+
    
  • 列出可用网络以获取专用网络的 ID 和子网

    1
    2
    3
    4
    5
    6
    7
    
    $ neutron net-list
    +--------------------------------------+---------+----------------------------------------------------+
    | id                                   | name    | subnets                                            |
    +--------------------------------------+---------+----------------------------------------------------+
    | 0e62efcd-8cee-46c7-b163-d8df05c3c5ad | public  | 5cc70da8-4ee7-4565-be53-b9c011fca011 10.3.31.0/24  |
    | 7c6f9b37-76b4-463e-98d8-27e5686ed083 | private | 3482f524-8bff-4871-80d4-5774c2730728 172.16.1.0/24 |
    +--------------------------------------+---------+----------------------------------------------------+
    
  • 创建共享网络

     1
     2
     3
     4
     5
     6
     7
     8
     9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    
    $ manila share-network-create --name demo-share-network1 \
    --neutron-net-id PRIVATE_NETWORK_ID \
    --neutron-subnet-id PRIVATE_NETWORK_SUBNET_ID
    +-------------------+--------------------------------------+
    | Property          | Value                                |
    +-------------------+--------------------------------------+
    | name              | demo-share-network1                  |
    | segmentation_id   | None                                 |
    | created_at        | 2016-01-26T20:03:41.877838           |
    | neutron_subnet_id | 3482f524-8bff-4871-80d4-5774c2730728 |
    | updated_at        | None                                 |
    | network_type      | None                                 |
    | neutron_net_id    | 7c6f9b37-76b4-463e-98d8-27e5686ed083 |
    | ip_version        | None                                 |
    | cidr              | None                                 |
    | project_id        | e2c965830ecc4162a002bf16ddc91ab7     |
    | id                | 58b2f0e6-5509-4830-af9c-97f525a31b14 |
    | description       | None                                 |
    +-------------------+--------------------------------------+
    
  • 使用共享网络创建 NFS 共享。由于已创建并配置了默认共享类型,因此无需在请求中指定。

     1
     2
     3
     4
     5
     6
     7
     8
     9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    
    $ manila create NFS 1 --name demo-share1 --share-network demo-share-network1
    +-----------------------------+--------------------------------------+
    | Property                    | Value                                |
    +-----------------------------+--------------------------------------+
    | status                      | None                                 |
    | share_type_name             | default_share_type                   |
    | description                 | None                                 |
    | availability_zone           | None                                 |
    | share_network_id            | 58b2f0e6-5509-4830-af9c-97f525a31b14 |
    | share_group_id              | None                                 |
    | host                        | None                                 |
    | snapshot_id                 | None                                 |
    | is_public                   | False                                |
    | task_state                  | None                                 |
    | snapshot_support            | True                                 |
    | id                          | 016ca18f-bdd5-48e1-88c0-782e4c1aa28c |
    | size                        | 1                                    |
    | name                        | demo-share1                          |
    | share_type                  | 8a35da28-0f74-490d-afff-23664ecd4f01 |
    | created_at                  | 2016-01-26T20:08:50.502877           |
    | export_location             | None                                 |
    | share_proto                 | NFS                                  |
    | project_id                  | 48e8c35b2ac6495d86d4be61658975e7     |
    | metadata                    | {}                                   |
    +-----------------------------+--------------------------------------+
    
  • 一段时间后,共享状态应更改 creatingavailable

    1
    2
    3
    4
    5
    6
    
    $ manila list
    +--------------------------------------+-------------+------+-------------+-----------+-----------+------------------------+-----------------------------+-------------------+
    | ID                                   | Name        | Size | Share Proto | Status    | Is Public | Share Type Name        | Host                        | Availability Zone |
    +--------------------------------------+-------------+------+-------------+-----------+-----------+------------------------+-----------------------------+-------------------+
    | 5f8a0574-a95e-40ff-b898-09fd8d6a1fac | demo-share1 | 1    | NFS         | available | False     |   default_share_type   | storagenode@generic#GENERIC | nova              |
    +--------------------------------------+-------------+------+-------------+-----------+-----------+------------------------+-----------------------------+-------------------+
    
  • 查看共享的导出 IP 地址

     1
     2
     3
     4
     5
     6
     7
     8
     9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    
    $ manila show demo-share1
    +-----------------------------+------------------------------------------------------------------------------------+
    | Property                    | Value                                                                              |
    +-----------------------------+------------------------------------------------------------------------------------+
    | status                      | available                                                                          |
    | share_type_name             | default_share_type                                                                 |
    | description                 | None                                                                               |
    | availability_zone           | nova                                                                               |
    | share_network_id            | 58b2f0e6-5509-4830-af9c-97f525a31b14                                               |
    | share_group_id              | None                                                                               |
    | export_locations            |                                                                                    |
    |                             | path = 10.254.0.6:/shares/share-0bfd69a1-27f0-4ef5-af17-7cd50bce6550               |
    |                             | id = e525cbca-b3cc-4adf-a1cb-b1bf48fa2422                                          |
    |                             | preferred = False                                                                  |
    | host                        | storagenode@generic#GENERIC                                                        |
    | access_rules_status         | active                                                                             |
    | snapshot_id                 | None                                                                               |
    | is_public                   | False                                                                              |
    | task_state                  | None                                                                               |
    | snapshot_support            | True                                                                               |
    | id                          | 5f8a0574-a95e-40ff-b898-09fd8d6a1fac                                               |
    | size                        | 1                                                                                  |
    | name                        | demo-share1                                                                        |
    | share_type                  | 8a35da28-0f74-490d-afff-23664ecd4f01                                               |
    | has_replicas                | False                                                                              |
    | replication_type            | None                                                                               |
    | created_at                  | 2016-03-30T19:10:33.000000                                                         |
    | share_proto                 | NFS                                                                                |
    | project_id                  | 48e8c35b2ac6495d86d4be61658975e7                                                   |
    | metadata                    | {}                                                                                 |
    +-----------------------------+------------------------------------------------------------------------------------+
    
访问许可
  • 在尝试通过网络挂载之前配置对新共享的访问许可。计算实例(其 IP 地址由下面的 INSTANCE_IP 引用)必须具有到共享网络中指定的网络的网络连接

     1
     2
     3
     4
     5
     6
     7
     8
     9
    10
    11
    
    $ manila access-allow demo-share1 ip INSTANCE_IP
    +--------------+--------------------------------------+
    | Property     | Value                                |
    +--------------+--------------------------------------+
    | share_id     | 5f8a0574-a95e-40ff-b898-09fd8d6a1fac |
    | access_type  | ip                                   |
    | access_to    | 10.0.0.46                            |
    | access_level | rw                                   |
    | state        | new                                  |
    | id           | aefeab01-7197-44bf-ad0f-d6ca6f99fc96 |
    +--------------+--------------------------------------+
    
  • 查看可访问列表

    1
    
    manila access-list demo-share1
    
在计算实例上挂载共享
  • 登录到计算实例并创建一个放置挂载的文件夹,如下

    1
    
    $ mkdir ~/test_folder
    
  • 使用共享的导出位置在计算实例中挂载 NFS 共享,如下

    1
    
    $ sudo mount -vt nfs 10.254.0.6:/shares/share-0bfd69a1-27f0-4ef5-af17-7cd50bce6550 ~/test_folder
    
卸载共享

可使用以下命令进行共享的卸载

1
sudo umount mountpoint

CephFS 驱动配置

CephFS 驱动程序使 manila 能够使用 Ceph 网络协议或 NFS 协议导出由 Ceph 的文件系统(CephFS)支持的共享文件系统。guest 虚拟机需要本机 Ceph 客户端或 NFS 客户端才能挂载文件系统。

当访客使用本机 Ceph 协议访问 CephFS 时,访问权限通过 Ceph 的 cephx 身份验证系统进行控制。如果用户请求对 ID 进行共享访问,Ceph 会创建相应的 Ceph 身份验证 ID 和密钥(如果它们尚不存在),并授权该 ID 访问该共享。然后,客户端可以使用 ID 和密钥安装共享。要了解有关配置 Ceph 客户端以访问使用此驱动程序创建的共享的更多信息,请参阅 Ceph 文档(http://docs.ceph.com/docs/master/cephfs/)。如果您选择使用内核客户端而不是 FUSE 客户端,则可能无法遵守 manila 中设置的共享大小限制。

当 guest 虚拟机通过 NFS 访问 CephFS 时,NFS-Ganesha 服务器会中转对 CephFS 的访问。该驱动程序通过管理 NFS-Ganesha 服务器的 exports 来启用访问控制。

支持的操作

CephFS 后端支持以下操作:

  • 创建/删除共享

  • 允许/拒绝 CephFS 本机协议访问共享

    • CephFS native 协议仅支持 cephx 访问类型
    • read-only 访问级别在 N 版及更高版本的 Manila 才支持
    • read-write 访问级别在 M 版及更高版本的 Manila 才支持
  • 允许/拒绝 NFS 访问共享

    • NFS 协议仅支持 ip 访问类型
    • read-onlyread-write 访问控制在 P 版本后及更高版本才支持
  • 扩大/缩小共享

  • 创建/删除快照

  • 创建/删除一致性组(CG)

  • 创建/删除 CG 快照

CephFS 目前支持快照仅作为实验性功能,因此使用 CephFS Native 驱动程序的快照支持也是实验性的,不应在生产环境中使用。有关更多信息,请参阅(http://docs.ceph.com/docs/master/cephfs/experimental-features/#snapshots

先决条件

对于 CephFS native 共享
  • M 版或更高版本的 manila
  • J 版或更高版本的 Ceph
  • 配置了文件系统的 Ceph 集群( http://docs.ceph.com/docs/master/cephfs/createfs/
  • 运行 manila-share 服务的服务器安装了 ceph-common 软件包
  • 客户虚拟机中安装了 Ceph 客户端,最好是 ceph-fuse
  • 确保 Ceph 集群的公共网络和运行 manila 共享服务的服务器之间的网络连接
  • 确保 Ceph 集群的公共网络和客户虚拟机之间的网络连接
对于 CephFS NFS 共享
  • P 版或更高版本的 manila
  • K 版或更高版本的 Ceph
  • 2.5 或更高版本的 NFS-Ganesha
  • 配置了文件系统的 Ceph 集群( http://docs.ceph.com/docs/master/cephfs/createfs/
  • 运行 manila-share 服务的服务器安装了 ceph-common 软件包
  • 客户虚拟机中安装了 NFS 客户端
  • 确保 Ceph 集群的公共网络和运行 manila 共享服务的服务器之间的网络连接
  • 确保 Ceph 集群的公共网络和 NFS-Ganesha 服务器之间的网络连接
  • NFS-Ganesha 服务器与 manila 之间的网络连接

授权驱动程序与 Ceph 通信

运行以下命令为要使用的驱动程序实例创建 Ceph 标识

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
read -d '' MON_CAPS << EOF
allow r,
allow command "auth del",
allow command "auth caps",
allow command "auth get",
allow command "auth get-or-create"
EOF

ceph auth get-or-create client.manila -o manila.keyring \
mds 'allow *' \
osd 'allow rw' \
mon "$MON_CAPS"

然后将 Ceph 集群服务器上生成的 manila.keyring 文件和 ceph.conf 文件(一般为 /etc/ceph/ceph.conf)复制到运行 manila-share 服务的服务器上的 /etc/ceph 文件夹下,同时为 manila-share 服务和 manila.keyring 文件设置相同的所有者,最后再在 ceph.conf 文件中加入以下内容

1
2
3
4
5
6
[client.manila]
client mount uid = 0
client mount gid = 0
log file = /opt/stack/logs/ceph-client.manila.log
admin socket = /opt/stack/status/stack/ceph-$name.$pid.asok
keyring = /etc/ceph/manila.keyring

为了与 Ceph 后端通信,CephFS 驱动程序实例(在 manila.conf 中表示为后端驱动程序部分)需要其自己的 Ceph 身份验证 ID,该 ID 不在同一控制器节点中运行的其他 CephFS 驱动程序实例中使用,说白了就是对于不同的驱动程序实例不要使用相同的认证标识

建议修改 Ceph 客户端的管理套接字文件和日志文件位置,以便它们分别与马尼拉服务的 pid 文件和日志文件位于同一位置

在 Ceph 后端启用快照支持

如果要在 manila 中使用快照,请在 Ceph 中启用快照,要启用快照需在 Ceph 服务器上执行以下命令

1
ceph mds set allow_new_snaps true --yes-i-really-mean-it

需要注意的是,CephFS 驱动程序的快照支持是实验性的,并且已知有几个注意事项可供使用。manila.conf如果您了解这些风险,请仅启用此选项和等效选项。有关更多详细信息,请参阅(http://docs.ceph.com/docs/master/cephfs/experimental-features/#snapshots

CephFS Native 驱动配置

配置共享后端
  • manila.conf 配置文件中加入 CEPHFS 协议

    1
    
    enabled_share_protocols = NFS,CIFS,CEPHFS
    
  • 在配置文件最后创建一个 section 来定义 CephFS native 后端

    1
    2
    3
    4
    5
    6
    7
    8
    9
    
    [cephfsnative1]
    driver_handles_share_servers = False
    share_backend_name = CEPHFSNATIVE1
    share_driver = manila.share.drivers.cephfs.driver.CephFSDriver
    cephfs_conf_path = /etc/ceph/ceph.conf
    cephfs_protocol_helper_type = CEPHFS
    cephfs_auth_id = manila
    cephfs_cluster_name = ceph
    cephfs_enable_snapshots = False
    

    需要注意一下,对于 Mitaka, Newton, and Ocata 等版本,share_driver 的路径是 manila.share.drivers.cephfs.cephfs_native.CephFSNativeDriver

  • enabled_share_backends 配置项中加入定义的 cephfsnative1 后端

    1
    
    enabled_share_backends = generic1,cephfsnative1
    

    每次修改配置后都需要重启 manila-share 服务才能生效

创建共享
  • 首先创建一个 CephFS native 共享类型

    1
    2
    
    manila type-create cephfsnativetype false
    manila type-key cephfsnativetype set vendor_name=Ceph storage_protocol=CEPHFS
    
  • 然后创建一个共享

    1
    
    manila create --share-type cephfsnativetype --name cephnativeshare1 cephfs 1
    
  • 查看共享的导出位置

    1
    
    manila share-export-location-list cephnativeshare1
    

    共享的导出位置包含 Ceph 监视器(mon)地址和端口以及要挂载的路径,形如 {mon ip addr:port}[,{mon ip addr:port}]:{path to be mounted}

访问许可
  • 允许 Ceph auth ID alice使用cephx访问类型访问共享

    1
    
    manila access-allow cephnativeshare1 cephx alice
    
  • 查看可访问列表

    1
    
    manila access-list cephnativeshare1
    
挂载共享
  • 使用授权 ID alice的密钥创建密钥环文件 alice.keyring,如下

    1
    2
    
    [client.alice]
            key = AQA8+ANW/4ZWNRAAOtWJMFPEihBA1unFImJczA==
    
  • 使用共享导出位置中的 mon IP 地址,创建配置文件 ceph.conf,如下

    1
    2
    3
    
    [client]
            client quota = true
            mon host = 192.168.1.7:6789, 192.168.1.8:6789, 192.168.1.9:6789
    
  • 最后,挂载文件系统,使用刚刚创建的密钥环和配置文件替换对应的文件名,并用对应共享的导出位置替换要挂载的路径

    1
    2
    3
    4
    5
    
    sudo ceph-fuse ~/mnt \
    --id=alice \
    --conf=./ceph.conf \
    --keyring=./alice.keyring \
    --client-mountpoint=/volumes/_nogroup/4c55ad20-9c55-4a5e-9233-8ac64566b98c
    
卸载共享

可使用以下命令进行共享的卸载

1
sudo fusermount -u mountpoint

CephFS NFS 驱动配置

配置共享后端
  • manila.conf 配置文件中加入 NFS 协议

    1
    
    enabled_share_protocols = NFS,CIFS,CEPHFS
    
  • 在配置文件最后创建一个 section 来定义 CephFS native 后端

     1
     2
     3
     4
     5
     6
     7
     8
     9
    10
    11
    
    [cephfsnfs1]
    driver_handles_share_servers = False
    share_backend_name = CEPHFSNFS1
    share_driver = manila.share.drivers.cephfs.driver.CephFSDriver
    cephfs_protocol_helper_type = NFS
    cephfs_conf_path = /etc/ceph/ceph.conf
    cephfs_auth_id = manila
    cephfs_cluster_name = ceph
    cephfs_enable_snapshots = False
    cephfs_ganesha_server_is_remote= False
    cephfs_ganesha_server_ip = 172.24.4.3
    
    • 设置 driver_handles_share_servers 为 False,因为驱动程序不管理共享服务器的生命周期
    • 设置 cephfs_protocol_helper_type 为 NFS 允许 NFS 协议访问 CephFS 支持的共享
    • cephfs_auth_id 转换为授权驱动程序与 Ceph 通信时创建的 Ceph 身份
    • 如果 NFS-ganesha 服务器与 manila-share 服务位于同一位置,cephfs_ganesha_server_is_remote 的值则为 False,如果 NFS-ganesha 服务器是远程的,则为 True,并且要再添加cephfs_ganesha_server_ip, cephfs_ganesha_server_usernamecephfs_ganesha_server_password 选项(或者是 cephfs_ganesha_path_to_private_key 选项)
    • cephfs_ganesha_server_ip 是 NFS-ganesha 服务器的 ip 地址,即使 ganesha 服务器与 manila-share 服务位于同一位置,也建议设置此选项
  • enabled_share_backends 配置项中加入定义的 cephfsnative1 后端

    1
    
    enabled_share_backends = generic1,cephfsnative1,cephfsnfs1
    

    每次修改配置后都需要重启 manila-share 服务才能生效

创建共享
  • 首先创建一个 CephFS NFS 共享类型

    1
    2
    
    manila type-create cephfsnfstype false
    manila type-key cephfsnfstype set vendor_name=Ceph storage_protocol=NFS
    
  • 然后创建一个共享

    1
    
    manila create --share-type cephfsnfstype --name cephnfsshare1 nfs 1
    
  • 查看共享的导出位置

    1
    
    manila share-export-location-list cephnfsshare1
    

    共享的导出位置包含 NFS-Ganesha 服务器的 IP 地址和要挂载的路径,形如 {NFS-Ganesha server address}:{path to be mounted}

访问许可
  • 允许访客使用 ip 访问类型访问共享

    1
    
    manila access-allow cephnfsshare1 ip 172.24.4.225
    
  • 查看可访问列表

    1
    
    manila access-list cephnfsshare1
    
挂载共享
  • 在 guest 虚拟机中,使用 NFS 客户端挂载共享

    1
    
    sudo mount -t nfs 172.24.4.3:/volumes/_nogroup/6732900b-32c1-4816-a529-4d6d3f15811e /mnt/nfs/
    
卸载共享

可使用以下命令进行共享的卸载

1
sudo umount mountpoint

参考链接

updatedupdated2019-02-242019-02-24