云原生 / 存储系统

K8s通过Rook部署Ceph集群

温馨提示:本文最后更新于2022-10-10 10:09:53,某些文章具有时效性,若有错误或已失效,请在下方留言或问题自助查询
当前位置: 首页 » 云原生 » K8s通过Rook部署Ceph集群
浅时光博客 · 10月10日 · 2022年 · 本文5130个字,预计阅读13分钟 14527次已读

一、Rook介绍


1、Rook介绍

Rook是一个开源的云原生存储协调器,提供平台、框架和对各种存储解决方案的支持,以与云原生环境进行本地集成。

Rook将存储软件转变为自我管理,自我扩展和自我修复的存储服务。它通过自动化部署、引导、配置、供应、扩展、升级、迁移、灾难恢复、监视和资源管理来实现。Rook使用底层云原生容器管理,调度和编排平台提供的功能来执行其职责。

Rook利用扩展点将其深度集成到云原生环境中,并为调度、生命周期管理、资源管理、安全性、监视和用户体验提供无缝的体验。

2、存储架构

Ceph 是一个高度可扩展的分布式存储解决方案,用于块存储、对象存储和共享文件系统

Rook 使Ceph 存储能够原生的Kubernetes 上运行。通过在 Kubernetes 集群中运行 Ceph,Kubernetes 应用文章来源(Source):浅时光博客程序可以挂载 Rook 管理的块设备和文件系统,或者可以使用 S3/Swift API 进行对象存储。Rook operator 自动配置存储组件并监控集群以确保存储保持可用和健康。

Rook operator 是一个简单的容器,它拥有引导和监控存储集群所需的一切。Rook operator将启动和监控Ceph 监控 pod、提供 RADOS 存储的 Ceph OSD 守护进程,以及启动和管理其他 Ceph 守护进程。操作员通过初始化运行服务所需的 Pod 和其他资源来管理池、对象存储 (S3/Swift) 和文件系统的 CRD。

Rook operator将监控存储守护进程以确保集群健康。Ceph mons 将在必要时启动或故障转移,并随着集群的增长或缩小进行其他调整。操作员还将观察 Ceph 自定义资源 (CRs) 中指定的所需状态更改并应用更改。

Rook 会自动配置 Ceph-CSI 驱动程序以将存储挂载到您的 pod。

K8s通过Rook部署Ceph集群-浅时光博客

3、Rook特点

  • 简单可靠的自动化资源管理
  • 超大规模或超融合您的存储集群
  • 有效地分发和复制数据以最大程度地减少损失
  • 使用多个存储提供程序进行配置、文件、块和对象
  • 管理开源存储技术
  • 在您的数据中心轻松启用弹性存储
  • 在 Apache 2.0 许可下发布的开源软件
  • 优化商品硬件上的工作负载
K8s通过Rook部署Ceph集群-浅时光博客

二、环境说明


最低版本

Ceph operator支持Kubernetes v1.17或更高版本。

CPU架构

发布的架构是amd64 / x86_64和arm64

Ceph 先决条件

为了配置 Ceph 存储集群,至少需要以下本地存储选项之一:

  • 原始设备(无分区或格式化文件系统)
  • 原始分区(无格式化文件系统)
  • block模式下存储类中可用的 PV

三、部署准备


1、部署Rook Ceph前提条件

  • 至少准备3个节点、并且全部可以调度pod,满足ceph副本高可用要求
  • 节点存在可用的裸盘或裸分区,无格式化文件系统
  • 如果需要LVM,节点必须安装lvm2软件包 Ceph需要使用RBD模块构建的Linux内核,可以通过运行modprobe
  • 如果要从Ceph共享文件系统(CephFS)创建卷​​,建议的最低内核版本为4.17,低于 4.17,则不会强制执行请求的 PVC 大小

2、确保所有节点安装LVM2

export NODE_IPS=(192.168.66.62 192.168.66.63 192.168.66.64 192.168.66.65 192.168.66.66 192.168.66.67)

for node_ip in ${NODE_IPS[@]}
  do
    echo ">>> ${node_ip}"
    ssh root@${node_ip} "yum install -y lvm2"
  done

3、为K8s工作节点添加新磁盘

说明:

我的K8s集群节点磁盘只有/dev/sda根磁盘跟一个扩容的磁盘/dev/sdb,这2块盘都已经格式化为文件系统,所以这里我需要在所有的K8s工作节点添加1块20GB的新磁盘/dev/sdc,作为OSD盘,提供存储空间,添加完成后不要进行格式化,我们需要在不重启的服务器的情况下使机器可以扫描到增加的设备,执行下面的操作来确保主机能够正常识别到:

#扫描 SCSI总线并添加 SCSI 设备(所有工作节点执行)
for host in $(ls /sys/class/scsi_host) ; do echo "- - -" > /sys/class/scsi_host/$host/scan; done

#重新扫描 SCSI 总线(所有工作节点执行)
for scsi_device in $(ls /sys/class/scsi_device/); do echo 1 > /sys/class/scsi_device/$scsi_device/device/rescan; done

#查看已添加的磁盘,能够看到sdc说明添加成功(所有工作节点执行)
lsblk
K8s通过Rook部署Ceph集群-浅时光博客
#使用以下命令确认您的分区或设备是未初始化为文件系统的,确保FSTYPE字段为空
lsblk -f
K8s通过Rook部署Ceph集群-浅时光博客

4、Rook Ceph存储使用场景

  • 以下是Rook Ceph支持的三种存储类型使用场景
    • 块存储: 创建块存储以供 单个Pod (RWO) 使用
    • 文件存储:创建一个文件系统以在多个 pod 之间共享 (RWX)
    • 对象存文章来源(Source):https://www.dqzboy.com储:创建可在 Kubernetes 集群内部或外部访问的对象存储

四、部署Rook


无另外说明,以下全部操作都在k8s master节点执行

1、下载Rook源代码

K8s通过Rook部署Ceph集群-浅时光博客
[root@k8s-master1 ~]# mkdir /opt/k8s/work/rook
[root@k8s-master1 ~]# cd /opt/k8s/work/rook/

#解压
[root@k8s-master1 rook]# unzip rook-1.9.4.zip

2、查看所需镜像列表

[root@k8s-master1 ~]# cd /opt/k8s/work/rook/rook-1.9.4/deploy/examples/
[root@k8s-master1 examples]# cat images.txt

3、修改Operator配置

3.1:修改镜像地址为国内地址

获取到国内可访问镜像列表

提取码:4t8t 公众号关键词:解压密码

[root@k8s-master1 examples]# cp operator.yaml{,.bak}
[root@k8s-master1 examples]# vim operator.yaml
K8s通过Rook部署Ceph集群-浅时光博客

3.2:修改Rook CSI驱动注册路径

注意:rook csi驱动挂载的路径是挂载到kubelet所配置的–root-dir参数指定的目录下的;所以需要根据自己实际的–root-dir参数修改下图中rook csi的kubelet路径地址;如果与实际kubelet的–root-dir路径不一致,则会导致后面进行挂载存储时提示 driver name 文章来源(Source):浅时光博客rook-ceph.cephfs.csi.ceph.com not found in the list of registered CSI driver

[root@k8s-master1 examples]# vim operator.yaml
ROOK_CSI_KUBELET_DIR_PATH
K8s通过Rook部署Ceph集群-浅时光博客

4、开启准入控制器

准入控制器在对象持久化之前拦截到Kubernetes API服务器的请求,但在对请求进行身份验证和授权之后。

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

可利用助手脚本自动配置部署Rook准入控制器,这个脚本将帮助我们完成以下任务:

  • 创建自签名证书
  • 为证书创建证书签名请求(CSR),并从Kubernetes集群获得批准
  • 将这些证书存储为Kubernetes Secret
  • 创建Service AccountClusterRoleClusterRoleBindings,以便以最低权限运行webhook服务
  • 创建ValidatingWebhookConfig并使用来自集群的适当值填充CA bundle
kubectl create -f crds.yaml
kubectl create -f common.yaml

5、部署Rook Operator

5.1:创建配置持久化目录

  • 所有节点创建主机上配置文件将被持久化的路径
[root@k8s-master1 examples]# export NODE_IPS=(192.168.66.62 192.168.66.63 192.168.66.64 192.168.66.65 192.168.66.66 192.168.66.67)

[root@k8s-master1 examples]# for node_ip in ${NODE_IPS[@]}
  do
    echo ">>> ${node_ip}"
    ssh root@${node_ip} "mkdir -p /data/rook && ls -d /data/rook*"
  done

5.2:执行创建Operator组件

[root@k8s-master1 examples]# kubectl create -f operator.yaml

#查看创建的operator pod
[root@k8s-master1 examples]# kubectl get po -n rook-ceph -o wide
K8s通过Rook部署Ceph集群-浅时光博客

注意:等待Rook Operator Pod起来之后再部署Ceph集群

五、创建 Ceph 集群


1、给工作节点打上标签

[root@k8s-master1 examples]# kubectl label no k8s-worker1 role=storage-node
[root@k8s-master1 examples]# kubectl label no k8s-worker2 role=storage-node
[root@k8s-master1 examples]# kubectl label no k8s-worker3 role=storage-node

[root@k8s-master1 examples]# kubectl get no --show-labels | grep role=storage-node
K8s通过Rook部署Ceph集群-浅时光博客

2、修改Cluster配置文件

文件中有几个地方要注意:

dataDirHostPath: 这个路径是会在宿主机上生成的,保存文章来源(Source):浅时光博客的是ceph的相关的配置文件,再重新生成集群的时候要确保这个目录为空,否则mon会无法启动,宿主机的/var/lib/rook文件夹

useAllDevices: 使用所有的设备,建议为false,否则会把宿主机所有可用的磁盘都干掉

useAllNodes:使用所有的node节点,建议为false,肯定不会用k8s集群内的所有node来搭建ceph的

文章来源(Source):https://www.dqzboy.com
[root@k8s-master1 examples]# cp cluster.yaml{,_bak}
[root@k8s-master1 examples]# vim cluster.yaml
K8s通过Rook部署Ceph集群-浅时光博客
K8s通过Rook部署Ceph集群-浅时光博客
K8s通过Rook部署Ceph集群-浅时光博客
K8s通过Rook部署Ceph集群-浅时光博客

3、部署并检查创建情况

#创建部署资源
[root@k8s-master1 examples]# kubectl apply -f cluster.yaml

#查看创建的pods
[root@k8s-master1 examples]# kubectl get po -n rook-ceph -o wide
K8s通过Rook部署Ceph集群-浅时光博客
#查看集群状态;需要等待各个组件配置初始化完成
[root@k8s-master1 examples]# kubectl get CephCluster -n rook-ceph
K8s通过Rook部署Ceph集群-浅时光博客

4、安装Rook-Ceph工具

[root@k8s-master1 examples]# kubectl create -f toolbox.yaml
[root@k8s-master1 examples]# kubectl -n rook-ceph rollout status deploy/rook-ceph-tools

[root@k8s-master1 examples]# kubectl get po -n rook-ceph
[root@k8s-master1 examples]# kubectl -n rook-ceph exec -it deploy/rook-ceph-tools -- bash
K8s通过Rook部署Ceph集群-浅时光博客

今天文章就先到这吧,溜了溜了~~~ 后面在更新Ceph RBD PVC动态扩容相关的使用!!!如果文章对你有帮助就动动你那发财的小手,点个赞留个言,给本站加点热度。谢谢支持!




关注本站官方微信公众号『精彩程序人生』

扫描左侧二维码关注我们的微信公众帐号,在微信公众帐号中回复【资料】获取IT技术文档。
关注博主不迷路~


本文作者:浅时光博客
原文链接:https://www.dqzboy.com/10834.html
版权声明:知识共享署名-相同方式共享 4.0 国际 (CC BY-NC-SA 4.0)协议进行许可,转载时请以超链接形式标明文章原始出处和作者信息
免责声明:本站发布的内容(图片、视频和文字)以及一切破解补丁、注册激活和软件解密分析文章仅限用于学习和研究目的;不得将上述内容用于商业或者非法用途,否则,一切后果请用户自负。访问和下载本站内容,说明您已同意上述条款!


0 条回应

必须 注册 为本站用户, 登录 后才可以发表评论!

    本站已稳定运行: | 耗时 0.267 秒 | 查询 80 次 | 内存 12.73 MB