问题描述
该笔记将记录:在 Kubernetes Cluster 中,如何部署 Rook Ceph 存储,以及相关问题的解决办法;
通过 Helm Chart 部署
Ceph Cluster Helm Chart – Rook Ceph Documentation
有关更多详细信息,请参见「Ceph Examples」示例;
环境概述
对于生产环境,需要向集群添加额外的节点,用于存储节点,并向其中添加额外的存储设备,作为 Ceph OSD 设备;
对于生产环境,需要遵循 cluster.yaml 中的示例,而不是 cluster-test.yaml 文件,以便配置设备,而不是测试目录;
第一步、准备工作
在 Kubernetes 中,增加多个存储专用的 Worker 节点,并向这些 Worker 节点添加额外的存储磁盘;
第二步、服务部署
helm repo add rook-release https://charts.rook.io/release # ----------------------------------------------------------------------------- # 部署 Operator 实例 helm pull rook-release/rook-ceph --version 1.9.5 # rook-ceph-v1.9.5.tgz helm show values ./rook-ceph-v1.9.5.tgz > rook-ceph-v1.9.5.helm-values.yaml helm install rook-ceph \ --namespace rook-ceph --create-namespace \ ./rook-ceph-v1.9.5.tgz -f rook-ceph-v1.9.5.helm-values.yaml \ # ----------------------------------------------------------------------------- # 部署 Cluster 实例 helm pull rook-release/rook-ceph-cluster --version 1.9.5 helm show values ./rook-ceph-cluster-v1.9.5.tgz > rook-ceph-cluster-v1.9.5.helm-values.yaml helm --namespace rook-ceph \ install rook-ceph-cluster \ ./rook-ceph-cluster-v1.9.5.tgz -f rook-ceph-cluster-v1.9.5.helm-values.yaml --set operatorNamespace=rook-ceph \ --create-namespace helm --namespace rook-ceph \ upgrade rook-ceph-cluster \ ./rook-ceph-cluster-v1.9.5.tgz -f rook-ceph-cluster-v1.9.5.helm-values.yaml --set operatorNamespace=rook-ceph
通过 Manifest 部署(废弃)
注意事项
正如官方文档,本文也只是”基础设置“,也只是”快速开始“,更多的技术细节及部署方法请参考官方文档;
注意,本文只用于参考,概览在部署集群时需要进行的工作;
系统环境
该表是我在部署 Rook 时的一些环境信息:
系统环境: | CentOS Linux release 7.4.1708 (Core) |
软件版本: | Kubernetes v1.12.1 |
Rook: | release-1.0 |
环境要求
在安装 Rook 之前,集群需要满足一些条件,详细参考官方「Prerequisites」文档。这里简单整理:
# 最小版本:需要是 Kubernetes v1.10 或者以上版本;
# 权限与 RBAC:为了管理集群中的存储,需要赋予 Rook 权限。查看「Using Rook with Pod Security Policies」中的细节来设置“在启动了 Pod 安全策略的集群中的”Rook;
# 配置 FlexVolume:这是关键步骤之一,Rook Agent 需要设置为 Flex Volume 插件来管理集群中的存储附加。请参阅「release-1.0/Flex Volume Configuration」来配置 Kubernetes 部署以加载 Rook 卷插件。(这是 Rook 能否成功的关键,因为我的集群是 1.12 版本,因此只能使用 FlexVolume 挂载,而 1.13 开始,应该使用 CSI 驱动挂载)
# 内核 RBD 模块:Rook Ceph 需要使用 RBD 模块,所以需要加载 RBD 模块。(配置方法略过)
# 内核模块目录:默认的内核模块在 /lib/modules 目录中。如果某些发行版使用了不同的目录,需要通过LIB_MODULES_DIR_PATH环境变量,或者helm-operator的agent.libModulesDirPath进行设置。(通常不会遇到这个问题,毕竟我们通常使用 CentOS 发行版)
# 额外 Agent 目录:在某些特定的发行版中,有必要向 Agent 中挂载主机目录。可以使用 AGENT_MOUNTS 环境变量或者 helm-operator 中的 agent.mounts 变量。(目前我还没遇到这方面的需求)
# 安装 LVM 包:需要在所有存储节点上安装 LVM 包;
# 带认证的镜像仓库:如果镜像仓库带有认证,需要修改对应的 ServiceAccount 对象。(由于目前没有这方面的需求,因此跳过)
# 数据持久化:由于 Rook Cluster 需要持久化一些数据,所以如果你使用dataDirHostPath将数据保存在 kubernetes 主机上,那么需要确保主机在指定路径上至少有 5GB 的可用空间;
在测试环境部署中,放宽对本地存储设备的要求,以便可以快速建立群集,并作为“测试”环境来运行,以对 Rook 进行试验。这将在目录中创建“Ceph 文件存储 OSD”,而不需要设备;
测试环境部署
执行下面几条命令及应用 YAML 文件(注意,以下命令只能用于测试环境):
第一步、准备工作目录
git clone https://github.com/rook/rook.git git checkout tags/release-1.0 -v release-1.0 cd cluster/examples/kubernetes/ceph
第二步、部署 Agent 与 Operator 组件
# 有关 Operator 的部署可以参考文档:https://github.com/rook/rook/blob/release-1.0/Documentation/ceph-examples.md kubectl create -f common.yaml kubectl create -f operator.yaml # 验证 rook-ceph-operator, rook-ceph-agent, rook-discover 这几个 Pod 出于运行状态; kubectl -n rook-ceph get pod
第三步、创建 Ceph 集群
# 确保上一步中的所有 Pod 出于运行状态 # 集群配置可以参考文档:https://github.com/rook/rook/blob/release-1.0/Documentation/ceph-cluster-crd.md kubectl create -f cluster-test.yaml # 检查集群是否创建成功 # 检查 OSD Pod 的数量,它取决与节点、设备、已配置目录的数量; kubectl -n rook-ceph get pod
第四步、查看集群状态
# 使用 Rook toolbox 查看集群的健康信息 # https://github.com/rook/rook/blob/release-1.0/Documentation/ceph-toolbox.md
常用操作
集群清理
当创建集群失败后,或者搭建测试集群后,若想清理前面的设置:Cleaning up a Cluster
所有可能存在的 Pod 实例(废弃)
Ceph Documentation/ARCHITECTURE/CLUSTER MAP
Ceph Documentation/ADDING/REMOVING MONITORS
Ceph Documentation/CEPH GLOSSARY
该部分将记录:在 Rook-Ceph 中,所以可能存在的各种 Pod 实例,以及这些 Pod 作用;
rook-ceph-operator (Deployment)
ROOK/Documentation/Ceph Storage
Rook Operator 自动执行存储组件的配置,并监控群集,以确保存储保持可用及健康。它是一个简单的容器,具有引导、监视存储集群所需的全部内容。Rook Operator 将启动并监视 Ceph Monitor,监视提供 RADOS 存储的「Ceph OSD 守护程序」,以及启动和管理其他 Ceph 守护程序。它还会初始化“使用存储时需要用到的”Agent 服务;
数量:1
rook-ceph-mon (Deployment)
与在 Ceph 中的「Ceph Monitor」相对应。「Ceph Monitor」是轻量级进程,维护「Cluster Map」的主副本;
在 Ceph 中,它自己就能处理分布式系统故障。而 Rook 更进一步,可以自动恢复“那些需要管理员介入的”Ceph 组件。监控器的健康是 Rook 中非常关键的部分,如果监控器不健康,Operator 会介入处理,使其恢复健康状态。监视器(mons)是分布式集群的大脑。它们控制着存储和检索数据,以及确保数据安全所需的所有元数据。如果监视器未处于正常状态,则可能会丢失系统中的所有数据;
最常见集群一般有三个监视器。相关内容可以参考「Monitor Quorum」手册;
rook-ceph-osd-<n> (Deployment)
与在 Ceph 中的「Ceph OSD Daemon」相对应,用于与「OSD」交互。(术语「OSD」是指物理或逻辑存储单元);
该 Pod 的数量取决于节点、设备、已配置目录的数量;
它的命名形式为 rook-ceph-osd-0, rook-ceph-osd-1, rook-ceph-osd-2, …
rook-ceph-tools (Deployments)
工具箱,内置 Ceph 命令,用于查看、管理、维护集群;
数量只有一个,只做集群维护作用,不需要提供服务,也可以不安装;
rook-ceph-mgr (Deployment)
是集群的管理模块。在集群 CRD 中,设置dashboard.enabled: true即可;
数量:1
rook-ceph-mds-xxxxxxx (Deployment)
在创建共享文件系统之后,会产生该命名的 Pod 实例。对应在 Ceph 中的「Ceph Metadata Server」;
在 Ceph 中,一个或多个 ceph-mds 实例共同管理文件系统名称空间,从而协调对共享 OSD 集群的访问;
数量与常见的共享文件系统数量、副本数量有关;
rook-ceph-agent (DaemonSet)
该 Pod 与 rook-ceph-discover 都是可选的,取决于你的配置。如果你使用 FlexVolume 挂载存储,那就需要 Agent 运行(如果你使用 CSI 挂载,就不需要 Agent 运行);
它负责从“集群”到“Pod 将运行的节点”上映射和挂载卷。如果 Agent 没有出于 Running 状态,将无法进行卷挂载;
rook-discover (DaemonSet)
Dynamic Flexvolume Plugin Discovery
该 Pod 与 rook-ceph-agent 都是可选的,取决于你的配置。该 Pod 用于插件的自动加载,这与使用 FlexVolume 挂载存储。在「Dynamic Flexvolume Plugin Discovery」中描述了插件加载的方式,而不需要冲洗启动 kubelet 服务;
参考文献
GitHub/rook/rook/Documentation/k8s-pre-reqs.md
Ceph Storage Quickstart
master/FlexVolume Configuration