1
2
3
4
5
6
7
作者:李晓辉

联系方式:

1. 微信:Lxh_Chat

2. 邮箱:939958092@qq.com

Manila 概述

OpenStack Manila 是 OpenStack 项目中的一个组件,用于提供共享文件系统服务,旨在为虚拟机和其他计算资源提供可扩展、可管理的共享存储。

在云计算环境中,虚拟机和应用程序需要访问共享存储资源,以便进行数据共享和协作。传统的存储解决方案通常复杂且难以管理,而 Manila 的目标是提供一个简单、灵活且可扩展的共享文件系统服务,满足云环境中对共享存储的需求。

它允许用户创建、管理和访问共享文件系统,这些文件系统可以被多个虚拟机或计算节点同时挂载和访问。

主要功能

  • 共享文件系统管理:Manila 允许用户创建、删除、扩展和收缩共享文件系统。用户可以根据需求指定文件系统的大小、类型(如 NFS、CIFS 等)以及访问权限。

  • 多租户支持:Manila 支持多租户环境,不同租户之间的共享文件系统是隔离的,确保数据的安全性和隐私性。每个租户可以独立管理自己的共享文件系统。

  • 访问控制:Manila 提供灵活的访问控制机制,用户可以指定哪些虚拟机或计算节点可以访问特定的共享文件系统,并设置相应的权限(如只读、读写等)。

  • 存储后端支持:Manila 支持多种存储后端,包括传统的存储设备(如 SAN、NAS)、分布式存储系统(如 CephFS)以及云存储服务。它通过插件机制与不同的存储后端进行集成,用户可以根据自己的需求选择合适的存储解决方案。

  • 集成与自动化:Manila 与 OpenStack 的其他组件(如 Nova、Cinder 等)紧密集成,可以通过 OpenStack 的 API 或命令行工具进行管理和操作。此外,它还支持自动化部署和管理,可以与云编排工具(如 Heat)配合使用,实现共享文件系统的自动化创建和配置。

Manila 的架构

Manila 的架构主要由以下几个组件组成:

  • Manila API:提供 RESTful API 接口,用于接收用户的请求并将其转发到后端服务。用户可以通过 API 或命令行工具(如 manila 命令行客户端)与 Manila 进行交互。

  • Manila Scheduler:负责根据用户的请求和存储后端的资源情况,选择合适的存储后端来创建共享文件系统。它会考虑存储容量、性能、可用性等因素,以确保共享文件系统的高效创建和管理。

  • Manila Share Driver:是 Manila 与存储后端之间的适配器,负责将 Manila 的操作请求转换为存储后端可以理解的命令。Manila 提供了多种 Share Driver,支持不同的存储后端,如 NFS、CIFS、CephFS 等。

  • Manila Data Path:负责共享文件系统的数据传输和访问。它通过网络将共享文件系统的内容提供给虚拟机或计算节点,支持多种协议(如 NFS、CIFS 等),以满足不同用户的需求。

Manila管理的资源

1. 共享实例

你可以把共享实例想象成一个“共享文件夹”。就像你在电脑上创建了一个文件夹,然后把它共享给朋友,让他们也能访问里面的文件一样。在 Manila 里,共享实例就是这样一个“共享文件夹”,不过它是在云里,可以被多个虚拟机或者计算节点同时访问。比如,你有一堆虚拟机在跑不同的任务,它们都可以通过这个共享实例来读取或者写入数据,很方便对吧!

2. 共享类型

这就像是共享文件夹的“格式”。不同的共享类型就像是不同的文件系统格式,比如 NFS(网络文件系统)、CephFS(基于 Ceph 的文件系统)等等。就好比你和朋友聊天的时候,你们得用同一种语言或者格式才能顺利沟通。在 Manila 里,不同的共享类型决定了共享实例的性能、功能和兼容性。比如,NFS 是比较传统的共享类型,很多系统都能用;而 CephFS 是比较新的,性能可能更好,但需要特定的存储后端支持。

3. 共享网络

这个就有点像“网络桥接”。想象一下,你和朋友在不同的房间里,但你们想通过同一个网络来共享文件。共享网络的作用就是把租户的网络(也就是你的“房间”)和共享实例所在的网络连接起来。简单来说,它就像是一个“通道”,让你的虚拟机能够顺利访问共享实例。如果没有这个共享网络,你的虚拟机可能就找不到共享实例,或者访问起来很慢。

4. 共享访问规则

这个就好比你和朋友之间的“权限设置”。比如,你有一个共享文件夹,你可以决定谁可以读取文件,谁可以修改文件。在 Manila 里,共享访问规则就是用来控制谁可以访问共享实例,以及他们可以做什么操作。比如,你可以设置某个虚拟机只能读取文件(只读权限,也就是 ro),而另一个虚拟机可以读写文件(读写权限,也就是 rw)。这样就能保证数据的安全,同时也能满足不同用户的需求。

Manila实战演示

创建共享类型

false:这个参数是指定 driver_handles_share_servers 的值。false 表示这个共享类型不需要 Manila 的驱动程序来管理共享服务器(Share Server)。换句话说,共享的创建和管理不需要依赖于 Manila 的 Share Server 功能,而是直接通过存储后端(如 Ceph)来处理。

1
2
3
4
5
6
7
8
9
10
11
12
13
(undercloud) [stack@director ~]$ source overcloudrc
(overcloud) [stack@director ~]$ manila type-create cephfstype false
+----------------------+--------------------------------------+
| Property | Value |
+----------------------+--------------------------------------+
| ID | e7f377e7-e4ad-4571-91cc-7f5abc0ac8df |
| Name | cephfstype |
| Visibility | public |
| is_default | - |
| required_extra_specs | driver_handles_share_servers : False |
| optional_extra_specs | |
| Description | None |
+----------------------+--------------------------------------+

创建共享

创建一个名为 host-share 的共享实例,使用 CephFS 协议,并且基于 cephfstype 共享类型,大小为 1 GB。

1
(overcloud) [stack@director ~]$ manila create --name host-share --share-type cephfstype cephfs 1

看看我们的共享信息

1
2
3
4
5
6
(overcloud) [stack@director ~]$ manila share-export-location-list host-share
+--------------------------------------+------------------------------------------------------------------------+-----------+
| ID | Path | Preferred |
+--------------------------------------+------------------------------------------------------------------------+-----------+
| 9b0b8d8f-be6c-444a-a8f0-a0631a806230 | 172.24.3.1:6789:/volumes/_nogroup/a3e94dcc-7c23-418b-8518-14e557df22fd | False |
+--------------------------------------+------------------------------------------------------------------------+-----------+

创建访问规则

这条命令会自动创建ceph用户

1
(overcloud) [stack@director ~]$ manila access-allow host-share cephx ceph-user-lxh

导出密钥

1
2
3
4
5
6
7
8
[root@controller0 ~]# podman exec -it ceph-mgr-controller0 ceph auth get client.ceph-user-lxh > /etc/ceph/ceph.client.ceph-user-lxh.keyring
[root@controller0 ~]# cat /etc/ceph/ceph.client.ceph-user-lxh.keyring
exported keyring for client.ceph-user-lxh
[client.ceph-user-lxh]
key = AQD0rC1nE37eDxAAtDykQVfrLM9sgIcH2z7+YQ==
caps mds = "allow rw path=/volumes/_nogroup/a3e94dcc-7c23-418b-8518-14e557df22fd"
caps mon = "allow r"
caps osd = "allow rw pool=manila_data namespace=fsvolumens_a3e94dcc-7c23-418b-8518-14e557df22fd"

挂载共享

客户端需要拥有以下资源,才可以挂

  1. 租户内部网络和存储网络

  2. http://materials.example.com/ceph.repo

  3. yum install ceph-fuse

1
2
3
4
ceph-fuse /mnt/ceph/ \
--id=cloud-user --conf=/home/cloud-user/ceph.conf \
--keyring=/home/cloud-user/cloud-user.keyring \
--client-mountpoint=/volumes/_nogroup/a3e94dcc-7c23-418b-8518-14e557df22fd