Kubernetes集群部署Rook Ceph实现文件存储,对象存储,块存储

Kubernetes集群部署Rook Ceph部署Ceph集群

1. Rook Ceph介绍

Rook Ceph是Rook项目中的一个存储方案,专门针对Ceph存储系统进行了优化和封装。Ceph是一个高度可扩展的分布式存储系统,提供了对象存储、块存储和文件系统的功能,广泛应用于提供大规模存储解决方案。将Ceph与Rook结合,目的是利用Rook的云原生存储编排能力来简化Ceph在Kubernetes环境中的部署和管理。
Rook Ceph官网
Rook Ceph项目代码仓库

Rook Ceph的主要特点包括:

  1. 云原生集成:Rook Ceph紧密整合了Kubernetes的特性,使Ceph存储系统能够以Kubernetes原生的方式进行部署和管理。这包括使用Kubernetes自定义资源定义(CRDs)来管理Ceph集群的配置和状态。

  2. 自动化管理:Rook自动化了Ceph的部署、配置、扩展、升级和故障处理。这意味着Rook会帮助自动管理Ceph集群的复杂性,用户可以更专注于使用存储而不是管理存储。

  3. 灵活的存储选项:通过Rook Ceph,用户可以在Kubernetes上部署和使用Ceph的对象存储、块存储和文件系统,满足不同类型的存储需求。

  4. 扩展性和高可用性:Ceph本身就是为了提供高度的扩展性和可靠性设计的。结合Rook,它可以在Kubernetes环境中自动扩展和恢复,提供持续可用的存储服务。

  5. 简化操作:Rook Ceph提供了简化的安装过程,通过几个简单的命令就可以在Kubernetes集群上部署一个完整的Ceph存储系统。

  6. 社区支持:Rook是一个活跃的开源项目,拥有广泛的社区支持,Rook Ceph作为其中的一部分,也继承了这种活跃和开放的社区特性。

使用Rook Ceph,用户可以更容易地在Kubernetes上部署和管理Ceph集群,享受到Ceph强大的存储功能,同时又不需要深入了解和管理其复杂的配置和维护任务。这使得Rook Ceph成为希望在Kubernetes环境中使用高可靠、可扩展存储解决方案的用户的一个理想选择。

2. 对比一下几种主流的Ceph安装方式

Rook Ceph, ceph-deploy, ceph-ansible, 和 cephadm 是部署和管理Ceph集群的不同工具和方法,每种方式都有其特点和适用场景。

2.1 Rook Ceph

特点:

  • 云原生集成:特别为Kubernetes环境设计,利用Rook自动化管理Ceph集群。
  • 操作简便:通过Kubernetes CRDs进行集群管理,用户无需直接与Ceph集群交互。
  • 自动化管理:自动处理部署、扩展、升级和故障恢复等。
  • 官方支持:虽然不是Ceph官方直接支持的工具,但作为CNCF项目,在云原生生态中得到广泛认可。

适用场景:

  • Kubernetes环境下,希望通过声明式API管理Ceph存储。
  • 寻求简化Ceph集群管理和自动化操作的环境。
2.2 ceph-deploy

特点:

  • 简单直接:命令行工具,适合快速部署小规模Ceph集群。
  • 易于上手:对于新手友好,不需要复杂的配置。
  • 官方支持:Ceph早期版本中推荐的部署工具和集群管理工具。它能够简化部署过程,自动配置和安装Ceph节点,并提供一些管理操作的便捷功能。当前ceph-deploy已经不再被维护,而且它还没有在比Ceph 14 (Nautilus)更新的Ceph 版本上进行测试,不支持 RHEL8、CentOS 8或更新版本的操作系统。

适用场景:

  • 小型或测试环境,快速部署Ceph集群。
  • 不需要复杂或高度自定义的部署。
2.3 ceph-ansible

特点:

  • 灵活性高:使用Ansible Playbooks,提供了更丰富的配置选项和自定义能力。
  • 大规模部署:适合大规模和生产环境的Ceph部署。
  • 社区支持:Ansible社区提供丰富的模块和角色支持。

适用场景:

  • 需要定制化配置和管理较大规模Ceph集群的环境。
  • 已经使用Ansible作为自动化工具的团队。
2.4 cephadm

特点:

  • 官方工具:Ceph官方推荐的部署工具,从Ceph 15 Octopus版本开始引入。
  • 容器化部署:使用容器化方式部署Ceph服务。
  • 简化操作:提供了简化的命令行接口,易于维护和升级。

适用场景:

  • 寻求官方支持和维护的部署方法。
  • 希望通过容器化技术部署和管理Ceph集群。
  • 需要易于升级和维护的环境。

3. 基本要求介绍

本文档使用的Rook是v1.13.1,Ceph(Reef) 18.2.1。(最新版本,暂时不推荐生产环境使用)

当前Rook支持Kubernetes v1.22或更高版本。

Rook发布包支持的架构包括amd64/x86_64和arm64。

在部署Rook之前,要检查Kubernetes集群是否准备好使用Rook,请查看以下先决条件:

要配置Ceph存储集群,至少需要以下其中一种本地存储:

  • 原始设备(Raw devices)(无分区或格式化文件系统)
  • 原始分区(Raw partitions)(无格式化文件系统)
  • LVM逻辑卷(无格式化文件系统)
  • 以块模式(block mode)在存储类(storage class)中提供的持久卷

Kubernetes集群信息:

机器名k8s版本系统版本系统内核cpu架构
yiqi-rancher-master1v1.26.8CentOS Linux release 7.95.4.242-1.el7x86_64
yiqi-rancher-master2v1.26.8CentOS Linux release 7.95.4.242-1.el7x86_64
yiqi-rancher-master3v1.26.8CentOS Linux release 7.95.4.242-1.el7x86_64
yiqi-rancher-worker1v1.26.8CentOS Linux release 7.95.4.242-1.el7x86_64
yiqi-rancher-worker2v1.26.8CentOS Linux release 7.95.4.242-1.el7x86_64
yiqi-rancher-worker3v1.26.8CentOS Linux release 7.95.4.242-1.el7x86_64
yiqi-rancher-worker4v1.26.8CentOS Linux release 7.95.4.242-1.el7x86_64
yiqi-rancher-worker5v1.26.8CentOS Linux release 7.95.4.242-1.el7x86_64

每个Work节点都有vdb,vdc,vdd三个原始设备(Raw devices):

lsblk -f
NAME            FSTYPE      LABEL UUID                                   MOUNTPOINT
vdd                                                                      
vdb                                                                      
vdc                                                                      
vda                                                                      
├─vda2          LVM2_member       rgicKt-MO6U-rHDf-W7YC-VbCS-Rcl8-XU1vQE 
│ ├─centos-swap swap              3f2904bc-792e-4606-b0af-51bcaee5779c   
│ └─centos-root xfs               0dabeafe-43fe-4f98-9846-eeb2b66dadaa   /
└─vda1          xfs               fecac8e2-cde0-4e2a-86ac-5135aaba25b3   /boot

安装git:

yum install git -y

下载rook ceph Git项目仓库(用于安装):

git clone https://github.com/rook/rook.git

切换标签带V1.13.1版本:

git checkout v1.13.1

4. 安装Operator

安装Operator基本不需要过多定制化修改,以下的安装方式可以直接用于生产环境。

cd rook/deploy/examples/kubectl create -f crds.yaml -f common.yaml -f operator.yaml

完成后检查Pod的运行状态

kubectl -n rook-ceph get pod
NAME                                  READY   STATUS    RESTARTS   AGE
rook-ceph-operator-7c9659dcab-fh3ui   1/1     Running   0          42s

5. 创建ceph集群

kubectl create -f cluster.yaml# cluster.yaml文件中有很多定制化的参数,上述部署方式使用的是默认配置。
# 比如可以用于设置mon,mgr节点的数量
# 可以用于是否安装图形化界面,设置监控组件,设置污点和容忍等

检查Pod运行状态,osd pod的数量取决于集群中的节点数量和配置的设备数量。对于上述默认的cluster.yaml,将为每个节点上找到的每个可用设备创建一个OSD。

kubectl get po -n rook-ceph -o wide
NAME                                                              READY   STATUS      RESTARTS        AGE     IP              NODE                   NOMINATED NODE   READINESS GATES
csi-cephfsplugin-bf5vp                                            2/2     Running     1 (4m ago)      4m34s   9.30.247.102    yiqi-rancher-worker5   <none>           <none>
csi-cephfsplugin-j9k5q                                            2/2     Running     1 (4m ago)      4m34s   9.30.211.215    yiqi-rancher-worker1   <none>           <none>
csi-cephfsplugin-k6c75                                            2/2     Running     1 (4m ago)      4m34s   9.30.161.76     yiqi-rancher-worker3   <none>           <none>
csi-cephfsplugin-nxmdh                                            2/2     Running     0               4m34s   9.30.246.169    yiqi-rancher-worker4   <none>           <none>
csi-cephfsplugin-provisioner-56956bc974-8vvfk                     5/5     Running     0               4m34s   10.42.53.134    yiqi-rancher-worker4   <none>           <none>
csi-cephfsplugin-provisioner-56956bc974-l8f5p                     5/5     Running     1 (3m59s ago)   4m34s   10.42.240.6     yiqi-rancher-worker5   <none>           <none>
csi-cephfsplugin-tv5kw                                            2/2     Running     1 (4m ago)      4m34s   9.30.160.224    yiqi-rancher-worker2   <none>           <none>
csi-rbdplugin-fnqst                                               2/2     Running     1 (4m ago)      4m34s   9.30.160.224    yiqi-rancher-worker2   <none>           <none>
csi-rbdplugin-mvvrf                                               2/2     Running     0               4m34s   9.30.246.169    yiqi-rancher-worker4   <none>           <none>
csi-rbdplugin-pjltf                                               2/2     Running     1 (4m ago)      4m34s   9.30.247.102    yiqi-rancher-worker5   <none>           <none>
csi-rbdplugin-provisioner-cc97cf4b9-k5frj                         5/5     Running     1 (4m ago)      4m34s   10.42.65.6      yiqi-rancher-worker3   <none>           <none>
csi-rbdplugin-provisioner-cc97cf4b9-zq2r4                         5/5     Running     2 (3m56s ago)   4m34s   10.42.208.133   yiqi-rancher-worker1   <none>           <none>
csi-rbdplugin-qf4ll                                               2/2     Running     1 (4m ago)      4m34s   9.30.211.215    yiqi-rancher-worker1   <none>           <none>
csi-rbdplugin-xr82v                                               2/2     Running     1 (4m ago)      4m34s   9.30.161.76     yiqi-rancher-worker3   <none>           <none>
rook-ceph-crashcollector-yiqi-rancher-worker1.fyre.ibm.comwsxkm   1/1     Running     0               3m4s    10.42.208.138   yiqi-rancher-worker1   <none>           <none>
rook-ceph-crashcollector-yiqi-rancher-worker2.fyre.ibm.comwvzxh   1/1     Running     0               3m25s   10.42.128.21    yiqi-rancher-worker2   <none>           <none>
rook-ceph-crashcollector-yiqi-rancher-worker3.fyre.ibm.comc5cdq   1/1     Running     0               3m50s   10.42.65.8      yiqi-rancher-worker3   <none>           <none>
rook-ceph-crashcollector-yiqi-rancher-worker4.fyre.ibm.comjrv75   1/1     Running     0               3m21s   10.42.53.139    yiqi-rancher-worker4   <none>           <none>
rook-ceph-crashcollector-yiqi-rancher-worker5.fyre.ibm.comqbf4n   1/1     Running     0               3m22s   10.42.240.13    yiqi-rancher-worker5   <none>           <none>
rook-ceph-exporter-yiqi-rancher-worker1.fyre.ibm.com-54bddqm5mb   1/1     Running     0               3m4s    10.42.208.136   yiqi-rancher-worker1   <none>           <none>
rook-ceph-exporter-yiqi-rancher-worker2.fyre.ibm.com-767bc8lkfq   1/1     Running     0               3m21s   10.42.128.22    yiqi-rancher-worker2   <none>           <none>
rook-ceph-exporter-yiqi-rancher-worker3.fyre.ibm.com-6fdfdkwlth   1/1     Running     0               3m50s   10.42.65.9      yiqi-rancher-worker3   <none>           <none>
rook-ceph-exporter-yiqi-rancher-worker4.fyre.ibm.com-5ddb5zk9xg   1/1     Running     0               3m21s   10.42.53.140    yiqi-rancher-worker4   <none>           <none>
rook-ceph-exporter-yiqi-rancher-worker5.fyre.ibm.com-5d4b7gn2ch   1/1     Running     0               3m18s   10.42.240.15    yiqi-rancher-worker5   <none>           <none>
rook-ceph-mgr-a-85945fd8d4-m2sbg                                  3/3     Running     0               4m6s    10.42.128.14    yiqi-rancher-worker2   <none>           <none>
rook-ceph-mgr-b-7f95644479-6xqhr                                  3/3     Running     0               4m6s    10.42.240.7     yiqi-rancher-worker5   <none>           <none>
rook-ceph-mon-a-596c6cbfc5-8nxdj                                  2/2     Running     0               4m57s   10.42.240.5     yiqi-rancher-worker5   <none>           <none>
rook-ceph-mon-b-6f9c6f46c9-g69w8                                  2/2     Running     0               4m33s   10.42.128.13    yiqi-rancher-worker2   <none>           <none>
rook-ceph-mon-c-5c889df47f-488cm                                  2/2     Running     0               4m20s   10.42.65.7      yiqi-rancher-worker3   <none>           <none>
rook-ceph-operator-6c9669dcbd-k5qmz                               1/1     Running     0               25m     10.42.65.4      yiqi-rancher-worker3   <none>           <none>
rook-ceph-osd-0-6846c64444-jv7k4                                  2/2     Running     0               3m25s   10.42.128.18    yiqi-rancher-worker2   <none>           <none>
rook-ceph-osd-1-7dbcd4bdc-w42tw                                   2/2     Running     0               3m24s   10.42.65.11     yiqi-rancher-worker3   <none>           <none>
rook-ceph-osd-10-69cd6c5b7-l7s7b                                  2/2     Running     0               3m22s   10.42.240.14    yiqi-rancher-worker5   <none>           <none>
rook-ceph-osd-11-646d597b-m6ptn                                   2/2     Running     0               3m21s   10.42.53.138    yiqi-rancher-worker4   <none>           <none>
rook-ceph-osd-12-7f4458595b-cdpsr                                 2/2     Running     0               3m4s    10.42.208.139   yiqi-rancher-worker1   <none>           <none>
rook-ceph-osd-13-88b4c74f7-xl6nj                                  2/2     Running     0               3m4s    10.42.208.135   yiqi-rancher-worker1   <none>           <none>
rook-ceph-osd-14-89c7fddd-cgdvw                                   2/2     Running     0               3m4s    10.42.208.137   yiqi-rancher-worker1   <none>           <none>
rook-ceph-osd-2-659fbf966f-2m8zc                                  2/2     Running     0               3m22s   10.42.240.11    yiqi-rancher-worker5   <none>           <none>
rook-ceph-osd-3-5d5cbcd9f5-w8qv9                                  2/2     Running     0               3m22s   10.42.53.137    yiqi-rancher-worker4   <none>           <none>
rook-ceph-osd-4-9f5cb68fb-pp2g6                                   2/2     Running     0               3m25s   10.42.128.19    yiqi-rancher-worker2   <none>           <none>
rook-ceph-osd-5-59d79d7679-j2h9r                                  2/2     Running     0               3m24s   10.42.65.13     yiqi-rancher-worker3   <none>           <none>
rook-ceph-osd-6-5799c4b877-gzgdn                                  2/2     Running     0               3m22s   10.42.240.12    yiqi-rancher-worker5   <none>           <none>
rook-ceph-osd-7-6897c7445c-kctmf                                  2/2     Running     0               3m22s   10.42.53.136    yiqi-rancher-worker4   <none>           <none>
rook-ceph-osd-8-796c48c59f-2j5fl                                  2/2     Running     0               3m25s   10.42.128.20    yiqi-rancher-worker2   <none>           <none>
rook-ceph-osd-9-fff5df8c7-sf7j7                                   2/2     Running     0               3m24s   10.42.65.12     yiqi-rancher-worker3   <none>           <none>
rook-ceph-osd-prepare-22ca3ed4ba60ff130925b1da1d599303-ndtrc      0/1     Completed   0               2m30s   10.42.65.14     yiqi-rancher-worker3   <none>           <none>
rook-ceph-osd-prepare-49eb3309ba3821b41e4320db43c5f1f1-ktxh7      0/1     Completed   0               2m37s   10.42.208.140   yiqi-rancher-worker1   <none>           <none>
rook-ceph-osd-prepare-4d2d5eab315cc094c1f72a4485297888-xg24j      0/1     Completed   0               2m27s   10.42.53.141    yiqi-rancher-worker4   <none>           <none>
rook-ceph-osd-prepare-8545b28a9ad22acf59fd2168d50c1a9c-mlj2l      0/1     Completed   0               2m24s   10.42.240.16    yiqi-rancher-worker5   <none>           <none>
rook-ceph-osd-prepare-b4a0cdf88b658e7c811ab8a320cbd626-f59kr      0/1     Completed   0               2m33s   10.42.128.24    yiqi-rancher-worker2   <none>           <none>

创建过程如果遇到问题可以查看rook-ceph-operator的Pod的日志。

6. 验证ceph集群

为了验证集群处于健康状态, 需要使用Rook工具箱

kubectl create -f toolbox.yaml检查Pod状态
kubectl -n rook-ceph rollout status deploy/rook-ceph-tools通过命令行进入Pod
kubectl -n rook-ceph exec -it deploy/rook-ceph-tools -- bash#可以通过如下ceph命令查看集群的状态,例如
ceph status
ceph osd status
ceph df
rados df# ceph status显示的当前集群状态
bash-4.4$ ceph statuscluster:id: 	b6c450b1-4406-44f9-8ebd-e0277c8d8f7ehealth: HEALTH_WARN1 daemons have recently crashedservices:mon: 3 daemons, quorum a,b,c (age 20m)mgr: a(active, since 18m), standbys: bosd: 15 osds: 15 up (since 18m), 15 in (since 19m)data:pools:   1 pools, 1 pgsobjects: 2 objects, 449 KiBusage:   399 MiB used, 2.9 TiB / 2.9 TiB availpgs: 	1 active+clean

7. 使用存储

Ceph提供三种类型的存储接口: 块存储(Block)、共享文件系统(Shared Filesystem)、对象存储(Object)。

下面演示对于使用Rook部署和管理的Ceph集群,如何使用这三种存储。

通过Rook使用Ceph提供的三种存储类型以及它们的用途如下:

  • 块存储(Block)适用于为单个 Pod 提供读写一致性(RWO)的存储
  • CephFS 共享文件系统(Shared Filesystem)适用于多个Pod之间共享读写(RWX)的存储
  • 对象存储(Object)提供了一个可通过内部或外部的Kubernetes集群的S3端点访问的存储
7.1 使用块存储(Block)

块存储允许单个Pod挂载存储。本指南介绍了如何使用Rook启用的持久卷,在Kubernetes上创建一个简单的多层Web应用程序。

1.创建Storage Class
在Rook可以提供存储之前,需要创建StorageClass和CephBlockPool CR。这将使Kubernetes在提供持久卷时与Rook进行交互操作。

这个示例需要每个节点至少有1个 OSD,并且每个 OSD 需要位于3个不同的节点上。每个OSD必须位于不同的节点上,因为 failureDomain 被设置为 host,并且 replicated.size 被设置为 3。这里多说一句,本次案例中使用的Ceph数据高可用方式为多副本。Ceph中还有一种方式是纠错编码Erasure Coding。可以使用“deploy/examples/csi/rbd/storageclass-ec.yaml”这个文件进行部署。

# 在当前路径 /root/rook/deploy/examples
kubectl apply -f ./csi/rbd/storageclass.yaml 
cephblockpool.ceph.rook.io/replicapool created
storageclass.storage.k8s.io/rook-ceph-block created

这个storageclass.yaml文件中包含了StorageClass rook-ceph-block和CephBlockPool replicapool的定义。

如果你在一个名为"rook-ceph"以外的命名空间中部署了Rook Operator,请将该文件中的provisioner中的前缀更改为与你使用的命名空间匹配。例如,如果Rook Operator在命名空间"my-namespace"中运行,则provisioner的值应为my-namespace.rbd.csi.ceph.com。

根据Kubernetes的规定,在使用"Retain"回收策略时,任何由PersistentVolume支持的Ceph RBD 镜像将在PersistentVolume被删除后继续存在。这些Ceph RBD镜像需要使用rbd rm命令手动清理。

上面在创建名称为replicapool的CephBlockPool资源时,会自动在Ceph集群中创建名称为replicapool的存储池。这个操作是由Ceph Operator完成的,如果查看发现没有创建这个存储池,可以通过查看Ceph Operator的日志进行问题定位。

以下命令在ToolBox容器中运行的输出说明已经创建了存储池replicapool。

bash-4.4$ ceph osd lspools
1 .mgr
2 replicapool

通过以下命令可以检查Storage Class的状态(nfs-client是我这个集群之前安装的):

kubectl get sc
NAME                   PROVISIONER                                     RECLAIMPOLICY   VOLUMEBINDINGMODE   ALLOWVOLUMEEXPANSION   AGE
nfs-client (default)   cluster.local/nfs-subdir-external-provisioner   Delete          Immediate           true                   6d23h
rook-ceph-block        rook-ceph.rbd.csi.ceph.com                      Delete          Immediate           true                   7m20s

我们创建了一个示例应用程序,使用经由Rook提供的块存储,其中包括经由Rook提供的的WordPress和MySQL应用程序。这些应用程序都将使用Rook提供的块存储卷(block volumes)。

# 在当前路径 /root/rook/deploy/examples
kubectl create -f mysql.yaml
kubectl create -f wordpress.yaml

查看PVC

kubectl get pvc
NAME             STATUS   VOLUME                                     CAPACITY   ACCESS MODES   STORAGECLASS      AGE
mysql-pv-claim   Bound    pvc-3db54f6f-b4b2-4c72-8134-81841ce99178   20Gi       RWO            rook-ceph-block   3m20s
wp-pv-claim      Bound    pvc-5134d1a7-23c5-4bfe-be02-6d204121a127   20Gi       RWO            rook-ceph-block   3m19skubectl get pv
NAME                                       CAPACITY   ACCESS MODES   RECLAIM POLICY   STATUS   CLAIM                    STORAGECLASS      REASON   AGE
pvc-3db54f6f-b4b2-4c72-8134-81841ce99178   20Gi       RWO            Delete           Bound    default/mysql-pv-claim   rook-ceph-block            3m19s
pvc-5134d1a7-23c5-4bfe-be02-6d204121a127   20Gi       RWO            Delete           Bound    default/wp-pv-claim      rook-ceph-block            3m19s

回到ToolBox容器中检查rbd储存池使用状态

bash-4.4$ rbd ls -p replicapool
csi-vol-ac06bcbf-5c33-42ea-b41f-e46a4a4d9c77
csi-vol-be9cd19a-4fff-42b3-85f3-9ea021110da0
7.2 使用文件存储(CephFS)

CephFS文件系统存储(也称为共享文件系统)可以从多个Pod中以读/写权限挂载。这对于可以使用共享文件系统进行集群化的应用程序可能非常有用。

CephFS CSI驱动程序使用配额来强制执行所请求的PVC大小。只有较新的Linux内核支持CephFS配额,至少是4.17版本的内核。

Ceph从自Pacific版本(Ceph 16)开始,支持多个文件系统。

1.创建CephFilesystem
通过在CephFilesystem CRD中指定元数据池(metadata pool)、数据池(data pools)和元数据服务(metadata server)的所需设置来创建文件系统。在这里,我们创建的是3个副本的元数据池和3个副本的单个数据池。有关更多选项,请参阅创建共享文件系统的文档

# 在当前路径 /root/rook/deploy/examples
kubectl create -f filesystem.yaml

查看Pod状态

kubectl -n rook-ceph get pod -l app=rook-ceph-mds
NAME                                	READY   STATUS	RESTARTS   AGE
rook-ceph-mds-myfs-a-795d4c688f-nj92g   2/2 	Running   0      	104s
rook-ceph-mds-myfs-b-558bb747c7-kpwqd   2/2 	Running   0      	103s

要查看文件系统的详细状态,进入Rook toolbox中,使用ceph status查看, 确认输出中包含MDS服务的状态。在这个示例中,有一个处于活动状态的MDS实例,并且还有一个处于备用MDS实例,以防发生故障切换。

bash-4.4$ ceph -scluster:id: 	b6c450b1-4406-44f9-8ebd-e0277c8d8f7ehealth: HEALTH_WARN1 daemons have recently crashedservices:mon: 3 daemons, quorum a,b,c (age 86m)mgr: a(active, since 84m), standbys: bmds: 1/1 daemons up, 1 hot standby  #可以看到相比之前的状态mds服务已经运行起来了osd: 15 osds: 15 up (since 84m), 15 in (since 85m)data:volumes: 1/1 healthypools:   4 pools, 81 pgsobjects: 29 objects, 466 KiBusage:   886 MiB used, 2.9 TiB / 2.9 TiB availpgs: 	81 active+cleanio:client:   853 B/s rd, 1 op/s rd, 0 op/s wr# 使用ceph osd lspools查看,确认创建了myfs-metadata和myfs-replicated的存储池。 
bash-4.4$ ceph osd lspools
1 .mgr
2 replicapool
3 myfs-metadata 
4 myfs-replicated #

2.创建StorageClass

# 在当前路径 /root/rook/deploy/examples
kubectl create -f ./csi/cephfs/storageclass.yaml#检查StorageClass的状态,可以看到rook-cephfs已经建立起来了。
kubectl get sc
NAME                   PROVISIONER                                     RECLAIMPOLICY   VOLUMEBINDINGMODE   ALLOWVOLUMEEXPANSION   AGE
nfs-client (default)   cluster.local/nfs-subdir-external-provisioner   Delete          Immediate           true                   7d
rook-ceph-block        rook-ceph.rbd.csi.ceph.com                      Delete          Immediate           true                   48m
rook-cephfs            rook-ceph.cephfs.csi.ceph.com                   Delete          Immediate           true                   19s

创建一个测试用的Deployment和PVC挂载

vi testcephps.yamlapiVersion: v1
kind: PersistentVolumeClaim
metadata:name: busybox-data-pvc
spec:accessModes:- ReadWriteManyresources:requests:storage: 2GistorageClassName: rook-cephfs
---
apiVersion: apps/v1
kind: Deployment
metadata:name: busybox
spec:replicas: 2selector:matchLabels:app: busyboxtemplate:metadata:labels:app: busyboxspec:containers:- name: busybox-containerimage: busybox:stable-glibccommand: ["sleep", "3600"]volumeMounts:- name: data-volumemountPath: /datavolumes:- name: data-volumepersistentVolumeClaim:claimName: busybox-data-pvc#创建相关的资源
kubectl apply -f testcephfs.yaml#检查资源的创建情况
kubectl get pvc
NAME           	STATUS   VOLUME                                 	CAPACITY   ACCESS MODES   STORAGECLASS   AGE
busybox-data-pvc   Bound	pvc-647ecb9f-1a18-484a-9536-ac26cb0a8a03   2Gi    	RWX        	rook-cephfs	9skubectl get po
NAME                                           	READY   STATUS	RESTARTS   AGE
busybox-86c4ffc4b6-q6lzn                       	1/1 	Running   0      	41s
busybox-86c4ffc4b6-ttxgz                       	1/1 	Running   0      	41s
7.3 使用对象存储(Object)

对象存储为应用程序提供了一个使用S3 API存储和获取数据的接口。

1.配置一个Object Store
Rook具有在Kubernetes中部署对象存储或连接到外部RGW服务的能力。通常情况下,对象存储将由Rook在本地进行配置。或者,如果你有一个现有的带有Rados Gateways的Ceph集群,请参阅external section文档以从Rook中使用它。

以下示例将创建一个CephObjectStore,该对象存储在集群中启动RGW服务,并提供S3 API。

注意: 这个示例至少需要3个bluestore OSD,每个OSD位于不同的节点上。OSDs必须位于不同的节点上,因为failureDomain设置为host,并且erasureCoded块设置要求至少有3个不同的OSD(2个dataChunks + 1个codingChunks)。

# 在当前路径 /root/rook/deploy/examples
kubectl apply -f object.yaml
cephobjectstore.ceph.rook.io/my-store created

创建CephObjectStore后,Rook Ceph Operator将创建所有必要的池和其他资源以启动服务。这可能需要几分钟来完成。

要确认对象存储已配置完成,请等待RGW pod启动:

kubectl -n rook-ceph get pod -l app=rook-ceph-rgw
NAME                                        READY   STATUS    RESTARTS   AGE
rook-ceph-rgw-my-store-a-5c9fcc5674-j85lv   2/2     Running   0          109s

通过Toolbox程序检查Ceph集群的状态:

bash-4.4$ ceph osd lspools
1 .mgr
2 replicapool
3 myfs-metadata
4 myfs-replicated
5 my-store.rgw.buckets.non-ec
6 my-store.rgw.buckets.index
7 my-store.rgw.log
8 my-store.rgw.control
9 my-store.rgw.otp
10 .rgw.root
11 my-store.rgw.meta
12 my-store.rgw.buckets.data

Rook Ceph Operator会在Ceph集群中创建名称为my-store.rgw.*的多个存储池。

再查看一下ceph集群的状态:

bash-4.4$ ceph -scluster:id:     b6c450b1-4406-44f9-8ebd-e0277c8d8f7ehealth: HEALTH_WARN1 daemons have recently crashedservices:mon: 3 daemons, quorum a,b,c (age 5h)mgr: a(active, since 5h), standbys: bmds: 1/1 daemons up, 1 hot standbyosd: 15 osds: 15 up (since 5h), 15 in (since 5h)rgw: 1 daemon active (1 hosts, 1 zones)data:volumes: 1/1 healthypools:   12 pools, 169 pgsobjects: 245 objects, 753 KiBusage:   1.2 GiB used, 2.9 TiB / 2.9 TiB availpgs:     169 active+cleanio:client:   1.3 KiB/s rd, 170 B/s wr, 2 op/s rd, 0 op/s wr

2.创建StorageClass

# 在当前路径 /root/rook/deploy/examples
kubectl create -f storageclass-bucket-delete.yamlstorageclass.storage.k8s.io/rook-ceph-delete-bucket created

检查已创建的StorageClass

kubectl get sc
NAME                      PROVISIONER                                     RECLAIMPOLICY   VOLUMEBINDINGMODE   ALLOWVOLUMEEXPANSION   AGE
nfs-client (default)      cluster.local/nfs-subdir-external-provisioner   Delete          Immediate           true                   7d4h
rook-ceph-block           rook-ceph.rbd.csi.ceph.com                      Delete          Immediate           true                   5h26m
rook-ceph-delete-bucket   rook-ceph.ceph.rook.io/bucket                   Delete          Immediate           false                  45s
rook-cephfs               rook-ceph.cephfs.csi.ceph.com                   Delete          Immediate           true                   4h38m

根据这个存储类,现在可以通过创建对象存储桶声明Object Bucket Claim(OBC)来请求一个存储桶。当创建OBC时,Rook bucket provisioner将创建一个新的存储桶。请注意,OBC引用了上面创建的存储类。将以下内容保存为object-bucket-claim-delete.yaml(示例命名为 delete,因为使用了Delete的回收策略):

# 在当前路径 /root/rook/deploy/examples
kubectl create -f object-bucket-claim-delete.yaml

OBC创建成功后,Rook Ceph Operator将创建存储桶,并生成其他文件以实现对存储桶的访问。将以与OBC相同的名称和在相同的命名空间中创建一个密钥和ConfigMap。密钥包含应用程序Pod用于访问存储桶的凭据。ConfigMap包含存储桶端点信息,也会被Pod使用。有关CephObjectBucketClaims的更多详细信息,请参阅对象存储桶声明文档

#查看相关的资源Configmap
kubectl get cm
NAME                 DATA   AGE
ceph-delete-bucket   5      10m#查看Configmap的具体信息
kubectl get cm ceph-delete-bucket -o yaml
apiVersion: v1
data:BUCKET_HOST: rook-ceph-rgw-my-store.rook-ceph.svcBUCKET_NAME: ceph-bkt-2e22eaf9-a577-45b2-94ed-e96c04670637BUCKET_PORT: "80"BUCKET_REGION: ""BUCKET_SUBREGION: ""
kind: ConfigMap
metadata:creationTimestamp: "2023-12-30T09:42:56Z"finalizers:- objectbucket.io/finalizerlabels:bucket-provisioner: rook-ceph.ceph.rook.io-bucketname: ceph-delete-bucketnamespace: defaultownerReferences:- apiVersion: objectbucket.io/v1alpha1blockOwnerDeletion: truecontroller: truekind: ObjectBucketClaimname: ceph-delete-bucketuid: ae670efd-0db9-4019-b0c3-6fa66aafcefbresourceVersion: "32176508"uid: 820df543-bc37-41ba-b777-425093cf20d8#查看Secret的具体信息,可以看到存储桶的访问ID和密码
kubectl get secret ceph-delete-bucket -o yaml
apiVersion: v1
data:AWS_ACCESS_KEY_ID: RjFEWlhFTTQxQThBUENGOFcxNzY=AWS_SECRET_ACCESS_KEY: VGxhZTlRcFJESWU2U3N3OW91MXYyWGxVUFFCUEhuallhVWVCTGZreA==

3.使用s5cmd工具访问对象存储
因为这里的k8s集群使用的calico网络,可以直接在Node节点上使用svc ip,这里简单起见直接在K8S集群的控制节点上安装s5cmd命令行工具。

wget https://github.com/peak/s5cmd/releases/download/v2.2.2/s5cmd_2.2.2_Linux-64bit.tar.gztar -xvf s5cmd_2.2.2_Linux-64bit.tar.gz
CHANGELOG.md
LICENSE
README.md
s5cmdsudo mv s5cmd /usr/local/bin/#最后通过 --help 既可以查看帮助命令
s5cmd --help
NAME:s5cmd - Blazing fast S3 and local filesystem execution toolUSAGE:s5cmd [global options] command [command options] [arguments...]

接下来配置s5cmd工具访问对象存储凭据:

export AWS_ACCESS_KEY_ID=$(kubectl -n default get secret ceph-delete-bucket -o jsonpath='{.data.AWS_ACCESS_KEY_ID}' | base64 --decode)
export AWS_SECRET_ACCESS_KEY=$(kubectl -n default get secret ceph-delete-bucket -o jsonpath='{.data.AWS_SECRET_ACCESS_KEY}' | base64 --decode)mkdir ~/.aws
cat > ~/.aws/credentials << EOF
[default]
aws_access_key_id = ${AWS_ACCESS_KEY_ID}
aws_secret_access_key = ${AWS_SECRET_ACCESS_KEY}
EOF

查看rook-ceph-rgw-my-store这个Service的IP:

k get svc rook-ceph-rgw-my-store  -n rook-ceph
NAME                     TYPE        CLUSTER-IP     EXTERNAL-IP   PORT(S)   AGE
rook-ceph-rgw-my-store   ClusterIP   10.43.65.160   <none>        80/TCP    103m

使用s5cmd访问存储桶,列出当前凭据可以访问的所有桶:

s5cmd --endpoint-url  http://10.43.65.160 ls
2023/12/30 09:42:56  s3://ceph-bkt-2e22eaf9-a577-45b2-94ed-e96c04670637

注这里使用Service IP 访问rook-ceph-rgw-my-store只是为了测试。生产环境中如果从K8S集群内访问的话,使用Service的DNS名称,如果从集群外部访问推荐使用Ingress将其暴露到集群外部。

8. 访问Ceph Dashboard

通过使用Ceph Dashboard可以查看集群的状态。使用Rook部署的Ceph集群已经默认启用了Ceph Dashboard。

创建一个拥有NodePort对外暴露方式的Service

kubectl apply -f dashboard-external-https.yaml
service/rook-ceph-mgr-dashboard-external-https created#可以看到当前NodePort对外的端口为57482
kg svc -n rook-ceph
NAME                                     TYPE        CLUSTER-IP      EXTERNAL-IP   PORT(S)             AGE
rook-ceph-exporter                       ClusterIP   10.43.179.89    <none>        9926/TCP            7h38m
rook-ceph-mgr                            ClusterIP   10.43.11.237    <none>        9283/TCP            7h38m
rook-ceph-mgr-dashboard                  ClusterIP   10.43.234.132   <none>        8443/TCP            7h38m
rook-ceph-mgr-dashboard-external-https   NodePort    10.43.207.88    <none>        8443:57482/TCP      11m
rook-ceph-mon-a                          ClusterIP   10.43.205.40    <none>        6789/TCP,3300/TCP   7h39m
rook-ceph-mon-b                          ClusterIP   10.43.180.30    <none>        6789/TCP,3300/TCP   7h39m
rook-ceph-mon-c                          ClusterIP   10.43.166.149   <none>        6789/TCP,3300/TCP   7h38m
rook-ceph-rgw-my-store                   ClusterIP   10.43.65.160    <none>        80/TCP              148m

Ceph Dashboard admin用户的命名可以通过下面的命令查看:

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

登录图形化界面
在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/587710.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

FTP简介FTP服务器的搭建【虚拟机版】以及计算机端口的介绍

目录 一. FTP简介 二. FTP服务器的搭建【虚拟机Windows2012版】 1. 启用防火墙 2. 打开服务器管理器➡工具➡计算机管理 3. 选择本地用户与组➡新建组 4. 给组命名&#xff0c;输入描述&#xff0c;点击创建 5. 新建用户&#xff0c;设置用户名称&#xff0c;添加描述&a…

传感器原理与应用复习--光电式与半导体式传感器

文章目录 上一篇光电传感器光电器件 光纤传感器光纤传感器的工作原理及组成 半导体传感器下一篇 上一篇 传感器原理与应用复习–磁电式与霍尔传感器 光电传感器 光电器件 每个光子的能量为 E h v E hv Ehv h为普朗克常数 6.626 ∗ 1 0 − 34 ( J / s ) 6.626 * 10^{-…

【ARMv8M Cortex-M33 系列 2.3 -- SEGGER JFlash 烧写命令介绍】

请阅读【嵌入式开发学习必备专栏 之Cortex-M33 专栏】 文章目录 SEGGER JFlash 烧写命令介绍JFlash 配置文件 固件烧写地址介绍确定烧写地址 SEGGER JFlash 烧写命令介绍 本文以介绍烧写 Renesas RA4M2 为例&#xff0c;对 JFlash 进行简单介绍。它是 ARM Cortex-M33 微控制器…

华为ensp网络设计期末测试题-复盘

网络拓扑图 地址分配表 vlan端口分配表 需求 The device is running!<Huawei>sys Enter system view, return user view with CtrlZ. [Huawei]un in en Info: Information center is disabled. [Huawei]sys S1 [S1]vlan 99 [S1-vlan99]vlan 100 [S1-vlan100]des IT [S1-…

2023 全球 AI 大事件盘点

本文来自微信公众号硅星人

跨境电商的语言障碍:翻译工具的必要性

随着全球化的加速和电子商务的普及&#xff0c;跨境电商逐渐成为企业拓展市场的重要渠道。然而&#xff0c;跨境电商在带来无限商机的同时&#xff0c;也面临着语言障碍的挑战。由于不同国家和地区的语言和文化差异&#xff0c;跨境电商在产品描述、用户沟通、广告宣传等方面需…

年度总结|存储随笔2023年度最受欢迎文章榜单TOP15-part1

原创 古猫先生 存储随笔 2023-12-31 08:31 发表于上海 回首2023 2-8月份有近半年时间基本处于断更状态 好在8月份后小编没有松懈 &#xff08;虽然2023年度总结&#xff0c;更像是近4个月总结&#xff09; 本年度顺利加V啦&#xff01; 感谢各位粉丝朋友的一路支持与陪伴 …

2024主流的免费电脑数据恢复软件EasyRecovery

EasyRecovery绿色版是一款非常专业的电脑数据恢复工具。它可以全面恢复删除丢失数据&#xff0c;能对电脑误删文件恢复、格式化硬盘数据恢复、手机U盘数据恢复等&#xff0c;能恢复包括文档、表格、图片、音视频等各种文件&#xff0c;此版本经过处理&#xff0c;可永久免费使用…

AcWing算法提高课-2.2.3抓住那头牛

算法提高课整理 CSDN个人主页&#xff1a;更好的阅读体验 本文同步发表于 CSDN | 洛谷 | AcWing | 个人博客 原题链接 题目描述 农夫知道一头牛的位置&#xff0c;想要抓住它。 农夫和牛都位于数轴上&#xff0c;农夫起始位于点 n n n&#xff0c;牛位于点 k k k。 农夫…

golang第五卷---包以及常用内置包归纳

包以及常用内置包归纳 包的概念math包time包sync包 Go 语言官方的包文档网站&#xff1a;包文档 包的概念 Go语言是使用包来组织源代码的&#xff0c;包&#xff08;package&#xff09;是多个 Go 源码的集合&#xff0c;是一种高级的代码复用方案。 任何源代码文件必须属于某…

听GPT 讲Rust源代码--src/tools(37)

File: rust/src/tools/clippy/clippy_lints/src/explicit_write.rs 在Rust源代码中&#xff0c;explicit_write.rs这个文件是Clippy的一个lint插件&#xff0c;其作用是检查代码中的write!、writeln!宏使用时的不当或繁琐的情况&#xff0c;并给出相关的警告或建议。 具体来说&…

可视化设计器介绍

1 、可视化设计器分为&#xff1a; 目录树&#xff1a;包含“页面、逻辑、数据、流程”四种可视化设计模块的切换&#xff0c;及其下设计内容管理与树形展示应用信息与操作区域&#xff1a;支持应用的“预览、发布、自定义主题样式”等操作标签页&#xff1a;支持各个编辑页面…

java方法(method)概述,计算机中的执行原理及案例

引言&#xff1a; 学习了方法&#xff08;method&#xff09;&#xff0c;整理下心得 概述&#xff1a; 1&#xff0c;什么是方法&#xff08;method&#xff09;: 方法是一种语法结构&#xff0c;它可以把一段代码封装成一个功能&#xff0c;以便重复利用 2&#xff0c;使用…

Vue实现导出Excel表格,提示“文件已损坏,无法打开”的解决方法

一、vue实现导出excel 1、前端实现 xlsx是一个用于读取、解析和写入Excel文件的JavaScript库。它提供了一系列的API来处理Excel文件。使用该库&#xff0c;你可以将数据转换为Excel文件并下载到本地。这种方法适用于在前端直接生成Excel文件的场景。 安装xlsx依赖 npm inst…

【计算机网络实验】educoder实验八 IPV6网络及其路由 头歌

第一关 IPV6网络基础 //千万不要破坏文档原有结构与内容&#xff01;&#xff01;&#xff01; //以下均为判断题&#xff0c;F&#xff1a;表示错误&#xff0c;T&#xff1a;表示正确 //答案必须写在相应行末尾括号内&#xff0c;F与T二选一&#xff0c;大写 // 1、ipv6协议…

洛谷:集合与差分

1.学籍管理(map&#xff09; #include<iostream> #include<map> #include<string> using namespace std; map<string,int>a; int n; string name; int op,score; int main() {cin>>n;for(int i1;i<n;i){cin>>op;if(op!4)cin>>na…

Redis内存使用率高,内存不足问题排查和解决

问题现象 表面现象是系统登录突然失效&#xff0c;排查原因发现&#xff0c;使用redis查询用户信息异常&#xff0c;从而定位到redis问题 if (PassWord.equals(dbPassWord)) {map.put("rtn", 1);map.put("value", validUser);session.setAttribute("…

玩转MYSQL|详细分析mysql-MGR集群搭建

目录 1、简介 2、环境准备 2.1 数据库服务器规划 2.2 安装mysql5.7.20 2.3 设置hostname和ip映射 3、创建复制环境 3.1 服务器host68.cn 3.1.1 配置/etc/my.cnf 3.1.2 服务器host68.cn上建立复制账号&#xff1a; 3.1.3 在mysql服务器host68.cn上安装group replicatio…

redis客户端

3、Redis客户端 3.1 Redis自带的客户端 带密码进入客户端 [rootqianfeng01 redis-4.0.14]# src/redis-cli -h 192.168.10.101 -p 6379 -a root Warning: Using a password with -a option on the command line interface may not be safe. 192.168.10.101:6379> keys * (…

js遍历后端返回的集合将条件相同的放入同一个数组内

项目场景&#xff1a; echarts折线图需要根据条件动态展示多条不同曲线 解决方案&#xff1a; 后端直接将使用sql将数据查询出来返回即可,因为我这里不是Java使用的C#不是很熟练后台不好写逻辑,所以在前端js完成的 代码如下: function createline(villagename, buildingname…