基于现有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标签:Ceph,存储,rook,Kubernetes,ceph,Rook,集群,k8s,root From: https://www.cnblogs.com/Lqdream/p/16944640.html