rook ceph部署手册(helm版本)
使用 Helm 部署 Rook Ceph 的完整指南
1. 概述
Rook 是一个开源的云原生存储编排工具,通过 Kubernetes 原生方式简化 Ceph 存储集群的部署和管理。本指南将介绍如何使用 Helm 在 Kubernetes 集群中部署 Rook Ceph。
2. 先决条件
- Kubernetes 集群 (v1.19+ 推荐)
- Helm 3.x 已安装
- 每个节点至少:
- 1 个未格式化的裸磁盘或分区 (建议 SSD)
- 4GB+ RAM
- 2 CPU 核心+
kubectl
已配置访问集群权限
📝 注意:生产环境建议使用专用存储节点
3. 添加 Rook Helm 仓库
helm repo add rook-release https://charts.rook.io/release
helm repo update
4. 安装 Rook Ceph Operator
4.1 准备Operator配置文件
创建 rook-ceph-values.yaml
文件,内容如下:
# CSI 插件配置(国内镜像源优化)
csi:
cephcsi:
# -- Ceph CSI image repository
repository: quay.io/cephcsi/cephcsi
# -- Ceph CSI image tag
tag: v3.14.1
registrar:
# -- Kubernetes CSI registrar image repository
repository: registry.aliyuncs.com/google_containers/csi-node-driver-registrar
# -- Registrar image tag
tag: v2.13.0
provisioner:
# -- Kubernetes CSI provisioner image repository
repository: registry.aliyuncs.com/google_containers/csi-provisioner
# -- Provisioner image tag
tag: v5.2.0
snapshotter:
# -- Kubernetes CSI snapshotter image repository
repository: registry.aliyuncs.com/google_containers/csi-snapshotter
# -- Snapshotter image tag
tag: v8.2.1
attacher:
# -- Kubernetes CSI Attacher image repository
repository: registry.aliyuncs.com/google_containers/csi-attacher
# -- Attacher image tag
tag: v4.8.1
resizer:
# -- Kubernetes CSI resizer image repository
repository: registry.aliyuncs.com/google_containers/csi-resizer
# -- Resizer image tag
tag: v1.13.2
# 资源限制配置(生产环境建议调整)
resources:
limits:
memory: 512Mi
requests:
cpu: 200m
memory: 128Mi
4.2 安装 Operator
helm upgrade --install rook-ceph rook-release/rook-ceph \
-n rook-ceph \
--create-namespace \
--version v1.17.6 \
-f rook-ceph-values.yaml
4.3 验证 Operator 状态
kubectl get pods -n rook-ceph -l app=rook-ceph-operator
5 部署Ceph 集群
5.1 准备集群配置
创建 rook-ceph-cluster-values.yaml
文件:
# Rook Ceph 集群核心配置 (Cluster CRD 规范)
operatorNamespace: rook-ceph # Operator 运行的命名空间
cephClusterSpec:
dataDirHostPath: /var/lib/rook #指定 Rook 存储集群元数据的宿主机目录
mon:
count: 3 # MON 节点数量
allowMultiplePerNode: false # 是否允许单节点运行多个 MON
mgr:
count: 2 # MGR 实例数量
allowMultiplePerNode: false # 是否允许单节点运行多个 MGR
modules:
- name: pg_autoscaler # 启用自动 PG 调整模块
enabled: true
# Dashboard 配置
dashboard:
enabled: true # 启用 Ceph 管理面板
ssl: false # 禁用 HTTPS(生产环境建议启用)
# port: 8443 # 可指定自定义端口(默认 7000 非安全/8443 安全)
# 存储设备配置(核心部分)
storage:
useAllNodes: false # 必须显式指定节点
useAllDevices: false # 必须显式指定设备
nodes:
- name: "node1" # 必须匹配 kubectl get nodes 输出
devices:
- name: "sdb" # 使用磁盘设备,如/dev/sdb设备
config:
osdsPerDevice: "1" # 每个物理设备创建 1 个 OSD
# metadataDevice: "" # 可指定单独的元数据设备
# databaseSizeMB: "2048" # Bluestore 的 WAL/DB 大小
# 其他节点相同配置
- name: "node2"
devices:
- name: "sdb"
- name: "node3"
devices:
- name: "sdb"
# 调度策略配置(根据k8s集群自行判断)
placement:
all: # 应用到所有 Ceph 组件
tolerations:
- key: "node-role.kubernetes.io/control-plane"
operator: "Exists"
effect: "NoSchedule" # 允许调度到控制平面节点
affinity:
nodeAffinity:
requiredDuringSchedulingIgnoredDuringExecution:
nodeSelectorTerms:
- matchExpressions:
- key: kubernetes.io/hostname
operator: In
values: # 限制只在这些节点运行
- node1
- node2
- node3
# Dashboard 访问配置(需提前部署 Ingress Controller)
ingress:
dashboard:
enabled: true
host:
name: ceph-dashboard.zsfund.com # 访问域名
path: "/" # URL 路径
pathType: Prefix # 路径匹配规则
ingressClassName: nginx # 必须与已部署的 Ingress Controller 匹配
# annotations: # 可添加注解(如证书配置)
# nginx.ingress.kubernetes.io/backend-protocol: "HTTP"
5.2 部署集群
helm upgrade --install rook-ceph-cluster rook-release/rook-ceph-cluster \
-n rook-ceph \
--create-namespace \
--version v1.17.6 \
-f rook-ceph-cluster-values.yaml
5.3 监控部署进度
watch kubectl get cephcluster -n rook-ceph
等待状态显示 Ready,约需 5-10 分钟。
6 验证集群健康
6.1 检查集群状态
kubectl -n rook-ceph exec -it deploy/rook-ceph-tools -- ceph status
6.2 检查 OSD 状态
kubectl -n rook-ceph exec -it deploy/rook-ceph-tools -- ceph osd tree
6.3 检查存储池
kubectl -n rook-ceph exec -it deploy/rook-ceph-tools -- ceph osd pool ls
7 访问 Dashboard
7.1 获取访问地址
kubectl get ingress -n rook-ceph
7.2 获取管理员密码
kubectl -n rook-ceph get secret rook-ceph-dashboard-password -o jsonpath="{.data.password}" | base64 --decode
8 卸载指南
8.1 卸载顺序
必须按照以下顺序执行卸载:
- 删除所有使用 Ceph 存储的 PVC/PV
- 删除 CephCluster 自定义资源
- 卸载 Rook Ceph Cluster Helm 发布
- 卸载 Rook Operator Helm 发布
- 清理残留数据
8.2 详细步骤
1.删除所有 PVC/PV
kubectl delete pvc --all -n rook-ceph
2.删除 CephCluster CRD:
kubectl -n rook-ceph delete cephcluster rook-ceph
3.卸载 Rook Ceph Cluster:
helm uninstall rook-ceph-cluster -n rook-ceph
4.卸载 Rook Ceph Operator:
helm uninstall rook-ceph -n rook-ceph
5.清理数据(在所有节点执行):
rm -rf /var/lib/rook #清空数据
#下述以/dev/sdb磁盘举例
wipefs -a /dev/sdb #删除文件系统签名。
sgdisk --zap-all /dev/sdb #删除分区表。
dd if=/dev/zero of=/dev/sdb bs=1M count=100 #覆盖磁盘头部的元数据。
可选:删除命名空间和 CRD
kubectl delete namespace rook-ceph
kubectl delete crd cephclusters.ceph.rook.io