OpenStack系列(十四) Manila共享文件存储介绍与实践
1 | 作者:李晓辉 |
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 | (undercloud) [stack@director ~]$ source overcloudrc |
创建共享
创建一个名为 host-share 的共享实例,使用 CephFS 协议,并且基于 cephfstype 共享类型,大小为 1 GB。
1 | (overcloud) [stack@director ~]$ manila create --name host-share --share-type cephfstype cephfs 1 |
看看我们的共享信息
1 | (overcloud) [stack@director ~]$ manila share-export-location-list host-share |
创建访问规则
这条命令会自动创建ceph用户
1 | (overcloud) [stack@director ~]$ manila access-allow host-share cephx ceph-user-lxh |
导出密钥
1 | [root@controller0 ~]# podman exec -it ceph-mgr-controller0 ceph auth get client.ceph-user-lxh > /etc/ceph/ceph.client.ceph-user-lxh.keyring |
挂载共享
客户端需要拥有以下资源,才可以挂
租户内部网络和存储网络
http://materials.example.com/ceph.repo
yum install ceph-fuse
1 | ceph-fuse /mnt/ceph/ \ |