「ROOK-CEPH」- 集群环境搭建(快速开始)

问题描述

该笔记将记录:在 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-operatoragent.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)

Monitor Health

与在 Ceph 中的「Ceph Monitor」相对应。「Ceph Monitor」是轻量级进程,维护「Cluster Map」的主副本;

在 Ceph 中,它自己就能处理分布式系统故障。而 Rook 更进一步,可以自动恢复“那些需要管理员介入的”Ceph 组件。监控器的健康是 Rook 中非常关键的部分,如果监控器不健康,Operator 会介入处理,使其恢复健康状态。监视器(mons)是分布式集群的大脑。它们控制着存储和检索数据,以及确保数据安全所需的所有元数据。如果监视器未处于正常状态,则可能会丢失系统中的所有数据;

最常见集群一般有三个监视器。相关内容可以参考「Monitor Quorum」手册;

rook-ceph-osd-<n> (Deployment)

Run OSD in its own Pod

与在 Ceph 中的「Ceph OSD Daemon」相对应,用于与「OSD」交互。(术语「OSD」是指物理或逻辑存储单元);

该 Pod 的数量取决于节点、设备、已配置目录的数量;

它的命名形式为 rook-ceph-osd-0, rook-ceph-osd-1, rook-ceph-osd-2, …

rook-ceph-tools (Deployments)

Rook Toolbox

工具箱,内置 Ceph 命令,用于查看、管理、维护集群;

数量只有一个,只做集群维护作用,不需要提供服务,也可以不安装;

rook-ceph-mgr (Deployment)

Ceph Dashboard

是集群的管理模块。在集群 CRD 中,设置dashboard.enabled: true即可;

数量:1

rook-ceph-mds-xxxxxxx (Deployment)

在创建共享文件系统之后,会产生该命名的 Pod 实例。对应在 Ceph 中的「Ceph Metadata Server」;

在 Ceph 中,一个或多个 ceph-mds 实例共同管理文件系统名称空间,从而协调对共享 OSD 集群的访问;

数量与常见的共享文件系统数量、副本数量有关;

rook-ceph-agent (DaemonSet)

Ceph Agent Deployment

该 Pod 与 rook-ceph-discover 都是可选的,取决于你的配置。如果你使用 FlexVolume 挂载存储,那就需要 Agent 运行(如果你使用 CSI 挂载,就不需要 Agent 运行);

它负责从“集群”到“Pod 将运行的节点”上映射和挂载卷。如果 Agent 没有出于 Running 状态,将无法进行卷挂载;

rook-discover (DaemonSet)

Dynamic Flexvolume Plugin Discovery

Deploy the Rook Operator

该 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