基于现有Kubernetes集群使用Rook部署Ceph集群

一、前言

本片文章主要是基于现有的k8s集群环境使用Rook部署Ceph集群

Rook官方文档:https://rook.github.io/docs/rook/v1.6/

环境版本信息:k8s版本为1.21.0; Rook版本为:v1.6

集群基础配置要求:内存不低于5G,CPU不低于2核

二、概念介绍:

2.1、什么是Rook

Rook是一个开源的云原生存储编排器,可将存储软件转换为自我管理、自我扩展、自我修复的存储服务,且支持的存储系统包括Ceph、NFS、EdgeFS、CockroachDB、YugabyteDB。本文以Ceph为例,主要介绍Rook概念和框架的部署

 

Rook-Ceph架构

关于Ceph

Ceph是一款开源,高度可扩展的分布式存储解决方案,用于有多年生产的块存储,共享文件存储和对象存储。主要由以下组件组成:

  • MON(Ceph监视器)负责集群监控,所有集群节点都要向MON报告,并共享有关其状态变更信息
  • OSD(Ceph对象存储设备)负责存储对象并通过网络提供访问入口
  • MGR(Ceph Manager)提供额外的监视和与外部管理系统连接的接口
  •  RADOS(可靠的自制分布式对象存储)是Ceph集群的核心,RADOS确保所存储的数据始终与数据复制,故障检测和恢复保持一致
  • RBD(RADOS块设备)现在称为Ceph块设备,提供了持久化块存储,它是精简配置的,可调整大小,并存储在多个OSD节点条带化数据
  • RGW(RADOS网关)是提供对象存储服务的接口,它使用libRGW(RGW库)和libRADOS来与应用程序之间的Ceph对象存储建立连接。RGW提供了与Amazon S3和OpenStack Swift兼容的RESTful API。
  • CephFS是提供POSIX兼容文件系统的Ceph文件系统,CephFS使用Ceph集群存储用户数据
  • MDS跟踪文件层次结构,并仅存储CephFS的元数据

Ceph Rook

Rook operator是一个简单的容器,主要主要引导和监视存储集群所需要的全部内容,operator启动并监视Ceph守护程序Pod,例如MON、OSD、MGR等。还监视守护程序以确保集群运行状态良好,Ceph MON在必要时启动或者故障转移;

  • Ceph CSI(容器存储接口)是一种标准,用于将任意块和文件存储系统暴露给容器编排系统(如Kubernetes)上的容器化工作负载。Ceph CSI与Rook集成在一起,并支持三种方案 RBD(块存储):

  • RBD(块存储):此驱动程序针对RWO pod访问进行了优化,其中只有一个pod可以访问存储

  • CephFS(文件共享存储):此驱动程序允许一个pod或者多个pod的RWX访问同一个存储
  • 对于对象存储,Rook支持创建新存储桶以及通过两个自定义资源访问现有存储桶:对象存储桶声明(OBC)和对象存储桶(OB)。应用程序可以通过RGW访问对象

 三、Rook环境部署

3.1、拉取rook官方安装文件

#git clone --single-branch --branch v1.6.11 https://github.com/rook/rook.git
#cd rook/cluster/examples/kubernetes/ceph
#kubectl create -f crds.yaml -f common.yaml #创建RBAC相关secrets权限 、rook的crd组件,主要用于管理控制Ceph集群

3.2、创建operator yaml文件

修改Rook CSI 镜像地址,默认地址可能是gcr国外镜像,在国内无法正常访问,因此需要同步gcr镜像到阿里云镜像仓库或者其他本地仓库
#root@k8s-master01 rook]# vim cluster/examples/kubernetes/ceph/operator.yaml

#root@k8s-master01 rook]# kubectl create -f  cluster/examples/kubernetes/ceph/operator.yaml 

四、部署Ceph集群

PS: 要保证operator容器和discover 容器都启动完毕之后再开始创建Ceph集群

4.1、创建cluster集群,并修改其yaml配置文件

#root@k8s-master01 rook]# vim cluster/examples/kubernetes/ceph/cluster.yaml 

 配置OSD磁盘存储设备(配置OSD存储节点,name不能配置IP,而应该是标签kubernetes.io/hostname的内容)

#[root@k8s-master01 rook]# kubectl create -f cluster/examples/kubernetes/ceph/cluster.yaml 
[root@k8s-master01 rook]# kubectl get cephcluster -n rook-ceph
NAME        DATADIRHOSTPATH   MONCOUNT   AGE   PHASE   MESSAGE                        HEALTH        EXTERNAL
rook-ceph   /var/lib/rook     3          8d    Ready   Cluster created successfully   HEALTH_WARN

 4.2、部署Ceph snapshot控制器

rook snapshot官方文档:https://rook.io/docs/rook/v1.6/ceph-csi-snapshot.html 

[root@k8s-master01 rook]#cd /root/k8s-ha-install
[root@k8s-master01 k8s-ha-install]# git remote -v
origin https://github.com/dotbalo/k8s-ha-install.git (fetch)
origin https://github.com/dotbalo/k8s-ha-install.git (push)
[root@k8s-master01 k8s-ha-install]# git checkout manual-installation-v1.21.x
[root@k8s-master01 k8s-ha-install]# git branch
* manual-installation-v1.21.x
master
[root@k8s-master01 k8s-ha-install]# kubectl create -f snapshotter/ -n kube-system
[root@k8s-master01 k8s-ha-install]# kubectl get pod -n kube-system -l app=snapshot-controller

 五、部署Ceph客户端工具

对于Ceph集群维护者,推荐两个维护方法

  • Toolbox+Ceph CLI:推荐的方法是在Rook Toolbox终端执行命令
  • Ceph 仪表盘:使用Ceph dashboard
[root@k8s-master01 rook]# cd cluster/examples/kubernetes/ceph
[root@k8s-master01 ceph]# kubectl create -f toolbox.yaml -n rook-ceph #创建tools pod 客户端
[root@k8s-master01 ceph]# kubectl get pod -n rook-ceph -l app=rook-ceph-tools #检查tools容器是否正常启动
NAME READY STATUS RESTARTS AGE
rook-ceph-tools-fc5f9586c-mql8d 1/1 Running 0 66s
[root@k8s-master01 ceph]# kubectl -n rook-ceph exec -it deployment/rook-ceph-tools -- bash #进入tools容器
[root@rook-ceph-tools-fc5f9586c-mql8d /]# ceph status
cluster:
id: d6b21555-bfc5-4aa8-a5bc-2e9ab0cfc3ec
health: HEALTH_WARN  #警告信息可以暂且忽略,后面可以去掉,这个信息提示允许一个不安全的端口对mons进行一个操作
mons are allowing insecure global_id reclaim
Reduced data availability: 1 pg inactive
OSD count 0 < osd_pool_default_size 3
services:
mon: 3 daemons, quorum a,b,c (age 2h)
mgr: a(active, since 2h)
osd: 3 osds: 3 up (since 2m), 3 in (since 2m)
data:
pools: 1 pools, 1 pgs
objects: 0 objects, 0 B
usage: 3.0 GiB used, 57 GiB / 60 GiB avail
pgs: 1 active+clean
[root@rook-ceph-tools-fc5f9586c-f6wgr /]# ceph osd status
ID HOST USED AVAIL WR OPS WR DATA RD OPS RD DATA STATE
0 k8s-master03 1030M 18.9G 0 0 0 0 exists,up
1 k8s-node01 1030M 18.9G 0 0 0 0 exists,up
2 k8s-node02 1030M 18.9G 0 0 0 0 exists,up
[root@rook-ceph-tools-fc5f9586c-f6wgr /]# ceph df

 

 六、配置Ceph Dashboard

 默认情况下,Ceph已经存在service,默认是CLuster IP类型,无法在K8s节点之外的主机访问,虽然可以修改成NodePort不建议直接对其修改成NodePort,因此需要新建一个service,并改成Nodeport类型,对外开放

[root@k8s-master01 ceph]# vim dashboard-ceph.yaml
apiVersion: v1
kind: Service
metadata:
  labels:
    app: rook-ceph-mgr
    ceph_daemon_id: a
    rook_cluster: rook-ceph
  name: rook-ceph-mgr-dashboard-np
  namespace: rook-ceph
spec:
  ports:
  - name: http-dashboard
    port: 7000
    protocol: TCP
    targetPort: 7000
  selector:
    app: rook-ceph-mgr
    ceph_daemon_id: a
    rook_cluster: rook-ceph
  sessionAffinity: None
  type: NodePort
[root@k8s-master01 ceph]# kubectl create -f  dashboard-ceph.yaml

查看rook-ceph命名空间下的secret的密码信息,并通过json结合based64进行解码解密获取登录CEPH平台的密码

[root@k8s-master01 ceph]# kubectl -n rook-ceph get secret rook-ceph-dashboard-password -o jsonpath="{['data']['password']}" | base64 --decode && echo
QW=@c}Xn2Ol4.14B}4Tu 

七、验证

这里直接指定节点IP+暴露的端口即可访问该ceph

PS:登录之后会状态这里会有警告信息,按照ceph官方文档上可处理掉

 

 解决当前ceph界面警告信息

登录到toos客户端,执行该命令即可解决警告信息

[root@k8s-master01 ceph]# kubectl -n rook-ceph exec -it deploy/rook-ceph-tools -- bash
[root@rook-ceph-tools-fc5f9586c-f6wgr /]# ceph config set mon auth_allow_insecure_global_id_reclaim false1se

END! 

posted @ 2022-04-12 17:09  Mr&Yu  阅读(1669)  评论(0编辑  收藏  举报