共享文件系统服务的 CephFS 后端指南
在 Red Hat OpenStack Platform Overcloud 中使用原生 CephFS 部署共享文件系统服务
摘要
使开源包含更多
红帽致力于替换我们的代码、文档和 Web 属性中存在问题的语言。我们从这四个术语开始:master、slave、黑名单和白名单。由于此项工作十分艰巨,这些更改将在即将推出的几个发行版本中逐步实施。有关更多详情,请参阅我们的首席技术官 Chris Wright 提供的消息。
第 1 章 简介
本文档与部署和原生 CephFS 使用原生 CephFS 一起,通过原生 CephFS NAS 协议在 Red Hat OpenStack Platform 云中提供自助服务共享文件系统服务(manila)。这种类型的部署需要虚拟客户机虚拟机访问 Ceph 公共网络和基础架构。红帽建议您仅部署带有可信 OpenStack Platform 租户的原生 CephFS,因为它需要一个不适合一般目的 OpenStack Platform 部署的宽松信任模型。
对于使用传统租户信任模型的常规 OpenStack Platform 部署,您可以通过 NFS 协议部署 CephFS。有关信任模型的更多信息,请参阅安全考虑。
有关通过 NFS 使用 CephFS 的更多信息,请参阅通过 NFS 使用 CephFS 部署共享文件系统服务。
使用共享文件系统服务(manila),您可以置备多个计算实例、裸机节点或容器可以使用的共享文件系统。
CephFS 是 Ceph 的高可扩展、开源分布式文件系统组件,它是一个统一的分布式存储平台。Ceph Storage 使用可靠的自主分布式对象存储(RADOS)实施对象、块和文件存储。CephFS 是兼容 POSIX 的,提供对 Ceph Storage 集群的文件访问。
共享文件系统服务允许用户在 CephFS 中创建共享并使用原生 Ceph 文件系统协议访问它们。共享文件系统服务管理 OpenStack 中这些共享的生命周期。
在此发行版本中,director 可以使用原生 CephFS 后端在 overcloud 上部署共享文件系统服务。
第 2 章 原生CephFS 带有原生驱动程序
CephFS 原生驱动程序将 OpenStack 共享文件系统服务(manila)和 Red Hat Ceph Storage 结合。使用 Red Hat OpenStack(RHOSP)director 时,Controller 节点托管 Ceph 守护进程,如管理器、元数据服务器(MDS),以及监控(MON)和共享文件系统服务。
Compute 节点可以托管一个或多个项目。项目(以前称为租户)在以下图形中由白色框表示,包含用户管理的虚拟机,由灰色框表示,并带有两个 NIC。若要访问 ceph 和 manila 守护进程项目,可通过公共 Ceph 存储网络连接到守护进程。在这个网络上,您可以访问 Ceph Object Storage Daemon(OSD)提供的存储节点上的数据。在项目引导时托管的实例 (VM) 带有两个 NIC:一个用于存储提供商网络,第二个则专用于外部提供商网络。
存储提供商网络将项目上运行的虚拟机连接到公共 Ceph 存储网络。Ceph 公共网络提供 Ceph 对象存储节点、元数据服务器(MDS)和控制器节点的后端访问。
通过利用原生驱动程序,CephFS 依赖于与客户端和服务器协作来强制实施配额,保证项目隔离和安全性。具有原生驱动程序的 CephFS 可在具有信任最终用户的环境中正常工作。此配置要求在用户控制下运行软件,才能正常工作。
![CephFS nfs 拓扑原生驱动程序](https://access.redhat.com/webassets/avalon/d/Red_Hat_OpenStack_Platform-16.1-CephFS_Back_End_Guide_for_the_Shared_File_System_Service-zh-CN/images/2cf800760ea5646d7264a33c2a2afda9/cephfs-nfs-topology-native-driver.png)
2.1. 安全考虑
原生 CephFS 后端需要 OpenStack Platform 租户的 permissive 信任模型。这种信任模型不适用于一般目的 OpenStack Platform 云,它们会故意阻止用户直接访问 OpenStack 平台所提供的服务背后的基础架构。
使用原生 CephFS 时,用户计算实例(VM)必须直接连接到 Ceph 公共网络来访问共享。Ceph 基础架构服务守护进程部署在向用户虚拟机公开的 Ceph 公共网络上。用户虚拟机上运行的 CephFS 客户端与 Ceph 服务守护进程协同工作,它们直接与 RADOS 交互,以读写文件数据块。
强制实施共享文件系统服务(manila)共享大小的 CephFS 配额在客户端一侧实施,例如在 Red Hat OpenStack Platform(RHOSP)用户拥有的虚拟机上。用户虚拟机上的客户端软件版本可能不是最新的,这可能会使关键云基础架构易受恶意或意外损害的软件(以 Ceph 服务端口为目标)。
因此,红帽建议您仅在可信用户维护客户端软件最新版本的环境中部署原生 CephFS 作为后端。用户还必须确保没有软件在其虚拟机上运行,这会影响 Ceph Storage 基础架构。
RHOSP 部署的一般目的是可能会为许多不可信用户提供服务 ,红帽建议您部署 CephFS through NFS。有关通过 NFS 使用 CephFS 的更多信息,请参阅通过 NFS 使用 CephFS 部署共享文件系统服务。
用户可能无法使客户端软件保持最新状态,它们可能无法从其虚拟机中排除有害的软件,但通过 NFS 使用 CephFS,用户只能访问 NFS 服务器的公共端,而不是 Ceph 基础架构本身。NFS 不需要同一类型的合作客户端,在最糟糕的情况下,用户虚拟机的攻击可能会损坏 NFS 网关,而不会损害 Ceph 存储基础架构。
红帽建议以下安全措施:
- 将 Storage 网络配置为提供商网络。
- 提供基于角色的访问控制(RBAC)策略来保护存储供应商网络。
- 为原生 CephFS 后端创建私有共享类型,并将其仅公开给可信租户。
第 3 章 原生 CephFS 部署
在 Red Hat OpenStack Platform(RHOSP)环境中安装典型的原生 Ceph 文件系统(CephFS)包括以下组件:
- 运行容器化 Ceph 元数据服务器(MDS)、Ceph 监控器(MON)和共享文件系统服务(manila)服务的 RHOSP Controller 节点。这些服务在同一节点上共存,或者有一个或多个专用节点。
- Ceph Storage 集群,具有在 Ceph Storage 节点上运行的容器化对象存储守护进程(OSD)。
- 用作 Ceph 公共网络的隔离存储网络,这些公共网络可以和 Ceph 服务守护进程通信。为便于提供存储网络,存储网络作为提供商网络供用户连接其虚拟机并挂载 CephFS 共享。
您不能将共享文件系统服务(manila)与 CephFS 原生驱动程序通过 Manila CSI 提供给 OpenShift Container Platform,因为红帽不支持这样的部署。如需更多信息,请联系红帽支持团队。
共享文件系统服务(manila)服务提供 API,使租户能够请求文件系统共享,由驱动程序模块实现。Red Hat CephFS 的驱动程序 manila.share.drivers.cephfs.driver.CephFSDriver
,允许共享文件系统服务将原生 CephFS 用作后端。
当 director 使用 overcloud 上的 CephFS 后端部署共享文件系统服务时,它会自动创建所需的数据中心存储网络。但是,您必须在 overcloud 上创建对应的存储供应商网络。更多信息请参阅 第 4 章 完成部署后配置。有关网络规划的更多信息,请参阅 Director 安装和使用 指南中的 Overcloud 网络。
虽然您可以通过编辑 /var/lib/config-data/puppet-generated/manila/manila/manila.conf
文件来手动配置共享文件系统服务,但在以后的 overcloud 更新中,任何设置都可以被 Red Hat OpenStack Platform director 覆盖。红帽只支持部署由 director 管理的共享文件系统服务。
本节论述了如何在由 director 管理的集成部署中安装原生 CephFS。
3.1. 要求
如果观察以下要求,您可以使用新的或现有的 Red Hat OpenStack Platform (RHOSP)环境部署原生 CephFS 后端:
- Red Hat OpenStack Platform 版本 16.1 或更高版本。
- 同时配置与原生 CephFS 后端相同的 Red Hat Ceph Storage 集群。有关如何部署 Ceph 存储的详情,请参考 https://access.redhat.com/documentation/zh-cn/red_hat_openstack_platform/16.1/html/deploying_an_overcloud_with_containerized_red_hat_ceph/index。
支持带有原生 CephFS 后端的 RHOSP 共享文件系统服务,用于 Red Hat Ceph Storage 版本 4.1 或更高版本。有关如何确定系统上安装的 Ceph Storage 版本的更多信息,请参阅 Red Hat Ceph Storage 发行版本以及对应的 Ceph 软件包版本。
- 在 Controller 节点上安装共享文件系统服务。这是默认的行为。
- 仅将 CephFS 后端的单个实例用于共享文件系统服务。
3.3. 原生 CephFS 使用的隔离网络
原生 CephFS 部署使用 director 作为 Ceph 公共网络部署的隔离存储网络。客户端使用此网络与各种 Ceph 基础架构服务守护进程通信。有关隔离网络的更多信息,请参阅高级 Overcloud 自定义指南中的基本网络隔离。
3.4. 安装 ceph-ansible 软件包
安装要在 undercloud 节点上安装的 ceph-ansible
软件包,以部署容器化 Ceph。
流程
-
以
stack
用户身份登录 undercloud 节点。 安装 ceph-ansible 软件包:
[stack@undercloud-0 ~]$ sudo dnf install -y ceph-ansible [stack@undercloud-0 ~]$ sudo dnf list ceph-ansible ... Installed Packages ceph-ansible.noarch 4.0.23-1.el8cp @rhelosp-ceph-4-tools
3.5. 部署环境
当您准备好部署环境时,请使用 openstack overcloud deploy
命令以及配置原生 CephFS 后端所需的自定义虚拟环境和角色。
除其它所需选项外,openstack overcloud deploy
命令还具有以下选项。
操作 | 选项 | 其它信息 |
---|---|---|
使用 |
[filename] |
您可以使用自定义环境文件覆盖此网络数据文件中指定的默认网络值。这是使用隔离网络时可用的默认网络数据文件。您可以从 |
使用 |
| Deploying an Overcloud with Containerized Red Hat Ceph 指南中的 Initiating Overcloud Deployment。 |
使用 |
| Deploying an Overcloud with Containerized Red Hat Ceph 指南中的 Initiating Overcloud Deployment。 |
使用原生 CephFS 后端部署 manila 服务。 |
|
以下示例显示了 openstack overcloud deploy 命令
,其中包含部署 Ceph 集群、Ceph MDS、原生 CephFS 后端和 Ceph 集群所需的网络的选项:
[stack@undercloud ~]$ openstack overcloud deploy \ ... -n /usr/share/openstack-tripleo-heat-templates/network_data.yaml \ -e /usr/share/openstack-tripleo-heat-templates/environments/network-isolation.yaml \ -e /home/stack/network-environment.yaml \ -e/usr/share/openstack-tripleo-heat-templates/environments/ceph-ansible/ceph-ansible.yaml \ -e /usr/share/openstack-tripleo-heat-templates/environments/ceph-ansible/ceph-mds.yaml \ -e /usr/share/openstack-tripleo-heat-templates/environments/manila-cephfsnative-config.yaml
有关 openstack overcloud deploy
命令的更多信息,请参阅 Director 安装和使用 指南中的 部署命令。
3.5.1. 环境文件
定义原生 CephFS 后端的集成式环境文件位于 undercloud 节点的以下路径中: /usr/share/openstack-tripleo-heat-templates/environments/manila-cephfsnative-config.yaml
。
manila-cephfsnative-config.yaml
环境文件包含与部署共享文件系统服务相关的设置。后端默认设置应该适用于大多数环境。
示例显示了 director 在部署共享文件系统服务过程中使用的默认值:
[stack@undercloud ~]$ cat /usr/share/openstack-tripleo-heat-templates/environments/manila-cephfsnative-config.yaml # A Heat environment file which can be used to enable a # a Manila CephFS Native driver backend. resource_registry: OS::TripleO::Services::ManilaApi: ../deployment/manila/manila-api-container-puppet.yaml OS::TripleO::Services::ManilaScheduler: ../deployment/manila/manila-scheduler-container-puppet.yaml # Only manila-share is pacemaker managed: OS::TripleO::Services::ManilaShare: ../deployment/manila/manila-share-pacemaker-puppet.yaml OS::TripleO::Services::ManilaBackendCephFs: ../deployment/manila/manila-backend-cephfs.yaml parameter_defaults: ManilaCephFSBackendName: cephfs 1 ManilaCephFSDriverHandlesShareServers: false 2 ManilaCephFSCephFSAuthId: 'manila' 3 ManilaCephFSCephFSEnableSnapshots: true 4 ManilaCephFSCephVolumeMode: '0755' 5 # manila cephfs driver supports either native cephfs backend - 'CEPHFS' # (users mount shares directly from ceph cluster), or nfs-ganesha backend - # 'NFS' (users mount shares through nfs-ganesha server) ManilaCephFSCephFSProtocolHelperType: 'CEPHFS' 6
parameter_defaults
标头表示配置的开头。具体来说,此标头中的设置可让您覆盖 resource_registry
中设置的默认值。这包括 OS::Tripleo::Services::Services::ManilaBackendCephFs
设置的值,它为 CephFS 后端设置默认值。
- 1
ManilaCephFSBackendName
设置 CephFS 后端的 manila 配置的名称。在这种情况下,默认后端名称为cephfs
。- 2
ManilaCephFSDriverHandlesShareServers
控制共享服务器的生命周期。当设置为false
时,驱动程序不会处理生命周期。这是 CephFS 后端唯一支持的选项。- 3
ManilaCephFSCephFSAuthId
定义 director 为 manila 服务访问 Ceph 集群而创建的 Ceph 身份验证 ID。- 4
ManilaCephFSEnableSnapshots
控制快照激活。Ceph Storage 4.1 及更新版本支持快照,但此参数的值默认为false
。您可以将值设为true
以确保驱动程序向 manila 调度程序报告snapshot_support
功能。- 5
ManilaCephFSCephVolumeMode
控制对在原生 CephFS 后端中创建的 manila 共享设置的 UNIX 权限。默认值为755
。- 6
ManilaCephFSCephFSProtocolHelperType
必须设置为CEPHFS
以使用原生 CephFS 驱动程序。
有关环境文件的更多信息,请参阅 Director 安装和使用指南中的环境文件。
第 4 章 完成部署后配置
在创建 NFS 共享、授予用户访问权限和挂载 NFS 共享之前,您必须完成两个部署后配置任务。
- 将 Networking 服务(neutron)存储网络映射到隔离的数据中心存储网络。
- 通过基于自定义角色的访问控制(RBAC),使存储提供商网络仅适用于可信租户。不要全局共享存储提供商网络。
- 创建私有共享类型。
- 授予特定可信租户的访问权限。
完成这些步骤后,租户计算实例可以创建、允许访问和挂载原生 CephFS 共享。
4.1. 创建存储提供商网络
您必须将新的隔离存储网络映射到 Networking(neutron)提供商网络。Compute 虚拟机附加到网络,以访问原生 CephFS 共享导出位置。
有关使用共享文件系统服务的网络安全性 ,请参阅安全和强化指南中的强化共享文件系统服务。
流程
openstack network create
命令定义存储 neutron 网络的配置。
在 undercloud 节点上输入以下命令:
[stack@undercloud ~]$ source ~/overcloudrc
在 undercloud 节点上,创建存储网络:
(overcloud) [stack@undercloud-0 ~]$ openstack network create Storage --provider-network-type vlan --provider-physical-network datacentre --provider-segment 30
您可以使用以下选项输入这个命令:
-
对于
--provider-physical-network
选项,使用默认值datacentre
,除非您通过 tripleo-heat-templates 中的 NeutronBridgeMappings 为 br-isolated 网桥设置了另一个标签。 -
对于
--provider-segment
选项,在网络环境文件中使用为存储隔离网络设置的值。如果没有自定义,默认的环境文件为/usr/share/openstack-tripleo-heat-templates/network_data.yaml
。除非修改了隔离网络定义,否则与存储网络值关联的 VLAN 为30
。 -
对于
--provider-network-type
选项,请使用值vlan
。
-
对于
4.2. 配置存储提供商网络
在 neutron 提供商网络上创建对应的 StorageSubnet
。确保子网与 undercloud 中的 storage_subnet
相同,并且存储子网的分配范围不会重叠。
要求
- 分配池的开头和结束 IP 范围
- 子网 IP 范围
流程
在 undercloud 节点上输入以下命令:
[stack@undercloud ~]$ source ~/overcloudrc
使用示例命令置备网络。更新这些值以适合您的环境。
(overcloud) [stack@undercloud-0 ~]$ openstack subnet create \ --allocation-pool start=172.17.3.10,end=172.17.3.149 \ --dhcp \ --network Storage \ --subnet-range 172.17.3.0/24 \ --gateway none StorageSubnet
-
对于
--allocation-pool
选项,将start=172.17.3.10,end=172.17.3.149
IP 值替换为您的网络的 IP 值。 -
对于
--subnet-range
选项,请将172.17.3.0/24
子网范围替换为您的网络的子网范围。
-
对于
4.3. 为存储供应商网络配置基于角色的访问控制
在识别可以使用存储网络的可信租户或项目后,通过网络服务(neutron)为它们配置基于角色的访问控制(RBAC)规则。
要求
需要访问存储网络的项目名称
流程
在 undercloud 节点上输入以下命令:
[stack@undercloud ~]$ source ~/overcloudrc
识别需要访问的项目:
(overcloud) [stack@undercloud-0 ~]$ openstack project list +----------------------------------+---------+ | ID | Name | +----------------------------------+---------+ | 06f1068f79d2400b88d1c2c33eacea87 | demo | | 5038dde12dfb44fdaa0b3ee4bfe487ce | service | | 820e2d9c956644c2b1530b514127fd0d | admin | +----------------------------------+---------+
使用所需项目创建网络 RBAC 规则:
(overcloud) [stack@undercloud-0 ~]$ openstack network rbac create \ --action access_as_shared Storage \ --type network \ --target-project demo
对需要访问存储网络的所有项目重复此步骤。
第 5 章 验证原生 CephFS 后端部署是否成功
将原生 CephFS 部署为共享文件系统服务(manila)的后端,将以下新元素添加到 overcloud 环境中:
- 存储提供商网络
- Controller 节点上的 Ceph MDS 服务
有关将共享文件系统服务与原生 CephFS 搭配使用的更多信息,请参阅存储指南中的共享文件系统服务。
云管理员必须先验证原生 CephFS 环境的稳定性,然后将其提供给服务用户。
前提条件
- 完成 中的步骤 第 3 章 原生 CephFS 部署
5.1. 验证隔离存储网络的创建
用于部署原生 CephFS 作为共享文件系统服务后端的 network_data.yaml
文件会创建存储 VLAN。使用此流程确认已成功创建了存储 VLAN。
流程
- 登录到 overcloud 中的一个 Controller 节点。
检查连接的网络,并验证
network_data.yaml
文件中的 VLAN 是否存在:$ ip a 8: vlan30: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue state UNKNOWN group default qlen 1000 link/ether 52:9c:82:7a:d4:75 brd ff:ff:ff:ff:ff:ff inet 172.17.3.144/24 brd 172.17.3.255 scope global vlan30 valid_lft forever preferred_lft forever inet6 fe80::509c:82ff:fe7a:d475/64 scope link valid_lft forever preferred_lft forever
5.2. 验证 Ceph MDS 服务
使用 systemctl status
命令验证 Ceph MDS 服务状态。
流程
在所有 Controller 节点上输入以下命令来检查 MDS 容器的状态:
$ systemctl status ceph-mds<@CONTROLLER-HOST>
例如:
$ systemctl status ceph-mds@controller-0.service ceph-mds@controller-0.service - Ceph MDS Loaded: loaded (/etc/systemd/system/ceph-mds@.service; enabled; vendor preset: disabled) Active: active (running) since Tue 2018-09-18 20:11:53 UTC; 6 days ago Main PID: 65066 (conmon) Tasks: 16 (limit: 204320) Memory: 38.2M CGroup: /system.slice/system-ceph\x2dmds.slice/ceph-mds@controller-0.service └─60921 /usr/bin/podman run --rm --net=host --memory=32000m --cpus=4 -v /var/lib/ceph:/var/lib/ceph:z -v /etc/ceph:/etc/ceph:z -v /var/run/ceph:/var/run/ceph:z -v /etc/localtime:/etc/localtime:ro>
5.3. 验证 Ceph 集群状态
完成以下步骤以验证 Ceph 集群状态。
流程
- 登录任何 Controller 节点。
在 Ceph 监控守护进程中输入以下命令:
$ sudo podman exec ceph-mon-controller-0 ceph -s cluster: id: 670dc288-cd36-4772-a4fc-47287f8e2ebf health: HEALTH_OK services: mon: 3 daemons, quorum controller-1,controller-2,controller-0 (age 14h) mgr: controller-1(active, since 8w), standbys: controller-0, controller-2 mds: cephfs:1 {0=controller-2=up:active} 2 up:standby osd: 15 osds: 15 up (since 8w), 15 in (since 8w) task status: scrub status: mds.controller-2: idle data: pools: 6 pools, 192 pgs objects: 309 objects, 1.6 GiB usage: 21 GiB used, 144 GiB / 165 GiB avail pgs: 192 active+clean
注意有一个活跃 MDS,备用上有两个 MDS。
要查看 Ceph 文件系统的详细状态,请输入以下命令:
$ sudo ceph fs ls name: cephfs metadata pool: manila_metadata, data pools: [manila_data]
注意在本示例输出中,cephfs 是 Ceph 文件系统的名称,director 会创建它来托管用户通过共享文件系统服务创建的 CephFS 共享。
5.5. 验证 manila-api 服务确认调度程序和共享服务
完成以下步骤以确认 manila-api
服务确认调度程序和共享服务。
流程
- 登录 undercloud。
使用以下命令:
$ source /home/stack/overcloudrc
输入以下命令确认启用了
manila-scheduler
和manila-share
:$ manila service-list | Id | Binary | Host | Zone | Status | State | Updated_at | | 2 | manila-scheduler | hostgroup | nova | enabled | up | 2018-08-08T04:15:03.000000 | | 5 | manila-share | hostgroup@cephfs | nova | enabled | up | 2018-08-08T04:15:03.000000 |