一 Rook概述

1.1 Ceph简介

Ceph是一种高度可扩展的分布式存储解决方案,提供对象、文件和块存储。在每个存储节点上,将找到Ceph存储对象的文件系统和Ceph OSD(对象存储守护程序)进程。在Ceph集群上,还存在Ceph MON(监控)守护程序,它们确保Ceph集群保持高可用性。

更多Ceph介绍参考:https://www.cnblogs.com/itzgr/category/1382602.html

1.2 Rook简介

Rook 是一个开源的cloud-native storage编排, 提供平台和框架;为各种存储解决方案提供平台、框架和支持,以便与云原生环境本地集成。目前主要专用于Cloud-Native环境的文件、块、对象存储服务。它实现了一个自我管理的、自我扩容的、自我修复的分布式存储服务。

Rook支持自动部署、启动、配置、分配(provisioning)、扩容/缩容、升级、迁移、灾难恢复、监控,以及资源管理。为了实现所有这些功能,Rook依赖底层的容器编排平台,例如 kubernetes、CoreOS 等。。

Rook 目前支持Ceph、NFS、Minio Object Store、Edegefs、Cassandra、CockroachDB 存储的搭建。

Rook机制:

Rook 提供了卷插件,来扩展了 K8S 的存储系统,使用 Kubelet 代理程序 Pod 可以挂载 Rook 管理的块设备和文件系统。

Rook Operator 负责启动并监控整个底层存储系统,例如 Ceph Pod、Ceph OSD 等,同时它还管理 CRD、对象存储、文件系统。

Rook Agent 代理部署在 K8S 每个节点上以 Pod 容器运行,每个代理 Pod 都配置一个 Flexvolume 驱动,该驱动主要用来跟 K8S 的卷控制框架集成起来,每个节点上的相关的操作,例如添加存储设备、挂载、格式化、删除存储等操作,都有该代理来完成。

更多参考如下官网:

https://rook.io

https://ceph.com/

二 Rook部署

2.1 前期规划

请自动创建好kubernetes集群

集群版本 v1.21.5

内核要求

RBD

lsmod|grep rbd

CephFS

如果你想使用cephfs,内核最低要求是4.17。

磁盘 sdb

主机内核 5.4.182-1.el7.elrepo.x86_64

集群节点 estarhaohao-centos7-master01 estarhaohao-centos7-master02 estarhaohao-centos7-master03

用到的所有文件请自行到我的gitee仓库拉取https://gitee.com/estarhaohao/rook.git

2.2 获取YAML

[root@k8smaster01 ~]# git clone https://gitee.com/estarhaohao/rook.git

2.3 配置节点标签

[root@estarhaohao-centos7-master01 ~]# kubectl label nodes  {estarhaohao-centos7-master01,estarhaohao-centos7-master02,estarhaohao-centos7-master03} app.rook.role=csi-provisioner app.rook.plugin=csi app.rook=storage ceph-mon=enabled ceph-osd=enabled ceph-mgr=enabled

2.4 部署Rook Operator

[root@estarhaohao-centos7-master01 ceph]# kubectl apply -f common.yaml
[root@estarhaohao-centos7-master01 ceph]# kubectl apply -f crds.yaml #创建资源
[root@estarhaohao-centos7-master01 ceph]# kubectl apply -f operator.yaml
configmap/rook-ceph-operator-config created
deployment.apps/rook-ceph-operator created
[root@estarhaohao-centos7-master01 ceph]# kubectl get pod -n rook-ceph
NAME READY STATUS RESTARTS AGE
rook-ceph-operator-56496b9f8f-dblnq 1/1 Running 0 3m37s
rook-discover-2jp7z 1/1 Running 0 2m53s
rook-discover-hqq27 1/1 Running 0 2m53s
rook-discover-sx8c6 1/1 Running 0 2m53s

创建成功后创建cluster

2.5 创建cluster

[root@estarhaohao-centos7-master01 ceph]# kubectl get pod -n rook-ceph
[root@estarhaohao-centos7-master01 ceph]# kubectl get pod -n rook-ceph
NAME READY STATUS RESTARTS AGE
csi-cephfsplugin-mwfg8 3/3 Running 0 5m53s
csi-cephfsplugin-provisioner-6446d9c9df-4r5xq 6/6 Running 0 5m52s
csi-cephfsplugin-provisioner-6446d9c9df-rkd4k 6/6 Running 0 5m52s
csi-cephfsplugin-vrlwm 3/3 Running 0 5m53s
csi-cephfsplugin-xfm8n 3/3 Running 0 5m53s
csi-rbdplugin-d87pk 3/3 Running 0 5m54s
csi-rbdplugin-k292p 3/3 Running 0 5m54s
csi-rbdplugin-provisioner-6998bd5986-j7729 6/6 Running 0 5m53s
csi-rbdplugin-provisioner-6998bd5986-rp2wk 6/6 Running 0 5m53s
csi-rbdplugin-r56c2 3/3 Running 0 5m54s
rook-ceph-crashcollector-estarhaohao-centos7-master01-564fhkv28 1/1 Running 0 4m7s
rook-ceph-crashcollector-estarhaohao-centos7-master02-547djvsw2 1/1 Running 0 3m18s
rook-ceph-crashcollector-estarhaohao-centos7-master03-787cdjq4b 1/1 Running 0 4m20s
rook-ceph-mgr-a-5bbf8f48d7-pdgkt 1/1 Running 0 3m51s
rook-ceph-mon-a-77d85f8944-56cgc 1/1 Running 0 5m59s
rook-ceph-mon-b-76d6564885-vxxhd 1/1 Running 0 5m30s
rook-ceph-mon-c-85858494c5-xjpf9 1/1 Running 0 4m7s
rook-ceph-operator-56496b9f8f-dblnq 1/1 Running 0 9m53s
rook-ceph-osd-0-5c4f45d76-n6qc6 1/1 Running 0 3m24s
rook-ceph-osd-1-7f7f575577-v7lg5 1/1 Running 0 3m21s
rook-ceph-osd-2-5677f9d654-wzzzq 1/1 Running 0 3m18s
rook-ceph-osd-prepare-estarhaohao-centos7-master01-fvxq9 0/1 Completed 0 3m47s
rook-ceph-osd-prepare-estarhaohao-centos7-master02-x7swq 0/1 Completed 0 3m46s
rook-ceph-osd-prepare-estarhaohao-centos7-master03-9vhfc 0/1 Completed 0 3m45s
rook-discover-2jp7z 1/1 Running 0 9m9s
rook-discover-hqq27 1/1 Running 0 9m9s
rook-discover-sx8c6 1/1 Running 0 9m9s

提示:若部署失败,master节点执行[root@k8smaster01 ceph]# kubectl delete -f ./

所有node节点执行如下清理操作:

rm -rf /var/lib/rook

/dev/mapper/ceph-*

dmsetup ls

dmsetup remove_all

dd if=/dev/zero of=/dev/sdb bs=512k count=1

wipefs -af /dev/sdb

2.6 部署Toolbox

toolbox是一个rook的工具集容器,该容器中的命令可以用来调试、测试Rook,对Ceph临时测试的操作一般在这个容器内执行。

[root@estarhaohao-centos7-master01 ceph]# kubectl apply -f toolbox.yaml
rook-ceph-tools-8574b74c5d-65x8r 1/1 Running 0 4s

2.7 测试rook-ceph

可以添加别名 就不用这样写这么多命令了
[root@estarhaohao-centos7-master01 ceph]# kubectl -n rook-ceph exec -it $(kubectl -n rook-ceph get pod -l "app=rook-ceph-tools" -o jsonpath='{.items[0].metadata.name}') --- ceph -s
cluster:
id: 2fb51620-1a29-4d64-9ad9-616e6435924a
health: HEALTH_OK services:
mon: 3 daemons, quorum a,b,c (age 28m)
mgr: a(active, since 27m)
mds: myfs:1 {0=myfs-a=up:active} 1 up:standby-replay
osd: 3 osds: 3 up (since 27m), 3 in (since 27m) data:
pools: 4 pools, 97 pgs
objects: 30 objects, 49 KiB
usage: 3.0 GiB used, 897 GiB / 900 GiB avail
pgs: 97 active+clean io:
client: 852 B/s rd, 1 op/s rd, 0 op/s wr
[root@estarhaohao-centos7-master01 ~]# ceph osd tree
ID CLASS WEIGHT TYPE NAME STATUS REWEIGHT PRI-AFF
-1 0.87900 root default
-3 0.29300 host estarhaohao-centos7-master01
0 hdd 0.29300 osd.0 up 1.00000 1.00000
-7 0.29300 host estarhaohao-centos7-master02
2 hdd 0.29300 osd.2 up 1.00000 1.00000
-5 0.29300 host estarhaohao-centos7-master03
1 hdd 0.29300 osd.1 up 1.00000 1.00000
到这基本没什么问题了

三 Ceph 块存储

3.1 创建StorageClass

在提供(Provisioning)块存储之前,需要先创建StorageClass和存储池。K8S需要这两类资源,才能和Rook交互,进而分配持久卷(PV)。

解读:如下配置文件中会创建一个名为replicapool的存储池,和rook-ceph-block的storageClass。

[root@estarhaohao-centos7-master01 rbd]# pwd
/opt/rook/cluster/examples/kubernetes/ceph/csi/rbd
[root@estarhaohao-centos7-master01 rbd]# kubectl apply -f storageclass.yaml
[root@estarhaohao-centos7-master01 rbd]# kubectl get sc
NAME PROVISIONER RECLAIMPOLICY VOLUMEBINDINGMODE ALLOWVOLUMEEXPANSION AGE
rook-ceph-block rook-ceph.rbd.csi.ceph.com Delete Immediate true 64m

3.2 测试rbd

[root@estarhaohao-centos7-master01 rbd]# kubectl get sc
NAME PROVISIONER RECLAIMPOLICY VOLUMEBINDINGMODE ALLOWVOLUMEEXPANSION AGE
rook-ceph-block rook-ceph.rbd.csi.ceph.com Delete Immediate true 4s
[root@estarhaohao-centos7-master01 rbd]# kubectl apply -f pod.yaml
pod/csirbd-demo-pod created
[root@estarhaohao-centos7-master01 rbd]# kubectl apply -f pvc.yaml
persistentvolumeclaim/rbd-pvc created
[root@estarhaohao-centos7-master01 rbd]# kubectl get pvc rbd-pvc
NAME STATUS VOLUME CAPACITY ACCESS MODES STORAGECLASS AGE
rbd-pvc Bound pvc-9f69bfab-a81b-41ea-93c7-59966661c867 1Gi RWO rook-ceph-block 5s
[root@estarhaohao-centos7-master01 rbd]# kubectl get pod csirbd-demo-pod
NAME READY STATUS RESTARTS AGE
csirbd-demo-pod 1/1 Running 0 70s

running状态基本没问题了

四 Ceph 文件存储

4.1 创建CephFilesystem

默认Ceph未部署对CephFS的支持,使用如下官方提供的默认yaml可部署文件存储的filesystem。

[root@estarhaohao-centos7-master01 ceph]# pwd
/opt/rook/cluster/examples/kubernetes/ceph
[root@estarhaohao-centos7-master01 ceph]# kubectl apply -f filesystem.yaml
[root@estarhaohao-centos7-master01 ceph]# kubectl get cephfilesystems.ceph.rook.io -n rook-ceph
NAME ACTIVEMDS AGE
myfs 1 55m

4.2 创建cephfs storageclass

使用如下官方提供的默认yaml可部署文件存储的StorageClass。

[root@estarhaohao-centos7-master01 cephfs]# pwd
/opt/rook/cluster/examples/kubernetes/ceph/csi/cephfs
[root@estarhaohao-centos7-master01 cephfs]# kubectl apply -f storageclass.yaml
[root@estarhaohao-centos7-master01 cephfs]# kubectl get sc
NAME PROVISIONER RECLAIMPOLICY VOLUMEBINDINGMODE ALLOWVOLUMEEXPANSION AGE
rook-ceph-block rook-ceph.rbd.csi.ceph.com Delete Immediate true 70m
rook-cephfs rook-ceph.cephfs.csi.ceph.com Delete Immediate true 56m

4.3 测试cephfs

[root@estarhaohao-centos7-master01 cephfs]# kubectl apply -f pvc.yaml
[root@estarhaohao-centos7-master01 cephfs]# kubectl apply -f pod.yaml
[root@estarhaohao-centos7-master01 cephfs]# kubectl get pvc
NAME STATUS VOLUME CAPACITY ACCESS MODES STORAGECLASS AGE
cephfs-pvc Bound pvc-e0d04036-a37c-4544-b71f-ac53f79c7832 1Gi RWO rook-cephfs 57m
[root@estarhaohao-centos7-master01 cephfs]# kubectl get pod
NAME READY STATUS RESTARTS AGE
csicephfs-demo-pod 1/1 Running 0 57m

cephfs基本没问题了

五 Ceph 对象存储

5.1 创建CephObjectStore

在提供(object)对象存储之前,需要先创建相应的支持,使用如下官方提供的默认yaml可部署对象存储的CephObjectStore。

[root@estarhaohao-centos7-master01 ceph]# pwd
/opt/rook/cluster/examples/kubernetes/ceph
[root@estarhaohao-centos7-master01 ceph]# kubectl apply -f object.yaml
[root@estarhaohao-centos7-master01 ceph]# kubectl get pod -n rook-ceph | grep rgw
rook-ceph-rgw-my-store-a-57dd44d5b-lkgfw 1/1 Running 0 2m51s

5.2 创建StorageClass

使用如下官方提供的默认yaml可部署对象存储的StorageClass。

[root@estarhaohao-centos7-master01 ceph]# kubectl apply -f storageclass-bucket-delete.yaml
storageclass.storage.k8s.io/rook-ceph-delete-bucket created
[root@estarhaohao-centos7-master01 ceph]# kubectl get sc
NAME PROVISIONER RECLAIMPOLICY VOLUMEBINDINGMODE ALLOWVOLUMEEXPANSION AGE
rook-ceph-block rook-ceph.rbd.csi.ceph.com Delete Immediate true 85m
rook-ceph-delete-bucket rook-ceph.ceph.rook.io/bucket Delete Immediate false 5s
rook-cephfs rook-ceph.cephfs.csi.ceph.com Delete Immediate true 72m

5.3 创建bucket

使用如下官方提供的默认yaml可部署对象存储的bucket。

[root@k8smaster01 ceph]# kubectl create -f object-bucket-claim-delete.yaml

待定。。。。。

kubernetes配置后端存储 rook-ceph的更多相关文章

  1. Openstack_后端存储平台Ceph

    框架图 介绍 一种为优秀的性能.可靠性和可扩展性而设计的统一的.分布式文件系统 特点 CRUSH算法 Crush算法是ceph的两大创新之一,简单来说,ceph摒弃了传统的集中式存储元数据寻址的方案, ...

  2. 配置cinder-backup服务使用ceph作为后端存储

    在ceph监视器上执行 CINDER_PASSWD='cinder1234!'controllerHost='controller'RABBIT_PASSWD='0penstackRMQ' 1.创建p ...

  3. 配置cinder-volume服务使用ceph作为后端存储

    在ceph监视器上执行 CINDER_PASSWD='cinder1234!'controllerHost='controller'RABBIT_PASSWD='0penstackRMQ' 1.创建p ...

  4. 配置Ceph集群为OpenStack后端存储

    配置Ceph存储为OpenStack的后端存储 1  前期配置 Ceph官网提供的配置Ceph块存储为OpenStack后端存储的文档说明链接地址:http://docs.ceph.com/docs/ ...

  5. 部署prometheus监控kubernetes集群并存储到ceph

    简介 Prometheus 最初是 SoundCloud 构建的开源系统监控和报警工具,是一个独立的开源项目,于2016年加入了 CNCF 基金会,作为继 Kubernetes 之后的第二个托管项目. ...

  6. k8s使用ceph的rbd作后端存储

    k8s使用rbd作后端存储 k8s里的存储方式主要有三种.分别是volume.persistent volumes和dynamic volume provisioning. volume: 就是直接挂 ...

  7. CoreDNS配置kubernetes作为后端

    概述 coredns之所以如此名声大噪,就是因为从kubernetes1.9开始引入,作为kubernetes内部服务发现的默认dns.毫无疑问kubernetes是coredns的后端之一,所以我们 ...

  8. Rancher 2:添加 NFS client provisioner 动态提供 Kubernetes 后端存储卷

    一.前提说明 1.说明: NFS client provisioner 利用 NFS Server 给 Kubernetes 作为持久存储的后端,并且动态提供PV. 默认 rancher 2 的存储类 ...

  9. kubernetes 1.17.2 结合 Ceph 13.2.8 实现 静态 动态存储 并附带一个实验

    关于部署和相关原理 请自行搜索 这里 给出我的操作记录和排查问题的思路 这一节对后面的学习有巨大的作用!!! [root@bs-k8s-ceph ~]# ceph -s cluster: -1a9a- ...

随机推荐

  1. Maven生命周期,插件,单元测试junit

    maven生命周期,maven命令,maven插件 maven生命周期:就是maven构建项目的过程,清理,编译,测试,报告,打包,安装,部署 maven命令:maven独立使用,通过命令,完成mav ...

  2. Simulink S-Function的使用(以串口接收MPU6050六轴陀螺仪参数为实例)

    S-Function 允许使用自定义C/C++函数作为传递函数,具有可移植性.也可以同样利用MATLAB函数进行相同的运算,看开发者熟悉程度而定. 项目流程 由系统串口接收数据包. 通过S-Funct ...

  3. 使用Xamarin开发移动应用示例——数独游戏(四)产生新游戏算法改进

    项目代码可以从Github下载:https://github.com/zhenl/ZL.Shudu .代码随项目进度更新. 前面我们使用一个数组保存预制的游戏,然后随机从中抽取一个游戏作为新游戏,如果 ...

  4. python23day

    内容回顾 面向对象 类:是具有相同属性和相似功能的一类事物 对象/实例:具体的,一类可以有多个对象 实例化 练习 # 定义一个圆形类,半径是这个圆的属性,实例化一个半径为5的圆形,一个半径为10的圆形 ...

  5. 【存】008 Linux 文件查找 find

    01 一起来认识 find! 在 Linux 系统,find 毫无疑问是最强的文件查找工具.find 一般会与其他命令结合,将查找到的结果作为参数传入到后置命令中,进行删除.统计.复制迁移等操作. 0 ...

  6. Integer缓冲区相关问题--valueOf()方法

    今天在学习过程中了解到一个现象,代码如下: Integer num1 = 100; Integer num2 = 100; System.out.println(num1==num2?true:fal ...

  7. CF1574F Occurrences

    考虑什么样的串是合法的. 直接考虑比较抽象,考虑具象化这个问题. 容易发现一个字符串的限制就相当于如果出现了其中一个字符 \(a_i = c\),那么 \(s\) 中 \(c\) 前 \(i - 1\ ...

  8. 判断js对象是否为空

    let _isEmptyObj = function(obj) { for(var key in obj) { return false; } return true; }

  9. Copy as Markdown - 将页面链接按照 Markdown 格式copy

    将页面文字和链接组成 Markdown 格式的网址 直接对页面链接右键使用时,无法获取链接标题,只能显示 No Title 所以需要: 选中「想作为标题的部分文字」, 然后去对「页面链接」右键-> ...

  10. SpringMVC主要组件

    1.DispatcherServlet:前端控制器,接收所有请求(如果配置/,则不包含jsp) 2.handlermapping:判断请求格式,判断希望具体要执行的那个方法 3.HanderAdapt ...