4. Rook Ceph 快速部署:使用 Helm Chart 部署 Rook Operator、创建 CephCluster CR、验证集群健康状态
本章聚焦于生产级 Rook Ceph 集群的快速部署流程。我们将采用 Helm Chart 作为包管理工具,依次完成 Rook Operator 的安装、CephCluster 自定义资源(CR)的创建,以及集群健康状态的验证。该流程是后续所有存储变更门禁与参数调优的基础。
4.1 部署架构概览
Rook Ceph 的部署遵循“Operator 模式”。首先部署 Rook Operator(控制器),它负责监听和管理 CephCluster CR。当用户创建 CephCluster CR 后,Operator 会自动编排 Ceph 守护进程(MON、OSD、MGR、MDS 等)的 Pod、Service 和 ConfigMap。
4.2 前提条件与环境准备
在开始部署前,请确保 Kubernetes 集群满足以下最低要求:
| 资源/组件 | 最低要求 | 推荐配置 |
|---|---|---|
| Kubernetes 版本 | v1.21+ | v1.27+ |
| 节点数量 | 3 个 Worker 节点 | 5 个以上 Worker 节点 |
| 每节点 CPU | 4 核 | 8 核以上 |
| 每节点内存 | 8 GB | 16 GB 以上 |
| 每节点原始磁盘 | 1 块未格式化磁盘 | 2 块以上 NVMe/SSD |
| Helm 版本 | v3.8+ | v3.12+ |
关键检查项:确保用于 OSD 的磁盘是裸设备(无分区表、无文件系统)。可以使用
lsblk 和 blkid 命令验证。如果磁盘已被挂载或包含文件系统,Rook 将无法接管。
4.3 使用 Helm Chart 部署 Rook Operator
Rook 官方维护的 Helm Chart 位于 rook-release 仓库。以下是标准部署步骤:
- 添加 Helm 仓库并更新索引
helm repo add rook-release https://charts.rook.io/release
helm repo update
- 创建命名空间并部署 Rook Operator
kubectl create namespace rook-ceph
helm install --namespace rook-ceph rook-ceph rook-release/rook-ceph \
--set image.repository=quay.io/rook/ceph \
--set image.tag=v1.14.0 \
--set csi.enableRbdDriver=true \
--set csi.enableCephfsDriver=true
参数说明:
image.tag:指定 Rook Operator 版本,建议使用最新的稳定版。csi.enableRbdDriver/csi.enableCephfsDriver:启用 CSI 驱动,使 Kubernetes 能够通过 PVC 动态挂载 RBD 块存储和 CephFS 文件存储。
- 验证 Operator 部署状态
kubectl -n rook-ceph get pod -l app=rook-ceph-operator
# 预期输出:rook-ceph-operator-xxxxx 1/1 Running
4.4 创建 CephCluster 自定义资源
Operator 就绪后,需要创建 CephCluster CR 来定义集群的拓扑、存储配置和守护进程参数。以下是一个面向生产环境的 CR 示例:
cat <<EOF | kubectl apply -f -
apiVersion: ceph.rook.io/v1
kind: CephCluster
metadata:
name: rook-ceph
namespace: rook-ceph
spec:
cephVersion:
image: quay.io/ceph/ceph:v18.2.0
dataDirHostPath: /var/lib/rook
mon:
count: 3
allowMultiplePerNode: false
mgr:
count: 2
dashboard:
enabled: true
ssl: true
storage:
useAllNodes: true
useAllDevices: false
config:
databaseSizeMB: "1024"
walSizeMB: "512"
nodes:
- name: "node-1"
devices:
- name: "sdb"
- name: "sdc"
- name: "node-2"
devices:
- name: "sdb"
- name: "sdc"
- name: "node-3"
devices:
- name: "sdb"
- name: "sdc"
EOF
| CR 字段 | 说明 | 生产建议 |
|---|---|---|
cephVersion.image |
Ceph 容器镜像版本 | 使用官方稳定版,如 v18.2.0 (Reef) |
mon.count |
MON 守护进程数量 | 奇数,至少 3 个;5 个以上用于大型集群 |
mgr.count |
MGR 守护进程数量 | 2 个实现高可用 |
storage.useAllDevices |
是否使用所有可用裸设备 | 生产环境建议设为 false,手动指定磁盘 |
databaseSizeMB |
BlueStore 的 RocksDB 数据库大小 | 建议为数据容量的 1%~4% |
walSizeMB |
BlueStore 的 WAL 大小 | 建议为数据库大小的 50%~100% |
重要:如果集群节点使用不同的磁盘类型(如 NVMe + HDD),建议通过
storage.nodes 按节点精细配置,避免性能差异导致 OSD 负载不均。切勿在生产环境中使用 useAllDevices: true,除非你确认所有节点磁盘均为同类型且无系统盘风险。
4.5 验证集群健康状态
创建 CephCluster CR 后,Operator 会自动编排所有组件。验证流程分为以下步骤:
4.5.1 检查 Pod 状态
kubectl -n rook-ceph get pod
# 预期输出包含以下 Running 状态的 Pod:
# rook-ceph-mon-a, rook-ceph-mon-b, rook-ceph-mon-c
# rook-ceph-mgr-a, rook-ceph-mgr-b
# rook-ceph-osd-0, rook-ceph-osd-1, rook-ceph-osd-2 ...
4.5.2 使用工具箱执行 Ceph 命令
Rook 提供了工具箱 Pod,用于执行原生 Ceph 命令:
kubectl -n rook-ceph apply -f https://raw.githubusercontent.com/rook/rook/master/deploy/examples/toolbox.yaml
# 等待工具箱 Pod 就绪后,进入容器
kubectl -n rook-ceph exec -it deploy/rook-ceph-tools -- bash
# 在工具箱内执行健康检查
ceph status
ceph osd status
ceph df
ceph health detail
4.5.3 解读健康状态输出
| 指标 | 健康值 | 异常值及处理 |
|---|---|---|
health |
HEALTH_OK |
HEALTH_WARN 或 HEALTH_ERR:检查 OSD 是否 down、PG 是否 inactive |
mon |
3 mons: {a,b,c},均为 election epoch 正常 |
MON 数量不足或时钟偏移:检查网络和 NTP |
osd |
6 osds: 6 up, 6 in |
OSD down:检查磁盘、网络、节点状态 |
pgs |
128 pgs: 128 active+clean |
PG 状态包含 peering、degraded、stuck:等待恢复或调整 PG 数量 |
usage |
USED 与 AVAIL 比例正常 |
接近满容量(>85%):增加 OSD 或清理数据 |
4.5.4 访问 Ceph Dashboard
Rook 默认部署了 Ceph Dashboard,可通过以下方式暴露:
# 修改 Service 类型为 NodePort 或 LoadBalancer
kubectl -n rook-ceph patch service rook-ceph-mgr-dashboard -p '{"spec":{"type":"NodePort"}}'
# 获取 NodePort 端口
kubectl -n rook-ceph get service rook-ceph-mgr-dashboard
# 输出示例:rook-ceph-mgr-dashboard NodePort 10.43.xxx.xxx <none> 8443:31672/TCP
# 获取默认登录密码
kubectl -n rook-ceph get secret rook-ceph-dashboard-password -o jsonpath="{['data']['password']}" | base64 --decode
浏览器访问 https://<任意节点IP>:31672,使用用户名 admin 和上述密码登录。Dashboard 提供集群拓扑、性能图表、OSD 状态和告警管理功能。
快速健康检查命令:在工具箱外,也可以直接使用
kubectl -n rook-ceph exec deploy/rook-ceph-tools -- ceph -s 获取集群状态摘要,无需进入容器。
4.6 部署后验证清单
完成部署后,建议逐项确认以下清单,确保集群处于可投入生产的状态:
- Operator 状态:
rook-ceph-operatorPod 处于Running状态,日志无持续报错。 - MON 仲裁:3 个 MON 形成仲裁,
ceph mon stat显示quorum正常。 - OSD 状态:所有 OSD 均为
up且in,无down或out状态。 - PG 状态:所有 PG 均为
active+clean,无stuck或incomplete。 - MGR 高可用:2 个 MGR 均处于活跃或备用状态。
- Dashboard 可访问:能够通过浏览器登录并查看集群指标。
- CSI 驱动:
csi-rbdplugin和csi-cephfspluginPod 正常运行。
自动化集成提示:在 CI/CD 流水线中,可以将上述验证步骤封装为 Shell 脚本或 Ansible Playbook。例如,使用
kubectl wait --for=condition=Ready pod -l app=rook-ceph-operator -n rook-ceph --timeout=300s 等待 Operator 就绪,再通过 ceph -s | grep HEALTH_OK 断言集群健康。