3. Rook Ceph 集群部署:在 Kubernetes 上部署生产级 Ceph 集群的步骤与配置
在生产环境中使用 Rook 部署 Ceph 集群,需要遵循严格的版本兼容性、资源规划与配置步骤。本章将拆解从 Operator 部署到存储集群就绪的完整流程,并给出生产级参数配置建议。
3.1 部署前环境检查与版本兼容性
在开始部署前,必须确认 Kubernetes 集群版本、Rook Operator 版本与 Ceph 版本之间的兼容关系。下表列出了当前主流的生产级组合:
| 组件 | 推荐版本 | 最低要求 | 备注 |
|---|---|---|---|
| Kubernetes | v1.27+ | v1.21 | 需启用 RBD、CSI 相关特性门控 |
| Rook Operator | v1.14.x | v1.10.x | 建议使用最新稳定版 |
| Ceph | Quincy (v17) / Reef (v18) | Pacific (v16) | Reef 支持更多新特性 |
| OS 内核 | 5.15+ | 5.4 | 内核需支持 rbd 模块 |
版本对齐建议: 不要混用大版本。例如 Rook v1.14 搭配 Ceph Reef v18 是经过社区广泛验证的组合。升级时遵循 Operator → Ceph Daemon → CRD 的顺序。
3.2 部署 Rook Operator
Rook Operator 是整个集群的控制平面组件,负责管理 Ceph 守护进程的生命周期。部署步骤如下:
- 克隆官方部署清单(或使用 Helm Chart):
git clone --single-branch --branch v1.14.0 https://github.com/rook/rook.git
cd rook/deploy/examples
- 应用 CRD 与 Operator 资源:
kubectl create -f crds.yaml
kubectl create -f common.yaml
kubectl create -f operator.yaml
- 验证 Operator 运行状态:
kubectl -n rook-ceph get pod -l app=rook-ceph-operator
# 预期输出:rook-ceph-operator-xxxxx 1/1 Running
生产级 Operator 配置调整: 在
operator.yaml 中修改以下环境变量:ROOK_CSI_ENABLE_CEPHFS: "true"ROOK_CSI_ENABLE_RBD: "true"ROOK_CSI_ALLOW_UNSUPPORTED_VERSION: "false"ROOK_LOG_LEVEL: "INFO"
3.3 创建 CephCluster CR:生产级配置
CephCluster 自定义资源定义了集群的拓扑、存储、网络与监控配置。以下是一个面向生产环境的配置模板(关键部分):
apiVersion: ceph.rook.io/v1
kind: CephCluster
metadata:
name: rook-ceph
namespace: rook-ceph
spec:
cephVersion:
image: quay.io/ceph/ceph:v18.2.0
allowUnsupported: false
dataDirHostPath: /var/lib/rook
mon:
count: 3
allowMultiplePerNode: false
mgr:
count: 2
modules:
- name: pg_autoscaler
enabled: true
dashboard:
enabled: true
ssl: true
network:
provider: host
selectors:
public: "public"
cluster: "cluster"
storage:
useAllNodes: false
useAllDevices: false
config:
databaseSizeMB: "10240"
journalSizeMB: "5120"
nodes:
- name: "node-01"
devices:
- name: "sdb"
- name: "sdc"
- name: "node-02"
devices:
- name: "sdb"
- name: "sdc"
- name: "node-03"
devices:
- name: "sdb"
- name: "sdc"
healthCheck:
daemonHealth:
mon:
interval: 45s
timeout: 600s
关键避坑点:
-
-
-
-
useAllDevices: true 会格式化所有未挂载磁盘,生产环境必须显式指定设备。-
mon.allowMultiplePerNode: false 避免单节点故障影响多数 MON。-
databaseSizeMB 和 journalSizeMB 应根据 OSD 容量按比例设置(通常为 OSD 容量的 1%~4%)。
3.4 集群部署流程与状态验证
应用 CephCluster CR 后,Rook Operator 会按以下顺序启动守护进程:
- 启动 MON 仲裁(3 个 MON 形成 quorum)
- 启动 MGR 主备对
- 基于节点设备自动发现并准备 OSD
- 启动 MDS(如果启用了 CephFS)
- 启动 RGW(如果启用了对象存储)
验证集群健康状态的命令:
# 查看所有 Pod 状态
kubectl -n rook-ceph get pod
# 进入工具箱 Pod 执行 Ceph 命令
kubectl -n rook-ceph exec -it deploy/rook-ceph-tools -- bash
ceph status
ceph osd tree
ceph df
预期输出中 ceph status 应显示 health: HEALTH_OK,且所有 OSD 处于 up 和 in 状态。
3.5 部署架构与组件交互关系
下图展示了 Rook 部署的 Ceph 集群在 Kubernetes 中的组件拓扑与交互关系:
3.6 存储类与 PVC 验证
集群就绪后,需要创建 StorageClass 并验证动态卷供应是否正常:
# 创建 RBD 存储类
kubectl create -f storageclass-rbd.yaml
# 创建测试 PVC
cat <<EOF | kubectl apply -f -
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
name: test-pvc
spec:
storageClassName: rook-ceph-block
accessModes:
- ReadWriteOnce
resources:
requests:
storage: 1Gi
EOF
# 验证 PVC 状态
kubectl get pvc test-pvc
# 预期输出:Bound
生产级存储类参数建议:
-
-
- 启用
- 设置
-
replicated.size: 3 保证三副本冗余-
csi.storage.k8s.io/fstype: ext4 或 xfs- 启用
encrypted: "true" 开启 OSD 级加密- 设置
mountOptions: ["discard"] 启用 TRIM 回收
3.7 部署后关键检查清单
| 检查项 | 命令/方法 | 预期结果 |
|---|---|---|
| 集群健康 | ceph status | HEALTH_OK |
| MON 仲裁 | ceph mon stat | 3 个 MON,quorum 正常 |
| OSD 状态 | ceph osd tree | 所有 OSD up/in |
| PG 分布 | ceph pg stat | active+clean,无 stale |
| Dashboard 可达 | kubectl -n rook-ceph get svc rook-ceph-mgr-dashboard | External IP 或 NodePort 可访问 |
| CSI 驱动 | kubectl -n rook-ceph get pod -l app=csi-rbdplugin | DaemonSet 全部 Running |
3.8 常见部署问题与快速修复
- MON 无法形成 quorum: 检查节点间网络延迟与防火墙规则,确保 6789、3300 端口互通。使用
ceph mon dump查看 MON 映射。 - OSD 一直处于 down 状态: 检查磁盘是否被其他进程占用(如
lvm、parted),使用ceph-volume lvm list排查。 - PVC 一直 Pending: 确认 StorageClass 名称正确,检查
kubectl describe pvc中的事件信息,常见原因为存储类未关联或 OSD 空间不足。 - Dashboard 证书错误: 使用自签名证书时,需在浏览器中信任 CA 或配置
ssl: false(仅测试环境)。
生产部署黄金法则:
1. 始终使用
2. 为 MON 和 MGR 设置
3. 启用
4. 部署前使用
1. 始终使用
useAllDevices: false 显式指定 OSD 设备。2. 为 MON 和 MGR 设置
resources 请求与限制,避免被其他 Pod 抢占。3. 启用
pg_autoscaler 模块,让 Ceph 自动管理 PG 数量。4. 部署前使用
ceph-volume inventory 扫描所有节点磁盘,确认设备路径正确。