Rook入门:打造云原生Ceph存储的全面学习路径(上)

文章目录

  • 一.Rook简介
  • 二.Rook与Ceph架构
    • 2.1 Rook结构体系
    • 2.2 Rook包含组件
    • 2.3 Rook与kubernetes结合的架构图如下
    • 2.4 ceph特点
    • 2.5 ceph架构
    • 2.6 ceph组件
  • 三.Rook部署Ceph集群
    • 3.1 部署条件
    • 3.2 获取rook最新版本
    • 3.3 rook资源文件目录结构
    • 3.4 部署Rook/CRD/Ceph集群
    • 3.5 查看rook部署后pod状态
    • 3.6 部署toolbox客户端
    • 3.7 使用toolbox客户端查看ceph集群状态
  • 四.Rook部署云原生RBD块存储
    • 4.1部署storageclass资源
    • 4.2部署WordPress使用RBD
    • 4.3 WordPress访问
    • 4.4查看mysql和WordPress使用PVC
  • 五.Rook部署云原生RGW对象存储
    • 5.1 部署objectstore资源
    • 5.2 pod访问rgw服务
    • 5.3 创建rgw用户
    • 5.4 创建buckets桶

一.Rook简介

什么是Rook?
Rook 是一个开源的云原生存储编排器,为各种存储解决方案提供平台、框架和支持,以便与云原生环境进行原生集成。
Rook 将分布式存储系统转变为自管理、自扩展、自修复的存储服务。它使存储管理员的部署、引导、配置、配置、扩展、升级、迁移、灾难恢复、监控和资源管理等任务自动化。简而言之,Rook 就是一组 Kubernetes 的 Operator,它可以完全控制多种数据存储解决方案(例如 Ceph、EdgeFS、Minio、Cassandra)的部署,管理以及自动恢复。rook利用Kubernetes平台的强大功能,通过Kubernetes Operator为每个存储提供商提供服务。Rook目前支持Ceph、NFS、Minio Object Store和CockroachDB。
到目前为止,Rook 支持的最稳定的存储仍然是 Ceph,主要介绍如何使用 Rook 来创建维护 Ceph 集群,并作为 Kubernetes 的持久化存储。Rook 在 2018 年发布的 0.9 版本中,正式将 Ceph Operator 作为稳定支持的特性,迄今已经数年。使用 Rook 部署和管理生产级别的 Ceph 集群还是非常稳健的。

二.Rook与Ceph架构

2.1 Rook结构体系

在这里插入图片描述
Rook 的本意是为了降低部署管理 Ceph 集群的难度,Ceph 是一个高度可扩展的分布式存储解决方案,用于块存储、对象存储和共享文件系统。rook部署以及管理都在k8s中运行管理,rook用于编排ceph集群部署工具主要使用operator管理操作。而Rook存储运行则完全自动化。rook存储是通过第三方资源以kubernetes扩展形式运行。

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

2.2 Rook包含组件

  1. Rook Operator
    Rook Operater是rook的大脑,以deployment形式存在
  • 其利用k8s的controller-runtime框架实现了CRD,并进而接受k8s创建资源的请求并创建相关资源(集群,pool,块存储服务,文件存储服务等)。
  • Rook Operate监控存储守护进程,来确保存储集群的健康。
  • 监听Rook Discovers收集到的存储磁盘设备,并创建相应服务(ceph的话就是osd了)。
    注:可以通过修改operate.yaml中的replicas的副本数来保证Operate的高可用(默认为1)。
  1. Rook Discover
    Rook Discover是以daemonset形式部署在所有的存储机上的,其检测挂接到存储节点上的存储设备。把符合要求的存储设备记录下来,这样Rook Operate感知到以后就可以基于该存储设备创建相应服务了。

  2. Rook Agent
    Rook Agent是以daemonset形式部署在所有的存储机上的,其处理所有的存储操作,例如挂卸载存储卷以及格式化文件系统等。

2.3 Rook与kubernetes结合的架构图如下

在这里插入图片描述
Rook负责初始化和管理ceph集群
monitor集群
mgr集群
osd集群
pool管理
对象存储
文件存储
Rook负责提供访问存储所需的驱动
csi驱动
flex驱动(旧驱动,不建议使用)
rbd块存储
cephfs文件存储
S3/swift风格对象存储

2.4 ceph特点

高性能
抛弃了传统的集中式存储运输局寻址的方案,采用 CRUSH 算法,数据分布均衡,并行度高;
考虑了容灾域的隔离,能够实现各类负载的副本设置规则,例如跨机房、机架感知等;
能够支持上千个存储节点的规模,支持 TB 到 PB 级的数据;

高可用性
副本数可以灵活控制;
支持故障域分离,数据强一致性;
多种故障场景自动进行修复自愈;
没有单点故障,自动管理;

高可扩展性
去中心化;
扩展灵活;
随着节点增加而线性增长;

特性丰富
支持三种存储接口:块存储、文件存储、对象存储;
支持自定义接口,支持多种语言驱动;

2.5 ceph架构

支持三种接口

  • Object:有原生 API,而且也兼容 Swift 和 S3 的 API;
  • Block:支持精简配置、快照、克隆;
  • File:Posix 接口,支持快照
    在这里插入图片描述

2.6 ceph组件

Monitor:一个 Ceph 集群需要多个 Monitor 组成的小集群,它们通过 Paxos 同步数据,用来保存 OSD 的元数据。
OSD:全称 Object Storage Device,也就是负责响应客户端请求返回具体数据的进程,一个 Ceph 集群一般都有很多个 OSD。主要功能用于数据的存储,当直接使用硬盘作为存储目标时,一块硬盘称之为 OSD,当使用一个目录作为存储目标的时候,这个目录也被称为 OSD。
MDS:全称 Ceph Metadata Server,是 CephFS 服务依赖的元数据服务,对象存储和块设备存储不需要该服务。
Object:Ceph 最底层的存储单元是 Object 对象,一条数据、一个配置都是一个对象,每个 Object 包含 ID、元数据和原始数据。
Pool:Pool 是一个存储对象的逻辑分区,它通常规定了数据冗余的类型与副本数,默认为3副本。对于不同类型的存储,需要单独的 Pool,如 RBD。
PG:全称 Placement Grouops,是一个逻辑概念,一个 OSD 包含多个 PG。引入 PG 这一层其实是为了更好的分配数据和定位数据。每个 Pool 内包含很多个 PG,它是一个对象的集合,服务端数据均衡和恢复的最小单位就是 PG。
FileStore与BlueStore:FileStore 是老版本默认使用的后端存储引擎,如果使用 FileStore,建议使用 xfs 文件系统。BlueStore 是一个新的后端存储引擎,可以直接管理裸硬盘,抛弃了 ext4 与 xfs 等本地文件系统。可以直接对物理硬盘进行操作,同时效率也高出很多。
RADOS:全称 Reliable Autonomic Distributed Object Store,是 Ceph 集群的精华,用于实现数据分配、Failover 等集群操作。
Librados:Librados 是 Rados 提供库,因为 RADOS 是协议很难直接访问,因此上层的 RBD、RGW 和 CephFS 都是通过 librados 访问的,目前提供 PHP、Ruby、Java、Python、C 和 C++ 支持。
CRUSH:CRUSH 是 Ceph 使用的数据分布算法,类似一致性哈希,让数据分配到预期的地方。 RBD:全称 RADOS Block Device,是 Ceph 对外提供的块设备服务,如虚拟机硬盘,支持快照功能。
RGW:全称是 RADOS Gateway,是 Ceph 对外提供的对象存储服务,接口与 S3 和 Swift 兼容。
CephFS:全称 Ceph File System,是 Ceph 对外提供的文件系统服务。
注:ceph相关组件概念及原理架构请阅读官方文档https://docs.ceph.com/

三.Rook部署Ceph集群

3.1 部署条件

  • 已经部署好的kubernetes集群1.19版本或者更高
  • osd节点需要有未格式化文件系统磁盘,至少需要3块硬盘

3.2 获取rook最新版本

[root@node1 opt]# git clone https://github.com/rook/rook.git
正克隆到 'rook'...
remote: Enumerating objects: 107711, done.
remote: Counting objects: 100% (107711/107711), done.
remote: Compressing objects: 100% (31142/31142), done.
remote: Total 107711 (delta 74734), reused 107391 (delta 74569), pack-reused 0
接收对象中: 100% (107711/107711), 52.11 MiB | 4.26 MiB/s, done.
处理 delta 中: 100% (74734/74734), done.
[root@node1 opt]#
注:rook版本1.10

3.3 rook资源文件目录结构

[root@node1 examples]# pwd
/opt/rook/deploy/examples
[root@node1 examples]# tree
.
├── bucket-notification-endpoint.yaml
├── bucket-notification.yaml
├── bucket-topic.yaml
├── ceph-client.yaml
├── cluster-external-management.yaml
├── cluster-external.yaml
├── cluster-multus-test.yaml
├── cluster-on-local-pvc.yaml
├── cluster-on-pvc.yaml
├── cluster-stretched-aws.yaml
├── cluster-stretched.yaml
├── cluster-test.yaml
├── cluster.yaml
├── common-external.yaml
├── common-second-cluster.yaml
├── common.yaml
├── crds.yaml
├── create-external-cluster-resources.py
├── create-external-cluster-resources-tests.py
├── csi
│   ├── cephfs
│   │   ├── kube-registry.yaml
│   │   ├── pod-ephemeral.yaml
│   │   ├── pod.yaml
│   │   ├── pvc-clone.yaml
│   │   ├── pvc-restore.yaml
│   │   ├── pvc.yaml
│   │   ├── snapshotclass.yaml
│   │   ├── snapshot.yaml
│   │   ├── storageclass-ec.yaml
│   │   └── storageclass.yaml
│   ├── nfs
│   │   ├── pod.yaml
│   │   ├── pvc-clone.yaml
│   │   ├── pvc-restore.yaml
│   │   ├── pvc.yaml
│   │   ├── rbac.yaml
│   │   ├── snapshotclass.yaml
│   │   ├── snapshot.yaml
│   │   └── storageclass.yaml
│   └── rbd
│       ├── pod-ephemeral.yaml
│       ├── pod.yaml
│       ├── pvc-clone.yaml
│       ├── pvc-restore.yaml
│       ├── pvc.yaml
│       ├── snapshotclass.yaml
│       ├── snapshot.yaml
│       ├── storageclass-ec.yaml
│       ├── storageclass-test.yaml
│       └── storageclass.yaml
├── csi-ceph-conf-override.yaml
├── dashboard-external-https.yaml
├── dashboard-external-http.yaml
├── dashboard-ingress-https.yaml
├── dashboard-loadbalancer.yaml
├── direct-mount.yaml
├── filesystem-ec.yaml
├── filesystem-mirror.yaml
├── filesystem-test.yaml
├── filesystem.yaml
├── images.txt
├── import-external-cluster.sh
├── monitoring
│   ├── csi-metrics-service-monitor.yaml
│   ├── externalrules.yaml
│   ├── keda-rgw.yaml
│   ├── localrules.yaml
│   ├── prometheus-service.yaml
│   ├── prometheus.yaml
│   ├── rbac.yaml
│   └── service-monitor.yaml
├── mysql.yaml
├── nfs-load-balancer.yaml
├── nfs-test.yaml
├── nfs.yaml
├── object-bucket-claim-delete.yaml
├── object-bucket-claim-notification.yaml
├── object-bucket-claim-retain.yaml
├── object-ec.yaml
├── object-external.yaml
├── object-multisite-pull-realm-test.yaml
├── object-multisite-pull-realm.yaml
├── object-multisite-test.yaml
├── object-multisite.yaml
├── object-openshift.yaml
├── object-test.yaml
├── object-user.yaml
├── object.yaml
├── operator-openshift.yaml
├── operator.yaml
├── osd-env-override.yaml
├── osd-purge.yaml
├── pool-builtin-mgr.yaml
├── pool-ec.yaml
├── pool-mirrored.yaml
├── pool-test.yaml
├── pool.yaml
├── psp.yaml
├── radosnamespace.yaml
├── rbdmirror.yaml
├── README.md
├── rgw-external.yaml
├── sqlitevfs-client.yaml
├── storageclass-bucket-delete.yaml
├── storageclass-bucket-retain.yaml
├── subvolumegroup.yaml
├── toolbox-job.yaml
├── toolbox.yaml
├── volume-replication-class.yaml
├── volume-replication.yaml
└── wordpress.yaml5 directories, 107 files
[root@node1 examples]#

3.4 部署Rook/CRD/Ceph集群

[root@node1 examples]#
kubectl create -f crds.yaml -f common.yaml -f operator.yaml[root@node1 examples]#
kubectl create -f cluster.yaml

crds和common资源文件用于创建RBAC相关secrets权限、rook的crd组件,主要用于管理控制ceph集群

operator资源文件可以修改Rook CSI 镜像地址,默认无法拉取镜像地址。可以通过制作内部镜像仓库,便于快速拉取CSI所需镜像。

Cluster.yaml资源文件,可以设置是否使用所有节点和所有节点上硬盘,生产环境应禁止使用发现功能,应通过标签或或者指定节点。
useAllNodes:用于表示是否使用集群中的所有节点进行存储,如果在 nodes 字段下指定了各个节点,则必须将useAllNodes设置为 false;
useAllDevices:表示 OSD 是否自动使用节点上的所有设备,一般设置为 false,这样可控性较高
在这里插入图片描述
osd存储节点指定主机名和硬盘方式示例
在这里插入图片描述

3.5 查看rook部署后pod状态

[root@node1 examples]# kubectl get pod -n rook-ceph
NAME                                                     READY   STATUS      RESTARTS     AGE
csi-cephfsplugin-2bp2r                                   2/2     Running     0            23d
csi-cephfsplugin-6rf49                                   2/2     Running     0            23d
csi-cephfsplugin-dsjvj                                   2/2     Running     0            23d
csi-cephfsplugin-provisioner-776969d5f6-9px8h            5/5     Running     0            21d
csi-cephfsplugin-provisioner-776969d5f6-f9k9d            5/5     Running     0            21d
csi-rbdplugin-99759                                      2/2     Running     0            23d
csi-rbdplugin-hlspw                                      2/2     Running     0            23d
csi-rbdplugin-nsgcf                                      2/2     Running     0            23d
csi-rbdplugin-provisioner-755bcb589-8qgdk                5/5     Running     0            21d
csi-rbdplugin-provisioner-755bcb589-pf6jb                5/5     Running     0            21d
prometheus-rook-prometheus-0                             3/3     Running     1 (8d ago)   8d
rook-ceph-crashcollector-10.255.82.25-7db9f5db45-vfx5z   1/1     Running     0            20d
rook-ceph-crashcollector-10.255.82.26-84d7d574b4-dz88c   1/1     Running     0            23d
rook-ceph-crashcollector-10.255.82.27-5bc77c979-j9drq    1/1     Running     0            20d
rook-ceph-mds-myfs-a-74566d999-rrpx7                     1/1     Running     0            20d
rook-ceph-mds-myfs-b-6b4697cbf9-74wch                    1/1     Running     0            20d
rook-ceph-mgr-a-7944fddb75-p4b9b                         2/2     Running     0            8d
rook-ceph-mgr-b-7c9c8b8b6c-rkvgn                         2/2     Running     0            8d
rook-ceph-mon-b-866cff855b-vbbcp                         1/1     Running     0            23d
rook-ceph-mon-c-9fd694895-dzstp                          1/1     Running     0            23d
rook-ceph-mon-d-77bd9f8dd6-cwf42                         1/1     Running     0            17d
rook-ceph-operator-785cc8f794-z5zbc                      1/1     Running     0            23d
rook-ceph-osd-0-8f499f9d-ntk7q                           1/1     Running     0            23d
rook-ceph-osd-1-55f7dfcc4c-n9h45                         1/1     Running     0            23d
rook-ceph-osd-2-574dcf8848-sxrtl                         1/1     Running     0            23d
rook-ceph-osd-prepare-10.255.82.25-cdfch                 0/1     Completed   0            3h25m
rook-ceph-osd-prepare-10.255.82.26-gzktz                 0/1     Completed   0            3h25m
rook-ceph-osd-prepare-10.255.82.27-bpg6v                 0/1     Completed   0            3h25m
rook-ceph-rgw-my-store-a-7fb9d556dd-59kkw                1/1     Running     0            20d
rook-ceph-rgw-my-store-a-7fb9d556dd-6ks48                1/1     Running     0            20d
[root@node1 examples]#

3.6 部署toolbox客户端

[root@node1 examples]# kubectl apply -f toolbox.yaml[root@node1 ~]# kubectl get pod -n rook-ceph  | grep tool
rook-ceph-tools-7c8ddb978b-2dzrx                         1/1     Running     0            23d
[root@node1 ~]#
注:toolbox客户端用于操作ceph集群工具

3.7 使用toolbox客户端查看ceph集群状态

[root@node1 examples]# kubectl exec -it rook-ceph-tools-7c8ddb978b-2dzrx -n rook-ceph -- bash
bash-4.4$ ceph -scluster:id:     592a3aca-f4c8-4a58-8023-7b1023555b0bhealth: HEALTH_OKservices:mon: 3 daemons, quorum b,c,d (age 2w)mgr: a(active, since 8d), standbys: bmds: 1/1 daemons up, 1 hot standbyosd: 3 osds: 3 up (since 3w), 3 in (since 3w)rgw: 2 daemons active (2 hosts, 1 zones)data:volumes: 1/1 healthypools:   13 pools, 232 pgsobjects: 1.25k objects, 2.6 GiBusage:   11 GiB used, 139 GiB / 150 GiB availpgs:     232 active+cleanio:client:   852 B/s rd, 12 KiB/s wr, 1 op/s rd, 1 op/s wrbash-4.4$

四.Rook部署云原生RBD块存储

前面通过rook部署ceph集群运行在kubernetes上,ceph集群支持rbd块存储。使用rook部署rbd块服务与kubernetes容器对接。ceph与kubernetes对接会涉及到pool池、ceph认证信息,配置文件,CSI驱动部署等。storageclass创建过程涉及配置较多,而Rook则将这些配置过程简化,以云原生的方式实现对接,默认已继承好相关驱动。通过kubernetes创建storageclass即可对接使用。

Storageclass:管理员可以将存储资源定义某种级别,正如存储设置对于自身的配置描述。用户根据storageclass的描述就能够直观得各种存储资源的特性,根据应用对存储资源的需求去申请存储资源了。

4.1部署storageclass资源

apiVersion: ceph.rook.io/v1
kind: CephBlockPool
metadata:name: replicapoolnamespace: rook-ceph
spec:failureDomain: hostreplicated:size: 3
---
apiVersion: storage.k8s.io/v1
kind: StorageClass
metadata:name: rook-ceph-block
# Change "rook-ceph" provisioner prefix to match the operator namespace if needed
provisioner: rook-ceph.rbd.csi.ceph.com
parameters:# clusterID is the namespace where the rook cluster is runningclusterID: rook-ceph# Ceph pool into which the RBD image shall be createdpool: replicapool# (optional) mapOptions is a comma-separated list of map options.# For krbd options refer# https://docs.ceph.com/docs/master/man/8/rbd/#kernel-rbd-krbd-options# For nbd options refer# https://docs.ceph.com/docs/master/man/8/rbd-nbd/#options# mapOptions: lock_on_read,queue_depth=1024# (optional) unmapOptions is a comma-separated list of unmap options.# For krbd options refer# https://docs.ceph.com/docs/master/man/8/rbd/#kernel-rbd-krbd-options# For nbd options refer# https://docs.ceph.com/docs/master/man/8/rbd-nbd/#options# unmapOptions: force# RBD image format. Defaults to "2".imageFormat: "2"# RBD image features. Available for imageFormat: "2". CSI RBD currently supports only `layering` feature.imageFeatures: layering# The secrets contain Ceph admin credentials.csi.storage.k8s.io/provisioner-secret-name: rook-csi-rbd-provisionercsi.storage.k8s.io/provisioner-secret-namespace: rook-cephcsi.storage.k8s.io/controller-expand-secret-name: rook-csi-rbd-provisionercsi.storage.k8s.io/controller-expand-secret-namespace: rook-cephcsi.storage.k8s.io/node-stage-secret-name: rook-csi-rbd-nodecsi.storage.k8s.io/node-stage-secret-namespace: rook-ceph# Specify the filesystem type of the volume. If not specified, csi-provisioner# will set default as `ext4`. Note that `xfs` is not recommended due to potential deadlock# in hyperconverged settings where the volume is mounted on the same node as the osds.csi.storage.k8s.io/fstype: ext4# Delete the rbd volume when a PVC is deleted
reclaimPolicy: Delete# Optional, if you want to add dynamic resize for PVC.
# For now only ext3, ext4, xfs resize support provided, like in Kubernetes itself.
allowVolumeExpansion: true[root@node1 rbd]# kubectl create -f deploy/examples/csi/rbd/storageclass.yaml查看storageclass资源
[root@node1 rbd]# kubectl get storageclasses.storage.k8s.io | grep rook-ceph-block
rook-ceph-block               rook-ceph.rbd.csi.ceph.com      Delete          Immediate           true                   22d
[root@node1 rbd]#

4.2部署WordPress使用RBD

部署mysql和WordPress资源文件
# kubectl create -f mysql.yaml 
# kubectl create -f wordpress.yaml
注:资源文件在deploy/examples文件夹下查看mysql和WordPress pod状态
[root@node1 examples]# kubectl get pod | grep wordpress
wordpress-b98c66fff-nkctg                    1/1     Running     0            21d
wordpress-mysql-79966d6c5b-4svxd             1/1     Running     0            21d
[root@node1 examples]#

4.3 WordPress访问

Wordpress svc更改为NodePort形式对外暴露服务访问
[root@node1 examples]# kubectl get svc | grep wordpress
wordpress                                                NodePort    10.68.18.125    <none>        80:31372/TCP                                                                              21d
wordpress-mysql                                          ClusterIP   None            <none>        3306/TCP                                                                                  21d
[root@node1 examples]#WordPress访问地址 http://node_ip:31372

在这里插入图片描述
注:第一次访问需要进行完善信息,完善后跟进自己使用情况进行后台修改或者默认直接使用即可

4.4查看mysql和WordPress使用PVC

[root@node1 examples]# kubectl get pvc | grep pv-claim
mysql-pv-claim         Bound    pvc-449482a9-3d01-4697-ba82-49fe44e911cc   4Gi        RWO            rook-ceph-block               21d
wp-pv-claim            Bound    pvc-a8d5053e-0d13-44a6-8ea4-1d9ac3221d34   2Gi        RWO            rook-ceph-block               21d
[root@node1 examples]#

这里以WordPress使用PVC示例,可以看到是存储类资源名称是rook-ceph-block。

[root@node1 examples]# kubectl describe pvc wp-pv-claim
Name:          wp-pv-claim
Namespace:     default
StorageClass:  rook-ceph-block
Status:        Bound
Volume:        pvc-a8d5053e-0d13-44a6-8ea4-1d9ac3221d34
Labels:        app=wordpress
Annotations:   pv.kubernetes.io/bind-completed: yespv.kubernetes.io/bound-by-controller: yesvolume.beta.kubernetes.io/storage-provisioner: rook-ceph.rbd.csi.ceph.comvolume.kubernetes.io/storage-provisioner: rook-ceph.rbd.csi.ceph.com
Finalizers:    [kubernetes.io/pvc-protection]
Capacity:      2Gi
Access Modes:  RWO
VolumeMode:    Filesystem
Used By:       wordpress-b98c66fff-nkctg
Events:        <none>
[root@node1 examples]#

五.Rook部署云原生RGW对象存储

rook能够在kubernetes中部署对象存储提供rgw服务。

5.1 部署objectstore资源

创建object资源文件
# kubectl create -f object.yaml查看rgw pod状况
# kubectl -n rook-ceph get pod -l app=rook-ceph-rgw查看rgw svc状况
[root@node1 examples]# kubectl -n rook-ceph get svc -l app=rook-ceph-rgw
NAME                              TYPE        CLUSTER-IP     EXTERNAL-IP   PORT(S)        AGE
rook-ceph-rgw-my-store            ClusterIP   10.68.116.53   <none>        80/TCP         19d

5.2 pod访问rgw服务

root@csicephfs-demo-pod:/# curl 10.68.116.53
<?xml version="1.0" encoding="UTF-8"?><ListAllMyBucketsResult xmlns="http://s3.amazonaws.com/doc/2006-03-01/"><Owner><ID>anonymous</ID><DisplayName></DisplayName></Owner><Buckets></Buckets></ListAllMyBucketsResult>root@csicephfs-demo-pod:/#
root@csicephfs-demo-pod:/#

5.3 创建rgw用户

[root@node1 examples]# cat object-user.yaml
#################################################################################################################
# Create an object store user for access to the s3 endpoint.
#  kubectl create -f object-user.yaml
#################################################################################################################apiVersion: ceph.rook.io/v1
kind: CephObjectStoreUser
metadata:name: my-usernamespace: rook-ceph # namespace:cluster
spec:store: my-storedisplayName: "my display name"# Quotas set on the user# quotas:# maxBuckets: 100# maxSize: 10G# maxObjects: 10000# Additional permissions given to the user# capabilities:# user: "*"# bucket: "*"# metadata: "*"# usage: "*"# zone: "*"[root@node1 examples]# kubectl create -f object-user.yaml

5.4 创建buckets桶

在这里插入图片描述
注:使用dashboard web界面管理操作查看即可,rgw对象存储操作使用参考文档:https://docs.ceph.com/en/quincy/radosgw/index.html

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

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

相关文章

【Gitlab】CICD使用minio作为分布式缓存

1、安装minio 下载适合自己系统版本的安装文件https://dl.min.io/server/minio/release/windows-amd64/ yum install xxx.rpm 2、配置/etc/profile export MINIO_ACCESS_KEYroot [ui登录账号] export MINIO_SECRET_KEYminioDev001 [ui登录密码] export MINIO_OPTS"…

奇数求和ᅟᅠ

奇数求和 C语言代码C 代码Java代码Python代码 &#x1f490;The Begin&#x1f490;点点关注&#xff0c;收藏不迷路&#x1f490; 计算非负整数 m 到 n&#xff08;包括m 和 n &#xff09;之间的所有奇数的和&#xff0c;其中&#xff0c;m 不大于 n&#xff0c;且n 不大于30…

Django 视图层

from django.shortcuts import render, HttpResponse, redirectfrom django.http import JsonResponse1. render: 渲染模板 def index(request):print(reverse(index))return render(request, "index.html")return render(request, index.html, context{name: lisi})…

手机实时提取SIM卡打电话的信令声音-蓝牙电话如何适配eSIM卡的手机

手机实时提取SIM卡打电话的信令声音 --蓝牙电话如何适配eSIM卡的手机 一、前言 蓝牙电话的海外战略中&#xff0c;由于海外智能手机市场中政策的差异性&#xff0c;对内置eSIM卡的手机进行支持是非常合理的需求。Android系列手机中&#xff0c;无论是更换通信运营商&#xf…

python3 + selenium 中用PIL获取全屏幕截图

获取当前屏幕截图非常简单&#xff0c;需要import PIL.ImageGrab。调用grab函数即可得到Image对象&#xff0c;显示图片如图所示。 高版本的PIL中的grab函数还提供有一些参数。要查看当前PIL包的版本&#xff0c;可以import然后查看其__version__属性。 如果是较高版本的PIL…

SpringBoot3 + Vue3 由浅入深的交互 基础交互教学2

目录 一、这篇文章是基础交互教学系列的续作 二、发送请求时&#xff0c;携带发送的数据json格式的参数&#xff1a;data 三、携带token请求头&#xff0c;进行JWT校验 四、实现throw抛出异常&#xff0c;并交互显示在前端的界面 一、这篇文章是基础交互教学系列的续作 大…

UIE与ERNIE-Layout:智能视频问答任务初探

内容来自百度飞桨ai社区UIE与ERNIE-Layout&#xff1a;智能视频问答任务初探&#xff1a; 如有侵权&#xff0c;请联系删除 1 环境准备 In [2] # 安装依赖库 !pip install paddlenlp --upgrade !pip install paddleocr --upgrade !pip install paddlespeech --upgrade In …

Tomcat新手成长之路:安装部署优化全解析(下)

接上篇《Tomcat新手成长之路&#xff1a;安装部署优化全解析&#xff08;上&#xff09;》: link 文章目录 7.应用部署7.1.上下文7.2.启动时进行部署7.3.动态应用部署 8.Tomcat 类加载机制8.1.简介8.2.类加载器定义8.3.XML解析器和 Java 9.JMS监控9.1.简介9.2.启用 JMX 远程监…

vue项目部署到github pages后页面显示不出来??

问题&#xff1a; 当我们在命令行执行 npm run build 后&#xff0c;项目的目录下会生成一个 dist 文件夹&#xff0c;它里面又包含一个 static 文件夹和一个 index.html 文件&#xff0c;这是 webpack 最终打包好的文件 项目上传到仓库后发现页面为空&#xff0c;找不到文件路…

用 React 编写一个笔记应用程序

这篇文章会教大家用 React 编写一个笔记应用程序。用户可以创建、编辑、和切换 Markdown 笔记。 1. nanoid nanoid 是一个轻量级和安全的唯一字符串ID生成器&#xff0c;常用于JavaScript环境中生成随机、唯一的字符串ID&#xff0c;如数据库主键、会话ID、文件名等场景。 …

“指标管理系统”是什么?企业如何搭建指标管理系统?

在当今数字化时代&#xff0c;数据已成为企业决策的重要依据。然而&#xff0c;海量数据中如何筛选出关键指标&#xff0c;并对其进行有效管理&#xff0c;成为了众多企业面临的难题。为此&#xff0c;指标管理系统应运而生&#xff0c;它旨在帮助企业规范化定义、统一管理和高…

数学建模——Topsis法

数模评价类&#xff08;2&#xff09;——Topsis法 概述 Topsis:Technique for Order Preference by Similarity to Ideal Solution 也称优劣解距离法&#xff0c;该方法的基本思想是&#xff0c;通过计算每个备选方案与理想解和负理想解之间的距离&#xff0c;从而评估每个…

LuaForWindows_v5.1.5-52.exe

Releases rjpcomputing/luaforwindows GitHub #lua C:\Users\Administrator\Desktop\test.lua print("Hello lua&#xff01;") print("ZengWenFeng 13805029595")

HTTP协议详解:从HTTP/1.0到HTTP/3的演变与优化

深入浅出&#xff1a;从头到尾全面解析HTTP协议 一、HTTP协议概述 1.1 HTTP协议简介 HTTP&#xff08;HyperText Transfer Protocol&#xff0c;超文本传输协议&#xff09;是互联网上应用最广泛的通信协议之一。它用于客户端与服务器之间的数据传输&#xff0c;尤其是在Web…

AI高中数学教学视频生成技术:利用通义千问、MathGPT、视频多模态大模型,语音大模型,将4个模型融合 ,生成高中数学教学视频,并给出实施方案。

大家好&#xff0c;我是微学AI&#xff0c;今天给大家介绍一下AI高中数学教学视频生成技术&#xff1a;利用通义千问、MathGPT、视频多模态大模型&#xff0c;语音大模型&#xff0c;将4个模型融合 &#xff0c;生成高中数学教学视频&#xff0c;并给出实施方案。本文利用专家模…

AOSP的同步问题

repo sync同步时提示出错: error: .repo/manifests/: contains uncommitted changesRepo command failed due to the following UpdateManifestError errors: contains uncommitted changes解决方法&#xff1a; 1、cd 进入.repo/manifests cd .repo/manifests2、执行如下三…

Makefile 入门指南:构建自动化编译流程

个人主页&#xff1a;chian-ocean 文章专栏 前言 make 和 Makefile 是编译和构建软件项目时非常常用的工具和文件&#xff0c;它们通常配合使用来自动化项目的编译过程。 make 定义&#xff1a;make 是一个构建自动化工具&#xff0c;用于根据项目文件的依赖关系自动完成编译…

FCBP 认证考试要点摘要

理论知识 数据处理与分析&#xff1a;包括数据的收集、清洗、转换、存储等基础操作&#xff0c;以及数据分析方法&#xff0c;如描述性统计分析、相关性分析、数据挖掘算法等的理解和应用 。数据可视化&#xff1a;涉及图表类型的选择与应用&#xff0c;如柱状图、折线图、饼图…

类和对象下

目录 1. 赋值运算符重载 1.1 运算符重载 1.2 赋值运算符重载 1.3 日期类的实现 1.4 const修饰成员变量 2. 构造函数之初始化列表 3. 类型转换 3. static成员 4. 友元 5. 内部类 6. 日期差 1. 赋值运算符重载 1.1 运算符重载 当运算符被用于类类型的对象时&#x…

oracle RAC各版本集群总结和常用命令汇总

oracle RAC学习 RAC介绍 RAC&#xff1a;高可用集群&#xff0c;负载均衡集群&#xff0c;高性能计算集群 RAC是⼀种⾼可⽤&#xff0c;⾼性能&#xff0c;负载均衡的share-everything的集群 8i:内存融合雏形 内存融合雏形&#xff08;Oracle Parallel Server&#xff09;…