精读笔记(RHCA 英文教材)· CL260 Chapter 13 Managing Cloud Platforms with Red Hat Ceph Storage
精读笔记(RHCA 英文教材)· CL260 Chapter 13 Managing Cloud Platforms with Red Hat Ceph Storage
教材原文:RHCA 官方英文教材(PDF 第 473~510 页)(OCR 整书版已从本站移除,本页为章节精读) 关联知识:Ch4(池/EC/cephx)、Ch8/9(RGW/S3)、Ch10(CephFS);本章=把 Ceph 作为 OpenStack(RHOSP)与 OpenShift(RHOCP)的统一存储后端;四个 Section 均以 Quiz 收尾(无 Guided Exercise/Lab)。 参考教材版本:RHOSP 16.2 / RHOCP 4.8 + OpenShift Data Foundation(原 OpenShift Container Storage)。因内容偏架构叙述,精读侧重“组件↔Ceph 类型/pool 映射”与关键资源对象关系。
Chapter Goal / Objectives(原文+译)
- GOAL: Manage Red Hat cloud infrastructure to use Red Hat Ceph Storage to provide image, block, volume, object, and shared file storage(管理红帽云基础设施,用 RHCS 提供镜像/块/卷/对象/共享文件存储).
- OBJECTIVES: ① 描述 RHOSP 存储需求、比较 Ceph 作为其存储后端的架构选型;② 描述 OpenStack 各存储组件如何落地 Ceph;③ 描述 RHOCP 存储需求与架构选型;④ 描述 OpenShift 各存储特性如何落地 Ceph。
- 全章主线:“一个 Ceph,四类接口(RBD/RGW/CephFS)”分别喂给两个云平台——OpenStack 侧 Glance/Cinder/Nova/Swift/Manila;OpenShift 侧 PV/PVC/StorageClass/NooBaa。
13.1 Introducing OpenStack Storage Architecture
RHOSP 服务总览
- RHOSP 是一组交互服务控制计算/存储/网络;所有服务先经 Identity(Keystone) 认证。用户走 CLI 或图形 Dashboard;Orchestration(Heat) 负责编排安装。
- 相关存储服务:
- Compute(Nova):管理 hypervisor 上的 VM;提供系统盘/swap/临时盘;经 libvirtd+qemu+kvm 运行;依赖 Image 取镜像。
- Block Storage(Cinder):为实例提供临时与持久块卷,支持快照(备份与新建卷)。
- Image(Glance):镜像注册表,构建实例系统盘;运行中实例也可存为镜像。
- Shared File Systems(Manila):以服务方式提供文件共享(NFS/CIFS 协议),作为 broker 替无权限用户挂载。
- Object Storage(Swift):原生对象存储(可被 RGW 替换/对接)。
- Deployment(TripleO):用 Director(undercloud)安装/升级/运维 overcloud;Container Deployment(Kolla) 提供生产级容器镜像与配置管理;Bare Metal(Ironic) 准备/裸机部署节点。
Ceph 集成方案对比(考试核心)
- Dedicated(专用/内置,TripleO 默认):由 TripleO 在同一批 overcloud 节点上部署 Ceph(用 RHCS4 的 ceph-ansible playbook,经 Heat 模板驱动;不能用裸 Ansible 绕过 TripleO)。OSD 规模仅受硬件限制;可服务多个 OpenStack 环境与外部客户端;可做 hyperconverged(计算+存储同机)。
- External(外部):对接已存在的独立 Ceph 集群;通过自定义 environment/parameter 文件(如
ceph-ansible-external.yaml,放自定义目录,不要改 /usr/share/openstack-tripleo-heat-templates 原文件)指定CephClusterFSID、CephClientKey、CephExternalMonHost(MON 列表)与CinderEnableIscsiBackend:false;key 由ceph auth add client.openstack得到。 - RHOSP 16 默认角色(composable node roles):CephFile(OSD+MDS,横向扩展文件共享)、CephObject(OSD+RGW)、Controller(含 MGR/MDS/MON/RBD/RGW 等全部控制面)、ControllerStorageDashboard(+Grafana,加独立监控网)、ControllerStorageNFS(+Ganesha,CephFS→NFS)、ControllerNoCeph(控制面无 Ceph,服务迁到独立节点);文档级可选角色 CephMon/CephAll 等用于大集群减压。
- 前置要点:TripleO 用 Ironic 清盘(去分区表),否则 Ceph 拒写“in use”设备;部署前
openstack tripleo container image prepare预取容器,openstack overcloud deploy用 Kolla 按节点角色起容器。
13.1 Quiz(要点题)
默认对象存储=Swift(d);Ceph 集成设计两选=Dedicated 与 External;TripleO 建 Ceph 服务器最常用节点角色=CephStorage(a);Dedicated 集成优势=OSD 数仅受硬件限制、可支撑多个 OSP 环境(a/e)(External 的优势才是独立扩展、外部客户端、高级自定义)。
13.2 Implementing Storage in OpenStack Components
Ceph 能力对照(为何选 Ceph 当 OpenStack 后端)
兼容 Swift API、COW 精简供给(卷发放快)、支持 Keystone 认证(透明替换 Swift)、统一对象+块存储、提供 CephFS 接口。对比传统 NAS/SAN(要加物理网卡/主机适配器,控制面难扩展)与 NFS(冗余配置下有性能与扩展上限,非为云设计)。
服务→Ceph 后端/pool 映射表(重点记忆)
| OpenStack 服务 | Ceph 后端 | Pool/容器 | 关键点 |
|---|---|---|---|
| Glance(镜像) | RBD | images(glance_pool_name 可配) | 默认复制池(可 EC 省空间换 CPU);集成 Ceph 后必须禁用镜像缓存(/var/lib/glance/image-cache)——镜像交互都在 Ceph 内完成;只支持 RAW 格式(boot-from-volume 用 COW) |
| Cinder(块卷) | RBD | volumes、backups | libvirt→QEMU→librbd 挂载;卷跨多 OSD stripe 提高性能;快照/克隆=块设备 |
| Nova(临时盘/实例) | RBD | vms | 早期 VM 盘在 hypervisor /var/lib/nova/instances;RBD 后端后实例系统盘也在 Ceph,才能 live migration / evacuate |
| Swift(对象) | RGW | RGW 自动池 | TripleO 默认把 Glance 放 Swift(容器 glance);集成 Ceph 后对象服务走 RGW,并接入 Keystone 认证(用户授权即自动在 Ceph 侧建用户) |
| Manila(共享文件) | CephFS | CephFS(经 NFS/CIFS/Gluster 导出) | 支持多后端;share server 导出;管理属性/配额/限速;CephFS 后端需经 NFS-Ganesha 等桥接 |
- Ceph 认证用户示例:
ceph auth get-or-create client.glance mon "profile rbd" osd "profile rbd pool=images" mgr "profile rbd pool=images"(每个服务唯一用户+caps;p485)。 - DCN(Distributed Compute Node)场景:中心(hub)+远端(site)各一套 Ceph,全部服务都要统一配 RBD 后端。
13.2 Quiz(要点题)
集成 Ceph 唯一镜像格式=RAW(c);由 Ceph pool 支撑的四个=vms/volumes/backups/images(题干 pool 名视角);RBD 支撑的三个 OpenStack 服务=Images/Block Storage/Compute(b/d/f)(Manila 走 CephFS、Object 走 RGW);外部集群对接必需参数=FSID、MON 节点列表、client.openstack keyring(a/c/d)。
13.3 Introducing OpenShift Storage Architecture
RHOCP 与 Operator 机制
- RHOCP=Kubernetes 之上的模块化容器平台(多租户/监控/审计/生命周期/安全增强);本教材基于 RHOCP 4.8;节点职责由角色/Machine Config Pool(MCP)分组定义。
- Operator:把应用打包成“能部署+能运维”的控制器;**OLM(Operator Lifecycle Manager)**管理 operator 的部署/升级/删除;每个 operator 有 **CSV(Cluster Service Version)**声明 RBAC 与依赖;**CRD(Custom Resource Definition)**定义集群内新对象类型(仅管理员可建),由 **CR(Custom Resource)**实例化。
OpenShift Data Foundation(原 OpenShift Container Storage)
- 组件:ocs-operator 负责与 OpenShift 交互并协调 Operator 依赖关系;创建
StorageCluster与OCSInitialization两个 CRD;OCSInitialization只能创建/删除一次,每个 OCP 集群只支持一个 StorageCluster。 - Rook-Ceph operator:ocs-operator 的核心,负责 storage cluster 初始化 bootstrap、管理任务、在
openshift-storage命名空间创建 pod/依赖资源;隐藏 PG/CRUSH map 等高级细节(尽量免管理);监控 PG 并按池大小自动调整、监控 daemon、随集群伸缩向 OpenShift API 要资源;通过 CRD(CephCluster/CephObjectStore/CephFilesystem/CephBlockPool) 接收并应用配置变更;提供两个 CSI driver(RBD 与 CephFS)作为 OpenShift 消费存储的通道(operator 本身不建 PV,只跟踪 CSI 创建的 PV)。 - NooBaa operator(MCG,多云对象网关):提供 S3 兼容 API、混合/多云数据放置策略、跨云 active/active 读写;创建 Backing store、Namespace store、Bucket class、ObjectBucketClaim(OBC)、Prometheus rules、HPA;默认 backing store 随平台变(AWS→S3 bucket、Azure→blob container)。
- 安装模式:Internal(内置)——ODF 在同一批节点部署 Ceph(Local Storage operator 默认命名空间
openshift-local-storage扫描磁盘),优势=自动化部署/运维/监控、与 OCP Dashboard 集成、自动升级与生命周期、超融合;局限=只能服务本 OCP 集群。External(外部)——对接已有健康 Ceph(条件:OCP≥4.8、OpenShift Container Storage 4.8 已装、Ceph 4.2z1+(5 尚不支持)、Ceph Dashboard 已配、PG autoscaler 建议target_size_ratio=0.49、已有预配 RBD pool);优势=高级自定义、存储独立扩容、对象设备可跨集群隔离、少占 OCP 计算资源。
13.3 Quiz(要点题)
OCP 消费 Ceph 的接口=CSI drivers(a);Internal 模式三个优势=同基础设施/自动安装配置/无缝升级生命周期(b/d/e);Rook-Ceph 三职责=打包部署存储集群/监控守护健康/查找并应用配置变更(a/b/e);ocs-operator 提供的 CRD=StorageCluster 与 OCSInitialization(a/d)。
13.4 Implementing Storage in OpenShift Components
Kubernetes 存储对象关系
- StorageClass:声明存储类型与特性(QoS、provisioner 等),可动态供给 PV。
- PV(PersistentVolume):集群级存储元素(磁盘类型/性能/实现);管理员手动建或由 StorageClass 动态建;与 project 无关。
- PVC(PersistentVolumeClaim):用户在 project 内发出的存储请求(容量+访问模式);PV 与 PVC 匹配后 Bound;无匹配可无限期未绑定。
- 典型交互:Provisioning(动态供给)→ Binding(PVC 匹配 PV)→ Using(pod 的 volumes 里写 PVC,集群挂载其绑定 PV;不要直接引 PV)→ Releasing(删 PVC,按 reclaim policy Delete/Retain)。
- Red Hat 建议把默认 StorageClass 换成
ocs-storagecluster-ceph-rbd:oc patch storageclass ocs-storagecluster-ceph-rbd -p '{"metadata":{"annotations":{"storageclass.kubernetes.io/is-default-class":"true"}}}'。
PV 访问模式(一次只能一种)
| 短名 | 模式 | 描述 |
|---|---|---|
| RWO | ReadWriteOnce | 单节点可读写挂载(RBD 典型) |
| ROX | ReadOnlyMany | 多节点只读挂载 |
| RWX | ReadWriteMany | 多节点读写挂载(CephFS 典型,多 pod 并发) |
- 匹配规则:PVC 请求模式与 PV 尽量精确匹配;PV 可“更宽”(能提供至少请求的容量与模式,只会多不会少);注意访问模式只是卷能力描述,集群不强制 PVC 请求方按声明使用。
OpenShift 落地实例(教材 lab 流程,值得照做)
- RBD 块卷:
oc get storageclass看ocs-storagecluster-ceph-rbd(provisioneropenshift-storage.rbd.csi.ceph.com,AllowVolumeExpansion=true)→ 建 RWO PVC(5Gi)→oc describe pvc到 Bound → 查 PV 的VolumeHandle,oc rsh进 Rook-Ceph Toolbox 后rbd ls ocs-storagecluster-cephblockpool(设备名=VolumeHandle 后半段csi-vol-…)→ 可扩容。 - CephFS 共享卷:建 RWX PVC(10Gi)→
oc create deployment hello-node→oc scale deployment hello-node --replicas 3→oc set volume deployment/hello-node --add --mount-path=/cl260-data1 --name=<pv>→ 三个 pod 同时读写同一卷(验证 RWX)。 - NooBaa 对象:
noobaa backingstore status noobaa-default-backing-store(看 Endpoint 指向 RGW svc、Access/Secret key)→noobaa obc create cl260-obc-01→ Phase=Bound 后得到BUCKET_HOST/BUCKET_NAME/AWS_ACCESS_KEY_ID→oc get obc cl260-obc-01 -o yaml;进 toolboxradosgw-admin bucket list / bucket stats核对桶。
- Rook-Ceph Toolbox:
oc patch ocsinitialization ocsinit -n openshift-storage -p '{"spec":{"enableCephTools":true}}'→oc get pods -n openshift-storage -l app=rook-ceph-tools→oc rsh -n openshift-storage $TOOLS_POD里跑ceph status / ceph osd lspools(可见 ocs-storagecluster-cephblockpool、cephfilesystem-metadata/data0、cephobjectstore.rgw.* 等池)。
13.4 Quiz(要点题)
PV 与 PVC 关系=PVC 请求卷、PV 绑到该 claim(c);NooBaa 交互资源=ObjectBucketClaim(d);需要 RWX 的场景=多 pod 都要读写(a);声明后端特性(QoS/provisioner)的资源=StorageClass(b)。
章节收尾(Summary 提炼)
- 一个 Ceph 后端可同时喂 OpenStack 的镜像/块/对象/文件四类服务:Glance+Cinder 用 RBD;Swift 由 RGW 替换并接 Keystone;Manila 用 CephFS。
- OpenShift 侧由 OpenShift Data Foundation(ocs-operator+Rook-Ceph+NooBaa)落地:Rook-Ceph 安装/监控/管理 Ceph 并提供 CSI driver;PVC 是存储请求,内含 StorageClass;访问模式描述 PV 的挂载能力。
命令速查表
| 用途 | 命令 |
|---|---|
| 给 OpenStack 服务建 Ceph 用户 | ceph auth get-or-create client.glance mon "profile rbd" osd "profile rbd pool=images" mgr "profile rbd pool=images" |
| 外部集群 key 注入 | ceph auth add client.openstack(结果写入 TripleO 参数 CephClientKey) |
| 外部对接参数 | CephClusterFSID / CephExternalMonHost:IP1,IP2,IP3 / CinderEnableIscsiBackend:false |
| 预取 overcloud 容器 | openstack tripleo container image prepare |
| 部署 overcloud | openstack overcloud deploy(引用环境文件列表) |
| 设默认 StorageClass | oc patch storageclass ocs-storagecluster-ceph-rbd -p '{"metadata":{"annotations":{"storageclass.kubernetes.io/is-default-class":"true"}}}' |
| 查 PV/PVC | oc describe pvc/<pvc>、oc describe pv/<pv>(看 VolumeHandle) |
| 开启 toolbox | oc patch ocsinitialization ocsinit -n openshift-storage -p '{"spec":{"enableCephTools":true}}' |
| 进 toolbox | oc rsh -n openshift-storage $(oc get pods -n openshift-storage -l app=rook-ceph-tools -o name) |
| toolbox 内看池/设备 | ceph osd lspools、rbd ls ocs-storagecluster-cephblockpool、radosgw-admin bucket list|stats |
| 部署并扩到 3 副本 | kubectl create deployment hello-node --image=k8s.gcr.io/serve_hostname;oc scale deployment hello-node --replicas 3 |
| 挂卷到 deployment | oc set volume deployment/hello-node --add --mount-path=<路径> --name=<pv名> |
| NooBaa 对象桶 | noobaa obc create <name>、oc get obc <name> -o yaml、noobaa backingstore status <bs> |
词汇表
| 英文 | 中文 | 速记 |
|---|---|---|
| RHOSP / TripleO / Heat | OpenStack 平台/部署编排/热编排 | undercloud(Director)→overcloud;HOT 模板定义服务 |
| Kolla | 容器化部署服务 | 生产级 OpenStack 容器镜像 |
| Ironic | 裸机服务 | 清盘+装机(Ceph 前必清分区表) |
| Glance / Cinder / Nova / Swift / Manila | 镜像/块卷/计算/对象/共享文件 | 各服务的 Ceph 后端=images/volumes(+backups)/vms/RGW/CephFS |
| image cache | Glance 镜像缓存 | 接 Ceph 后须禁用 |
| boot-from-volume | 卷启动 | 实例系统盘放 RBD 才能 live-migrate/evacuate |
| OLM / CSV / CRD / CR | Operator 生命周期/集群服务版本/自定义资源定义/自定义资源 | Operator 管理框架三件套 |
| OpenShift Data Foundation(ODF) | 数据基础架构(原 OCS) | ocs-operator+Rook-Ceph+NooBaa |
| Rook-Ceph | 云原生存储编排器 | 内置 Ceph;两个 CSI driver(RBD/CephFS) |
| CSI driver | 容器存储接口驱动 | OpenShift 消费 Ceph 的通道 |
| NooBaa / MCG | 多云对象网关 | S3 兼容;Backing store/OBC/Bucket class |
| StorageClass / PV / PVC | 存储类/持久卷/持久卷声明 | 动态供给→绑定→使用→释放 |
| RWO / ROX / RWX | 单节点读写/多节点只读/多节点读写 | RBD≈RWO,CephFS≈RWX |
| OBC(ObjectBucketClaim) | 对象桶声明 | NooBaa 供对象桶的“PVC 等价物” |
| VolumeHandle | 卷句柄 | PV 描述里与 rbd 设备名对应的标识 |
自测 10 题
- RHOSP 各存储服务对 Ceph 的映射:Glance/Cinder/Nova/Swift/Manila?(RBD-images / RBD-volumes,backups / RBD-vms / RGW / CephFS)
- 集成 Ceph 后 Glance 为何要禁镜像缓存?(镜像交互全在 Ceph 内完成,缓存是多余 CPU/网络开销)
- 集成 Ceph 的 OpenStack 只支持哪种镜像格式?(RAW)
- Nova 把实例盘放 RBD 的收益?(live migration / evacuate)
- Rook-Ceph 提供哪两个 CSI driver?为什么重要?(RBD、CephFS;OpenShift 消费存储的通道)
- Internal vs External 安装模式的核心区别?(内置=自动部署/升级但只能服务本集群;外部=对接既有集群、存储独立扩缩)
- 外部模式对接条件至少列 4 条?(OCP≥4.8、OCS4.8 已装、Ceph 4.2z1+、Dashboard 已配、PG autoscaler target_size_ratio≈0.49、有预配 RBD 池)
- RWX 访问模式适用场景?(多 pod 并发读写,如 CephFS 卷)
- PVC 状态 Bound 前的对象关系?(PVC 请求 → StorageClass 动态供给/匹配现存 PV → 绑定)
- NooBaa 创建什么资源让应用拿 S3 桶?(ObjectBucketClaim)
