「Rook」- Ceph Storage

更新日期:2019年10月25日

内容简介

本文将介绍如何在Kubernetes集群上部署Rook服务,底层使用Ceph存储。然后创建共享文件系统,然后挂载到Pod中。

注意事项

正如官方文档一样,本文也只是”基础设置“,也只是”快速开始“,更多的技术细节及部署方法请参考官方文档。

!!!本文只用于参考,可以一览部署集群时需要做的事情。

系统环境

该表是我在部署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插件来管理集群中的存储附加。请参阅「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的可用空间。

测试环境部署

执行下面几条命令及应用YAML文件(注意,以下命令只能用于测试环境):

#!/bin/sh

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

########################################################################################################################
# 创建集群
########################################################################################################################
# 确保上一步中的所有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

生产环境部署

对于生产环境,需要向节点中添加额外的存储设备。

在测试环境部署中,放宽对本地存储设备的要求,以便可以快速建立群集,并作为“测试”环境来运行,以对Rook进行试验。这在目录中创建“Ceph文件存储OSD”,而不需要设备。

对于生产环境,需要遵循cluster.yaml中的示例,而不是cluster-test.yaml文件,以便配置设备,而不是测试目录。有关更多详细信息,请参见「Ceph Examples」示例。

(搭建)快速开始

FlexVolume Configuration

(使用)创建共享文件系统

ROOK/Documentation/Ceph Storage/Shared File System

仪表盘

Ceph Dashboard
kubectl -n rook-ceph get secret rook-ceph-dashboard-password -o jsonpath="{['data']['password']}" | base64 --decode && echo

工具箱

Rook Toolbox

清理集群

Cleaning up a Cluster

Direct Tools / Shared Filesystem Tools

# Create the directory
mkdir /tmp/registry

# Detect the mon endpoints and the user secret for the connection
mon_endpoints=$(grep mon_host /etc/ceph/ceph.conf | awk '{print $3}')
my_secret=$(grep key /etc/ceph/keyring | awk '{print $3}')

# Mount the file system
mount -t ceph -o mds_namespace=myfs,name=admin,secret=$my_secret $mon_endpoints:/ /tmp/registry

# See your mounted file system
df -h

相关链接

Ceph Operator Helm Chart

常见问题

Ceph Common Issues

参考文献



Backlinks: Cloud-native Technologies:Rook - Storage Orchestrator

ToC

内容简介

注意事项

系统环境

# 开始部署服务

环境要求

测试环境部署

生产环境部署

(搭建)快速开始

(使用)创建共享文件系统

仪表盘

工具箱

清理集群

相关链接

常见问题

参考文献