rook ceph部署手册(helm版本)

使用 Helm 部署 Rook Ceph 的完整指南

Rook Ceph Logo

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 卸载顺序

必须按照以下顺序执行卸载:

  1. 删除所有使用 Ceph 存储的 PVC/PV
  2. 删除 CephCluster 自定义资源
  3. 卸载 Rook Ceph Cluster Helm 发布
  4. 卸载 Rook Operator Helm 发布
  5. 清理残留数据

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

9 参考资源

posted @ 2025-07-16 09:53  怀恋小时候  阅读(18)  评论(0)    收藏  举报