Rook Ceph 裸金属持久存储 Hands-on

验证:未记录
适用版本
未记录
验证范围
尚未登记验证记录。
本文缩写(英文全称与中文含义)
缩写 英文全称/名称 中文含义
CSI Container Storage Interface 容器存储接口
GitOps GitOps 以 Git 保存期望状态、由自动化持续协调实际状态的运维方式
MON Monitor Ceph 监视器组件
OSD Object Storage Daemon Ceph 对象存储守护进程
PG Placement Group Ceph 归置组
PVC Persistent Volume Claim 持久卷申领
RBD RADOS Block Device Ceph 块设备;RADOS 为 Reliable Autonomic Distributed Object Store(可靠自主分布式对象存储)
RWO ReadWriteOnce 卷访问模式:由一个节点以读写方式挂载
RWX ReadWriteMany 卷访问模式:由多个节点以读写方式挂载

范围:三台以上独立存储节点、未使用的专用裸盘、有备份的隔离预生产集群。本文部署三副本 RBD,验证实际业务文件持久性;不是把本地目录包装成高可用存储。Ceph 节点/磁盘损坏后的重建需要额外容量和带宽。

1. 盘点与锁定磁盘#

每个存储节点由管理员执行:

lsblk -o NAME,SIZE,TYPE,FSTYPE,MOUNTPOINTS,SERIAL
sudo blkid

核对盘序列号与资产单;系统盘、有文件系统/分区/挂载的数据盘禁止加入。按 Rook 版本前置要求安装 lvm2、内核模块/工具;生产选择固定 Rook/Ceph 兼容版本,规划副本、故障域、时钟、网络、内存和至少足够重建一故障域的余量。本篇不执行 wipefs/sgdisk,盘不空应停下处理资产。

2. 安装 Operator#

export ROOK_VERSION='v1.20.7'
git clone --depth 1 --branch "$ROOK_VERSION" https://github.com/rook/rook.git rook-source
cd rook-source/deploy/examples
# 审阅该 tag 的镜像、CRD、RBAC、CSI 权限与 node placement。
kubectl create -f crds.yaml -f common.yaml -f csi-operator.yaml
kubectl wait --for=condition=Established crd/operatorconfigs.csi.ceph.io --timeout=2m
kubectl create -f operator.yaml
kubectl -n rook-ceph rollout status deployment/rook-ceph-operator --timeout=5m
kubectl -n rook-ceph rollout status deployment/ceph-csi-controller-manager --timeout=5m

这里明确使用 Rook v1.20.7 的安装结构,包含独立 Ceph-CSI Operator;更换版本时按该 tag 的说明调整文件与兼容矩阵,不能只改版本号。生产将已审核清单纳入 GitOps;若已有 Rook,不执行上述 create 叠加安装。补齐资源/调度与特权 namespace 例外,并确认两个 Operator 都就绪,之后检查 RBD CSIDriver 和节点插件;只有 Rook Operator 成功不能证明 PVC 可用。

3. 创建显式磁盘集群#

保存 ceph-cluster.yaml;以下 disk 名逐台换为已确认空盘,Ceph image 固定为所选 Rook 支持的 digest:

apiVersion: ceph.rook.io/v1
kind: CephCluster
metadata: {name: rook-ceph, namespace: rook-ceph}
spec:
  cephVersion:
    image: REPLACE_SUPPORTED_CEPH_IMAGE_AT_DIGEST
  dataDirHostPath: /var/lib/rook
  mon: {count: 3, allowMultiplePerNode: false}
  mgr: {count: 2, allowMultiplePerNode: false}
  dashboard: {enabled: false}
  storage:
    useAllNodes: false
    useAllDevices: false
    nodes:
      - name: storage-1
        devices: [{name: REPLACE_EMPTY_DISK_1}]
      - name: storage-2
        devices: [{name: REPLACE_EMPTY_DISK_2}]
      - name: storage-3
        devices: [{name: REPLACE_EMPTY_DISK_3}]
  resources:
    mon:
      requests: {cpu: '1', memory: 2Gi}
      limits: {memory: 2Gi}
    mgr:
      requests: {cpu: 500m, memory: 1Gi}
      limits: {memory: 2Gi}
    osd:
      requests: {cpu: '1', memory: 4Gi}
      limits: {memory: 4Gi}
  disruptionManagement:
    managePodBudgets: true
    osdMaintenanceTimeout: 30
kubectl apply --dry-run=server -f ceph-cluster.yaml
kubectl apply -f ceph-cluster.yaml
kubectl -n rook-ceph get cephcluster,pods -w

apply 会让 Ceph 接管指定盘,必须先完成第一步。验收 Ceph HEALTH_OK、三个 MON quorum、OSD up/in,不能仅看 Kubernetes Pod Running。使用该 tag 的 toolbox 清单,先确认镜像与集群 Ceph 版本一致,再运行 ceph status、ceph osd tree、ceph df。

4. 创建业务存储类#

保存 rbd-storage.yaml:

apiVersion: ceph.rook.io/v1
kind: CephBlockPool
metadata: {name: orders-rbd, namespace: rook-ceph}
spec:
  failureDomain: host
  replicated: {size: 3, requireSafeReplicaSize: true}
---
apiVersion: storage.k8s.io/v1
kind: StorageClass
metadata: {name: orders-rbd}
provisioner: rook-ceph.rbd.csi.ceph.com
parameters:
  clusterID: rook-ceph
  pool: orders-rbd
  imageFormat: '2'
  imageFeatures: layering
  csi.storage.k8s.io/provisioner-secret-name: rook-csi-rbd-provisioner
  csi.storage.k8s.io/provisioner-secret-namespace: rook-ceph
  csi.storage.k8s.io/controller-expand-secret-name: rook-csi-rbd-provisioner
  csi.storage.k8s.io/controller-expand-secret-namespace: rook-ceph
  csi.storage.k8s.io/node-stage-secret-name: rook-csi-rbd-node
  csi.storage.k8s.io/node-stage-secret-namespace: rook-ceph
  csi.storage.k8s.io/fstype: ext4
reclaimPolicy: Retain
allowVolumeExpansion: true
volumeBindingMode: WaitForFirstConsumer
kubectl apply -f rbd-storage.yaml
kubectl get storageclass orders-rbd

按 CSI 实验创建 PVC 并挂载到真实业务,或将 RabbitMQ storageClassName 设置为 orders-rbd;云盘专用参数不要复制进此类。RBD 通常用于 RWO;需要 RWX 时另建 CephFS,不把 RWO 当多节点共享盘。

5. 故障与数据验收#

记录业务文件校验和/消息确认水位→停一台存储节点→确认业务可读写、Ceph 降级有告警→恢复该节点→等 PG clean/副本恢复→再做下一项。三节点三副本失去一节点后可能没有第四个故障域用于完整重建,生产容量规划必须明确这个边界。

空间接近满、MON 无 quorum、重建未完成时停止节点维护。备份放在独立故障域,快照不是异地备份;按 Velero验证恢复。失败不降低 pool size 到 1、不清空 dataDirHostPath、不卸载 Operator 来“重试”。退役单独走官方卸载/数据销毁流程。

参考:前置、部署、RBD。

搜索文档

输入关键词,搜索所有文档。

↑ ↓ 选择 · Enter 打开 · Esc 关闭