文章大纲
Rook 基本介绍
Rook 是一个开源云原生存储编排器,为 Ceph 存储提供平台、框架和支持,以便与原生环境集成。Ceph 是一个分布式存储系统,提供文件、块和对象存储。
Rook 可以自动化对 Ceph 进行部署和管理,基于 Ceph 来提供自我管理,自我修复和自我扩展的存储服务。Rook Operator 通过构建 Kubernetes 资源来部署、配置、供应、扩展、升级和监控 Ceph 来实现。
先决条件
在部署之前需要满足基本的环境条件。
Rook
Rook 可以安装在现有的 Kubernetes 集群中,但需要满足最基本的条件。
版本在 v1.23 至 v1.29 是得到支持的(当前 Kubernetes 的版本为 v1.29),CPU 架构目前仅支持 amd64/x86-64 和 arm64 。
Ceph 先决条件
要部署 Ceph 集群,对于本地存储类型需要满足以下一种或多种:
- Raw 设备,没有分区和文件系统
- Raw 分区,没有文件系统
- LVM ,没有文件系统
- 来自存储类中可用的基于块模式的 PV
如果使用 LVM ,要确保存储节点安装了 lvm2
包。
Kernel
Ceph 需要内核支持 rbd
内核模块,对于常见的发行版本都是支持的。
如果需要创建访问模式为 RWX
基于 CephFS 的文件系统,推荐内核最低版本为 4.17 。
其它条件可参考Rook Ceph Documentation Prerequisites
部署 Rook
部署 Rook 的方式有很多种,这里通过使用 Helm Chart 的方式安装 Rook 来创建、配置和管理 Ceph 集群在 Kubernetes 上。
使用 Helm 部署需要满足:
- Kubernetes 1.22+
- Helm 3.x
当 helm 部署好后,可以通过以下命令部署 Rook:
helm repo add rook-release https://charts.rook.io/release
helm install --create-namespace --namespace rook-ceph rook-ceph rook-release/rook-ceph -f values.yaml
有两个 channels 可以选择 master
和 release
,上面选择的是 release
。
部署时所需的 values.yaml
文件可以参考项目提供的values.yaml。
克隆 rook-ceph 仓库:
git clone https://github.com/rook/rook.git
values.yaml 中的配置可参考configuration。
如果集群是一个三节点的集群(1Master + 2Worker)的话,那么 Master 也需要作为工作负载节点,可以将污点去掉:
kubectl taint node master01.example.com node-role.kubernetes.io/master:PreferNoSchedule-
默认配置中在国内可能遇到的问题就是无法下载所需 image 导致 Pod 无法启动,可以参考博客中的关于为 CRI-O 设置代理的文章。
创建 Cluster
使用项目中的 deploy/examples/cluster.yaml
文件创建 ceph cluster:
kubectl -n rook-ceph apply -f cluster.yaml
验证
查看 helm 部署的状态:
查看 rook-ceph 项目中的 Pod 的状态:
如果需要使用 ceph
命令进行验证的话,需要安装 toolbox
,使用以下方式进行安装:
kubectl apply -f https://raw.githubusercontent.com/rook/rook/master/deploy/examples/toolbox.yaml
安装之后可以进入到 Pod 中执行 ceph
相关命令:
[vagrant@master01 ~]$ kubectl exec -it rook-ceph-tools-66b77b8df5-x97q4 -n rook-ceph -- ceph -s
cluster:
id: f8bdb7b9-12c8-4814-b4a2-6122366ddd1a
health: HEALTH_OK
services:
mon: 3 daemons, quorum a,b,c (age 117m)
mgr: a(active, since 116m), standbys: b
osd: 3 osds: 3 up (since 117m), 3 in (since 3w)
data:
pools: 1 pools, 1 pgs
objects: 2 objects, 449 KiB
usage: 76 MiB used, 60 GiB / 60 GiB avail
pgs: 1 active+clean
可以看到此时的 Ceph 集群是正常且可提供存储服务的。