Rook部署全过程

 更新时间:2026年03月03日 09:36:22   作者:文静小土豆  
文章详细介绍了如何部署和管理Rook,包括准备工作、安装步骤、配置准入控制器、创建集群、验证集群、部署Ceph仪表板、块存储和共享文件系统,以及清理和删除环境

部署说明

官网:https://rook.io/

  • K8S版本1.27.2
  • rook 版本1.11.9

安装前准备

  • 原始设备(无分区或格式化文件系统)
  • 原始分区(无格式化文件系统)
  • LVM 逻辑卷(无格式化文件系统)
  • block模式下存储类可用的持久卷

使用以下命令确认分区或设备是否使用文件系统进行格式化

$ lsblk -f
NAME               FSTYPE      LABEL UUID                                   MOUNTPOINT
vdb                                                                         
sr0                                                                         
sda                                                                         
├─sda2             LVM2_member       3QT28B-YeEw-xCUK-0eT2-uBkn-pPcb-2OhWba 
│ ├─rootvg-lv_swap swap              c16f275f-59a8-4093-89ba-3a79bbf0bb59   
│ └─rootvg-lv_root xfs               67894aea-4d9f-4c9d-96cf-348db01eb647   /
└─sda1             xfs               68873398-4b99-4079-b0cb-65d6b9b3b896   /boot
vda   

如果该FSTYPE字段不为空,则表示相应设备上有一个文件系统

准入控制器

建议启用 Rook 准入控制器,以提供额外级别的验证,确保 Rook 已使用自定义资源 (CR) 设置正确配置。

准入控制器会在对象持久化之前、请求经过身份验证和授权之后拦截对 Kubernetes API 服务器的请求。

要部署 Rook 准入控制器

请在安装 Rook 之前安装证书管理器

kubectl apply -f https://github.com/jetstack/cert-manager/releases/download/v1.11.1/cert-manager.yaml

安装LVM包

yum install -y lvm2

开始安装

kubectl使用以下命令和示例清单

为 Kubernetes 创建一个简单的 Rook 集群

$ git clone --single-branch --branch v1.11.9 https://github.com/rook/rook.git
cd rook/deploy/examples
kubectl create -f crds.yaml -f common.yaml -f operator.yaml

修改cluster.yaml配置

cd rook/deploy/examples
vim cluster.yaml
#     resources   生产环境尽量配置大一点,测试环境不用动。
#     useAllNodes: false   是否用所有节点      默认用所有
#     useAllDevices: false   是否用所有设备    默认用所有
#    nodes:    # 配置使用哪些硬盘做OSD
#      - name: "master01"
#        devices:
#          - name: "vda"
#          - name: "vdb"

修改完以后开始部署

kubectl create -f cluster.yaml

查看安装日志

## 你的pod名字和我的不一样
kubectl logs -n rook-ceph rook-ceph-operator-89d55f6b-k26xb -f

部署成功以后显示如下

[root@master01 examples]# kubectl get po -n rook-ceph 
NAME                                                 READY   STATUS      RESTARTS   AGE
csi-cephfsplugin-2qct5                               2/2     Running     0          18m
csi-cephfsplugin-9xrfm                               2/2     Running     0          18m
csi-cephfsplugin-provisioner-7f7874c95d-5t6rq        5/5     Running     0          18m
csi-cephfsplugin-provisioner-7f7874c95d-8pwj2        5/5     Running     0          18m
csi-cephfsplugin-ztng5                               2/2     Running     0          18m
csi-rbdplugin-flmcp                                  2/2     Running     0          18m
csi-rbdplugin-mp986                                  2/2     Running     0          18m
csi-rbdplugin-provisioner-5fdf9c49b6-td2hj           5/5     Running     0          18m
csi-rbdplugin-provisioner-5fdf9c49b6-wvk8m           5/5     Running     0          18m
csi-rbdplugin-wvf6v                                  2/2     Running     0          18m
rook-ceph-crashcollector-master01-74469b9c96-7l62m   1/1     Running     0          15m
rook-ceph-crashcollector-master02-7bc857bd7c-d5wqb   1/1     Running     0          15m
rook-ceph-crashcollector-master03-7ff94fd7f8-vnkr5   1/1     Running     0          15m
rook-ceph-mgr-a-7c7664444c-chn79                     3/3     Running     0          17m
rook-ceph-mgr-b-86d4f654fb-nzxr4                     3/3     Running     0          17m
rook-ceph-mon-a-f5d45c975-6rqc6                      2/2     Running     0          18m
rook-ceph-operator-cb6cb456c-qt55t                   1/1     Running     0          20m
rook-ceph-osd-0-64d78fffbf-phbjk                     2/2     Running     0          15m
rook-ceph-osd-1-87b66886f-pbnb7                      2/2     Running     0          15m
rook-ceph-osd-2-7546c786f5-6p8pz                     2/2     Running     0          15m
rook-ceph-osd-3-57bfff6657-frgx6                     2/2     Running     0          15m
rook-ceph-osd-4-69864d744d-zjqgq                     2/2     Running     0          15m
rook-ceph-osd-5-74f46b6cd7-zwfgv                     2/2     Running     0          15m
rook-ceph-osd-prepare-master01-rrg5z                 0/1     Completed   0          8m48s
rook-ceph-osd-prepare-master02-jmzjc                 0/1     Completed   0          8m44s
rook-ceph-osd-prepare-master03-26d6m                 0/1     Completed   0          8m39s

验证集群是否可用

# 部署工具箱
kubectl create -f deploy/examples/toolbox.yaml

# 等待工具箱 Pod 下载其容器并进入以下running状态
kubectl -n rook-ceph rollout status deploy/rook-ceph-tools

# rook-ceph-tools pod 运行后,您可以使用以下命令连接到它
kubectl -n rook-ceph exec -it deploy/rook-ceph-tools -- bash

工具箱中的所有可用工具均已准备好满足您的故障排除需求。

示例:

  • ceph status
  • ceph osd status
  • ceph df
  • rados df

使用完工具箱后,您可以删除部署

kubectl -n rook-ceph delete deploy/rook-ceph-tools

或者直接敲命令也可以验证ceph集群是否可用

[root@master01 ~]# kubectl get CephCluster -n rook-ceph 
NAME        DATADIRHOSTPATH   MONCOUNT   AGE   PHASE   MESSAGE                        HEALTH      EXTERNAL   FSID
rook-ceph   /data/rook        3          200d   Ready   Cluster created successfully   HEALTH_OK              ac9b64f0-c26c-424e-8efe-fd561fbe0379

部署 Ceph 仪表板

下面几种方式任选一种

kubectl create -f deploy/examples/dashboard-ingress-https.yaml
kubectl create -f deploy/examples/dashboard-loadbalancer.yaml
kubectl create -f deploy/examples/dashboard-external-http.yaml

账号密码

# 默认账号:admin
# 密码通过下面的命令获取
kubectl -n rook-ceph get secret rook-ceph-dashboard-password -o jsonpath="{['data']['password']}" | base64 --decode && echo

部署块存储(RBD)

注意修改pvc回收方式

kubectl create -f rook/deploy/examples/csi/rbd/storageclass.yaml

部署共享文件系统(CephFS)

kubectl create -f rook/deploy/examples/filesystem.yaml
kubectl create -f rook/deploy/examples/csi/cephfs/storageclass.yaml

在K8S集群查看sc动态存储

[root@master01 examples]# kubectl get sc
NAME                  PROVISIONER                     RECLAIMPOLICY   VOLUMEBINDINGMODE   ALLOWVOLUMEEXPANSION   AGE
rook-ceph-rbd         rook-ceph.rbd.csi.ceph.com      Retain          Immediate           true                   150m
rook-cephfs           rook-ceph.cephfs.csi.ceph.com   Retain          Immediate           true                   7m39s
[root@master01 examples]#

清理CEPH环境

删除块和文件工件

cd rook/deploy/examples
kubectl delete -f ../wordpress.yaml
kubectl delete -f ../mysql.yaml
kubectl delete -n rook-ceph cephblockpool replicapool
kubectl delete storageclass rook-ceph-block
kubectl delete -f csi/cephfs/kube-registry.yaml
kubectl delete storageclass csi-cephfs

删除存储环境

kubectl delete -f cluster.yaml
kubectl delete -f crds.yaml -f common.yaml -f operator.yaml

删除K8S资源的时候如果卡到Termination这个状态

kubectl -n rook-ceph patch configmap rook-ceph-mon-endpoints --type merge -p '{"metadata":{"finalizers": []}}'
kubectl -n rook-ceph patch secrets rook-ceph-mon --type merge -p '{"metadata":{"finalizers": []}}'

删除所有节点配置文件

rm -rf /var/lib/rook/rook-ceph

重置所有存储节点的磁盘

DISK="/dev/sdX"

# Zap the disk to a fresh, usable state (zap-all is important, b/c MBR has to be clean)
sgdisk --zap-all $DISK

# Wipe a large portion of the beginning of the disk to remove more LVM metadata that may be present
dd if=/dev/zero of="$DISK" bs=1M count=100 oflag=direct,dsync

# SSDs may be better cleaned with blkdiscard instead of dd
blkdiscard $DISK

# Inform the OS of partition table changes
partprobe $DISK

Ceph 可以留下可以锁定磁盘的 LVM 和设备映射器数据,从而防止磁盘再次被使用。

这些步骤有助于释放旧的 Ceph 磁盘以供重复使用。

请注意,这只需要在每个节点上运行一次。如果您只有一个Rook 集群并且所有Ceph 磁盘都将被擦除,请运行以下命令。

# This command hangs on some systems: with caution, 'dmsetup remove_all --force' can be used
ls /dev/mapper/ceph-* | xargs -I% -- dmsetup remove %

# ceph-volume setup can leave ceph-<UUID> directories in /dev and /dev/mapper (unnecessary clutter)
rm -rf /dev/ceph-*
rm -rf /dev/mapper/ceph--*

总结

以上为个人经验,希望能给大家一个参考,也希望大家多多支持脚本之家。

相关文章

  • Kubernetes Service(SVC)网络使用及说明

    Kubernetes Service(SVC)网络使用及说明

    Kubernetes通过Service资源解决了Pod动态IP的问题,提供稳定的访问入口,ClusterIP、NodePort和LoadBalancer是Service的三种类型,分别适用于内部通信、简单外部访问和云环境,Service通过iptables或IPVS进行负载均衡,并结合Ingress可实现更强大的流量管理
    2026-01-01
  • kubernetes存储之GlusterFS集群详解

    kubernetes存储之GlusterFS集群详解

    最近工作中用到了GlusterFS作为Kubernetes的存储,这篇文章主要给大家介绍了关于kubernetes存储之GlusterFS集群的相关资料,文中通过示例代码介绍的非常详细,需要的朋友可以参考下
    2022-04-04
  • k8s集群搭建的完整步骤流程

    k8s集群搭建的完整步骤流程

    Kubernetes是由Google开源的容器编排平台,用于自动化容器化应用的部署、扩展和管理,这篇文章主要介绍了k8s集群搭建的完整步骤流程,文中通过图文及代码介绍的非常详细,需要的朋友可以参考下
    2025-07-07
  • centos搭建k8s环境详细步骤及常用命令

    centos搭建k8s环境详细步骤及常用命令

    kubernetes是google开源的容器集群管理系统,提供应用部署、维护、扩展机制等功能,利用kubernetes能方便管理跨集群运行容器化的应用,这篇文章主要给大家介绍了关于centos搭建k8s环境详细步骤及常用命令的相关资料,需要的朋友可以参考下
    2024-01-01
  • 云原生技术持久化存储PV与PVC

    云原生技术持久化存储PV与PVC

    这篇文章主要介绍了云原生技术持久化存储PV与PVC
    2022-03-03
  • KVM虚拟化技术之virt-manager使用及KVM虚拟化平台网络模型介绍

    KVM虚拟化技术之virt-manager使用及KVM虚拟化平台网络模型介绍

    这篇文章主要介绍了KVM虚拟化技术之virt-manager使用及KVM虚拟化平台网络模型介绍,需要的朋友可以参考下
    2016-10-10
  • helmfile声明式部署Helm Chart使用详解

    helmfile声明式部署Helm Chart使用详解

    这篇文章主要为大家介绍了helmfile声明式部署Helm Chart使用详解,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2023-02-02
  • K8S安装及配置教程

    K8S安装及配置教程

    这篇文章主要介绍了K8S安装及配置教程,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友参考下吧
    2025-03-03
  • 详解k8s ConfigMap 中 subPath 字段和 items 字段

    详解k8s ConfigMap 中 subPath 字段和 items

    volumeMounts.subPath 属性可用于指定所引用的卷内的子路径,而不是其根路径,这篇文章主要介绍了详解k8s ConfigMap 中 subPath 字段和 items 字段,需要的朋友可以参考下
    2023-03-03
  • 详解kubelet 创建pod流程代码图解及日志说明

    详解kubelet 创建pod流程代码图解及日志说明

    这篇文章主要为大家介绍了详解kubelet 创建pod流程代码图解及日志说明,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2022-09-09

最新评论