当前位置: 首页 > news >正文

从零到一:基于Rook构建云原生Ceph存储的全面指南(上)

文章目录

  • 一.Rook简介
  • 二.Rook与Ceph架构
    • 2.1 Rook结构体系
    • 2.2 Rook包含组件
      • 1)Rook Operator
      • 2)Rook Discover
      • 3)Rook Agent
    • 2.3 Rook与kubernetes结合的架构图如下
    • 2.4 ceph特点
    • 2.5 ceph架构
    • 2.6 ceph组件
  • 三.Rook部署Ceph集群
    • 3.1 部署条件
    • 3.3 获取rook最新版本
    • 3.4 rook资源文件目录结构
    • 3.5 部署Rook/CRD/Ceph集群
    • 3.6 查看rook部署后pod状态
    • 3.7 部署toolbox客户端
    • 3.8 使用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)。

2)Rook Discover

Rook Discover是以daemonset形式部署在所有的存储机上的,其检测挂接到存储节点上的存储设备。把符合要求的存储设备记录下来,这样Rook Operate感知到以后就可以基于该存储设备创建相应服务了。

3)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.3 获取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.4 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.5 部署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.6 查看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.7 部署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.8 使用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

相关文章:

从零到一:基于Rook构建云原生Ceph存储的全面指南(上)

文章目录 一.Rook简介二.Rook与Ceph架构2.1 Rook结构体系2.2 Rook包含组件1&#xff09;Rook Operator2&#xff09;Rook Discover3&#xff09;Rook Agent 2.3 Rook与kubernetes结合的架构图如下2.4 ceph特点2.5 ceph架构2.6 ceph组件 三.Rook部署Ceph集群3.1 部署条件3.3 获取…...

嵌入式经常用到串口,如何判断串口数据接收完成?

说起通信&#xff0c;首先想到的肯定是串口&#xff0c;日常中232和485的使用比比皆是&#xff0c;数据的发送、接收是串口通信最基础的内容。这篇文章主要讨论串口接收数据的断帧操作。 空闲中断断帧 一些mcu&#xff08;如&#xff1a;stm32f103&#xff09;在出厂时就已经在…...

OpenGL-基础知识(更新中)

本文基于The Cherno在Youtube上的OpenGL系列视频总结出的笔记&#xff0c;等这个系列视频学习完后&#xff0c;将更加系统详细的学习《计算机图形学编程&#xff08;使用OpenGL和C 第二版&#xff09;》这本书。个人认为看cherno的视频上手速度更快&#xff0c;而且他对基本概念…...

【多模态大模型】系列2:Transformer Encoder-Decoder——BLIP、CoCa、BEITv3

目录 1 BLIP2 CoCa3 BEITv3 1 BLIP BLIP: Bootstrapping Language-Image Pre-training for Unified Vision-Language Understanding and Generation BLIP是 ALBEF 原班人马做的&#xff0c;基本可以看做吸收了 VLMo 思想的 ALBEF。训练的 loss 和技巧都与 ALBEF一致&#xff…...

基于CanMV IDE 开发软件对K210图像识别模块的开发

简介 CanMV IDE 是一款专为 K210 芯片设计的图形识别 Python 软件&#xff0c;它提供了强大的功能&#xff0c;帮助开发者轻松实现基于 K210 芯片的图形识别应用。无论你是初学者还是经验丰富的开发者&#xff0c;CanMV IDE 都能为你提供便捷的开发环境和丰富的资源。 硬件资…...

如何准备软考高级系统分析师考试

以下是针对软考高级系统分析师考试的详细备考方案&#xff0c;结合学习周期、阶段任务、习题选择和通过概率分析&#xff0c;帮助考生高效备考。 一、备考周期建议&#xff08;4-6个月&#xff09; 建议分为 基础阶段&#xff08;2个月&#xff09;→ 强化阶段&#xff08;2个…...

解析RK3588无线边缘盒子为工业自动化边缘推理带来的 AI 突破

在工业自动化领域&#xff0c;边缘推理的高效性和准确性对于提升生产效率和质量至关重要。RK3588 凭借强大的 AI 算力&#xff0c;为工业自动化边缘推理带来了显著的赋能效果。 RK3588 拥有出色的多核架构和高性能的 GPU &#xff0c;能够快速处理大量的数据。在工业生产线上&…...

初一说明文:我的护眼灯

本文转自&#xff1a;AI范文助手网 原文链接&#xff1a;https://www.aazhushou.com/czzw/5023.html 自爱迪生发明了灯以来&#xff0c;各种各样的灯相继问世了&#xff0c;给人一种新景象&#xff0c;其中护眼灯也问世了。 我有一盏台灯叫麦迪格护眼灯。那天我和母亲去商场&…...

归并排序(C# C++)

目录 1 归并排序的基本概念 2 算法步骤 2-1 分解阶段 2-2 合并阶段 3 代码实现 3-1 C#代码示例&#xff08;该代码在unity环境下&#xff09; 3-2 C代码示例 1 归并排序的基本概念 归并排序&#xff08;Merge Sort&#xff09;是一种经典的分治算法&#xff0c;由约翰…...

【Linux】Ubuntu Linux 系统 ——PHP开发环境

ℹ️大家好&#xff0c;我是练小杰&#xff0c;元宵节到了&#xff0c;在此祝大家元宵节快乐&#x1f606; 新的一年里&#xff0c;愿你步步高升&#xff0c;事事如意&#xff0c;心想事成&#xff01;! 本文是关于Linux 操作系统中部署PHP开发环境这部分基础内容&#xff0c;后…...

TDengine 性能测试工具 taosBenchmark

简介工具获取运行 无参数模式命令行模式配置文件模式 命令行参数配置文件参数 通用配置参数写入配置参数 数据库相关超级表相关标签列与数据列写入行为相关 查询配置参数 执行指定查询语句查询超级表 订阅配置参数数据类型对照表 配置文件示例 写入 JSON 示例查询 JSON 示例订阅…...

校园网绕过认证上网很简单

校园网绕过认证就是不用通过校园WiFi的WEB页面登录&#xff0c;这个WEB登录页面就是认证页面. 所谓绕过认证&#xff0c;就是不通过校园WiFi WEB登录页面直接上网&#xff0c;校园WiFi没有密码&#xff0c;直接就能连接上&#xff0c;我们连上这个WiFi的时候&#xff0c;它会给…...

C++ Primer 迭代语句

欢迎阅读我的 【CPrimer】专栏 专栏简介&#xff1a;本专栏主要面向C初学者&#xff0c;解释C的一些基本概念和基础语言特性&#xff0c;涉及C标准库的用法&#xff0c;面向对象特性&#xff0c;泛型特性高级用法。通过使用标准库中定义的抽象设施&#xff0c;使你更加适应高级…...

World of Warcraft [CLASSIC][Grandel] FOR THE HORDE

《World of Warcraft [CLASSIC][80猎人][Grandel]维克尼拉斯大型纪录片2025年元宵节击杀联盟主城4BOSS[为了部落&#xff01;]》 World of Warcraft [CLASSIC][80猎人][Grandel]维克尼拉斯大型纪录片2025年元宵节击杀联盟主城4BOSS[为了部落&#xff01;]_魔兽...

【ESP32指向鼠标】——icm20948与esp32通信

【ESP32指向鼠标】——icm20948与esp32通信 ICM-20948介绍 ICM-20948 是一款由 InvenSense&#xff08;现为 TDK 的一部分&#xff09;生产的 9 轴传感器集成电路。它结合了 陀螺仪、加速度计和磁力计。 内置了 DMP&#xff08;Digital Motion Processor&#xff09;即负责执…...

随手记:小程序setData 数据传输长度为 XXXKB,存在有性能问题!小程序长列表性能优化,uni.createIntersectionObserver

在一些小程序列表的页面&#xff0c;总是会看到小程序控制台的黄色警告&#xff1a; 这是由于data 数据过大&#xff0c;导致的问题 方法&#xff1a; 1.避免setData的数据过大&#xff0c;小于1024kb。 2.避免调用频繁&#xff0c;保证数据实时性。 3.避免未绑定在WXML的…...

双ESP8266-01S通讯UDP配置

第一台ESP8266(发送命令需要勾---发送新行) ATCWMODE3 ATCWSAP_DEF"CAR_wifi_Master","12345678",5,3 //设置本地wifi名称以及密码 ATCIPSTA_DEF"192.168.4.1" //设置本地IP ATCIFSR …...

记忆模块概述

文章目录 记忆模块概述记忆组件的定义记忆组件、链组件和Agent组件的关系设置第一个记忆组件内置记忆组件自定义记忆组件 本文将LangChain框架内所有与记忆功能有关的组件统一称为“记忆模块”。简而言之&#xff0c;记忆模块是一个集合体&#xff0c;由多个不同的记忆组件构成…...

计算机网络结课设计:通过思科Cisco进行中小型校园网搭建

上学期计算机网络课程的结课设计是使用思科模拟器搭建一个中小型校园网&#xff0c;当时花了几天时间查阅相关博客总算是做出来了&#xff0c;在验收后一直没管&#xff0c;在寒假想起来了简单分享一下&#xff0c;希望可以给有需求的小伙伴一些帮助 目录 一、设计要求 二、…...

算法之 数论

文章目录 质数判断质数3115.质数的最大距离 质数筛选204.计数质数2761.和等于目标值的质数对 2521.数组乘积中的不同质因数数目 质数 质数的定义&#xff1a;除了本身和1&#xff0c;不能被其他小于它的数整除&#xff0c;最小的质数是 2 求解质数的几种方法 法1&#xff0c;根…...

【论文阅读】Revisiting the Assumption of Latent Separability for Backdoor Defenses

https://github.com/Unispac/Circumventing-Backdoor-Defenses 摘要和介绍 在各种后门毒化攻击中&#xff0c;来自目标类别的毒化样本和干净样本通常在潜在空间中形成两个分离的簇。 这种潜在的分离性非常普遍&#xff0c;甚至在防御研究中成为了一种默认假设&#xff0c;我…...

【深入探讨 ResNet:解决深度神经网络训练问题的革命性架构】

深入探讨 ResNet&#xff1a;解决深度神经网络训练问题的革命性架构 随着深度学习的快速发展&#xff0c;卷积神经网络&#xff08;CNN&#xff09;已经成为图像识别、目标检测等计算机视觉任务的主力军。然而&#xff0c;随着网络层数的增加&#xff0c;训练深层网络变得愈加…...

【C】链表算法题7 -- 环形链表||

leetcode链接https://leetcode.cn/problems/linked-list-cycle-ii/description/ 问题描述 给定一个链表的头节点 head &#xff0c;返回链表开始入环的第一个节点。 如果链表无环&#xff0c;则返回 null。如果链表中有某个节点&#xff0c;可以通过连续跟踪 next 指针再次到…...

设备智能化无线通信,ESP32-C2物联网方案,小尺寸芯片实现大功能

在科技飞速发展的当下&#xff0c;我们的生活正被各类智能设备悄然改变&#xff0c;它们如同一位位无声的助手&#xff0c;渗透到我们生活的每一个角落&#xff0c;让生活变得更加便捷和丰富多彩。 智能插座、智能照明和简单家电设备在家居领域的应用&#xff0c;为我们的生活…...

【嵌入式Linux应用开发基础】read函数与write函数

目录 一、read 函数 1.1. 函数原型 1.2. 参数说明 1.3. 返回值 1.4. 示例代码 二、write 函数 2.1. 函数原型 2.2. 参数说明 2.3. 返回值 2.4. 示例代码 三、关键注意事项 3.1 部分读写 3.2 错误处理 3.3 阻塞与非阻塞模式 3.4 数据持久化 3.5 线程安全 四、嵌…...

从 X86 到 ARM :工控机迁移中的核心问题剖析

在工业控制领域&#xff0c;技术的不断演进促使着工控机从 X86 架构向 ARM 架构迁移。然而&#xff0c;这一过程并非一帆风顺&#xff0c;面临着诸多关键挑战。 首先&#xff0c;软件兼容性是一个重要问题。许多基于 X86 架构开发的工业控制软件可能无法直接在 ARM 架构上运行…...

【数据结构】(7) 栈和队列

一、栈 Stack 1、什么是栈 栈是一种特殊的线性表&#xff0c;它只能在固定的一端&#xff08;栈顶&#xff09;进行出栈、压栈操作&#xff0c;具有后进先出的特点。 2、栈概念的例题 答案为 C&#xff0c;以C为例进行讲解&#xff1a; 第一个出栈的是3&#xff0c;那么 1、…...

android设置添加设备QR码信息

摘要&#xff1a;客户衍生需求&#xff0c;通过扫QR码快速获取设备基础信息&#xff0c;并且基于POS SDK进行打印。 1. 定位至device info的xml添加相关perference Index: vendor/mediatek/proprietary/packages/apps/MtkSettings/res/xml/my_device_info.xml--- vendor/medi…...

进程状态

目录 1.进程排队 硬件的队列 进程排队 2.进程的三大状态 什么是状态 运行状态 阻塞状态 挂起状态 3.Linux系统中的进程状态 4.僵尸状态 5.孤儿进程 1.进程排队 硬件的队列 计算机是由很多硬件组成的&#xff0c;操作系统为了管理这些硬件&#xff0c;通常需要为这…...

【linux学习指南】模拟线程封装与智能指针shared_ptr

文章目录 &#x1f4dd;线程封装&#x1f309; Thread.hpp&#x1f309; Makefile &#x1f320;线程封装第一版&#x1f309; Makefile:&#x1f309;Main.cc&#x1f309; Thread.hpp: &#x1f320;线程封装第二版&#x1f309; Thread.hpp:&#x1f309; Main.cc &#x1f…...

智慧物流新引擎:ARM架构工控机在自动化生产线中的应用

工业自动化程度的不断提升&#xff0c;对高性能、低功耗和高可靠性的计算设备需求日益增长。ARM架构工控机因其独特的优势&#xff0c;在多个工业领域得到了广泛应用。本文将深入探讨ARM架构工控机的特点及其在具体工业场景中的应用。 ARM架构工控机的主要优势 高效能与低功耗…...

OpenGL的基础光照知识

光照模型 常见的光照模型&#xff1a;ADS模型 A&#xff1a;环境光反射&#xff08;ambient reflection&#xff09;&#xff1a;模拟低级光照&#xff0c;影响场景中的所有物体。D&#xff1a;漫反射&#xff08;diffuse reflection&#xff09;&#xff1a;根据光线的入射角…...

centos 10 离线安装dnf 和 设置dnf镜像源

离线安装dnf可用kimi搜索, centos 使用curl 下载dnf 的rpm包 mkdir ~/dnf_packages cd ~/dnf_packages# CentOS 7 示例 curl -O http://springdale.math.ias.edu/data/puias/unsupported/7/x86_64/dnf-0.6.4-2.sdl7.noarch.rpm curl -O http://springdale.math.ias.edu/data/pu…...

redis 缓存击穿问题与解决方案

前言1. 什么是缓存击穿?2. 如何解决缓存击穿?怎么做?方案1: 定时刷新方案2: 自动续期方案3: 定时续期 如何选? 前言 当我们使用redis做缓存的时候,查询流程一般是先查询redis,如果redis未命中,再查询MySQL,将MySQL查询的数据同步到redis(回源),最后返回数据 流程图 为什…...

Linux下的进程切换与调度

目录 1.进程的优先级 优先级是什么 Linux下优先级的具体做法 优先级的调整为什么要受限 2.Linux下的进程切换 3.Linux下进程的调度 1.进程的优先级 我们在使用计算机的时候&#xff0c;通常会启动多个程序&#xff0c;这些程序最后都会变成进程&#xff0c;但是我们的硬…...

开源模型应用落地-Qwen1.5-MoE-A2.7B-Chat与vllm实现推理加速的正确姿势(一)

一、前言 在人工智能技术蓬勃发展的当下,大语言模型的性能与应用不断突破边界,为我们带来前所未有的体验。Qwen1.5-MoE-A2.7B-Chat 作为一款备受瞩目的大语言模型,以其独特的架构和强大的能力,在自然语言处理领域崭露头角。而 vllm 作为高效的推理库,为模型的部署与推理提…...

阿里云IOT设备管理

本文主要介绍了阿里云IOT设备管理的基本概念、功能特点以及应用场景。阐述了如何利用阿里云IOT平台实现设备的连接、监控和控制&#xff0c;以及如何借助其丰富的数据分析功能提升设备管理效率。 一、IOT工作原理 二、创建模拟设备 1.创建产品 2.物模型 3.设备 4.设备数据上报…...

图像处理技术和应用

图像处理技术是一种依托计算机和相关算法&#xff0c;对图像进行深度处理、分析及改变的技术。主要包括图像数字化、图像增强和复原、图像数据编码、图像分割和图像识别等。它不仅能够从静态图像中提取关键信息&#xff0c;还能改变图像的外观或特征&#xff0c;并进一步检测、…...

格式化字符串漏洞详解

一、漏洞原理 格式化字符串漏洞&#xff08;Format String Vulnerability&#xff09;是由于程序使用用户可控的输入作为格式化字符串参数&#xff08;如 printf、sprintf 等函数&#xff09;时未正确过滤导致的漏洞。攻击者可通过构造特殊格式字符串实现以下操作&#xff1a;…...

java项目之基于web的中国古诗词的设计与实现源码(ssm+mysql)

风定落花生&#xff0c;歌声逐流水&#xff0c;大家好我是风歌&#xff0c;混迹在java圈的辛苦码农。今天要和大家聊的是一款基于ssm的基于web的中国古诗词的设计与实现。项目源码以及部署相关请联系风歌&#xff0c;文末附上联系信息 。 项目简介&#xff1a; 基于web的中国…...

网络初识-

网络的相关概念 一、局域网和广域网 将各种计算机、外部设备等相互连接起来&#xff0c;实现在这个范围内数据通信和资源共享的计算机网络。它的覆盖范围通常在几百米到几公里之内。例如&#xff0c;一个小型企业的办公室&#xff0c;通过交换机将多台电脑连接在一起&#xf…...

AOS安装及操作演示

文章目录 一、安装node1.1 在 macOS 上管理 Node版本1.1.1 安装 nvm1.1.2 验证 nvm 是否安装成功1.1.3 使用 nvm 安装/切换 Node.js 版本1.1.4 卸载 Node.js 版本 1.2 在 windows 上管理 Node版本1.2.1 安装 nvm-windows1.2.2 安装 Node.js 版本1.2.3 切换 Node.js 版本1.2.4 卸…...

vue学习8

1.pinia&#xff08;更优&#xff09; 是vue最新的状态管理工具&#xff0c;是vuex的替代品 pinia&#xff1a; state actions(支持异步&#xff0c;可以直接修改state) getters 优点&#xff1a; 提供更加简单的API(去掉了mutation)提供符合&#xff0c;组合式的API语法(和v…...

【竞技宝】电竞世界杯:无畏契约首次入选正式项目!

北京时间2月12日&#xff0c;电竞世界杯基金会&#xff08;EWCF&#xff09;与知名游戏开发商拳头游戏&#xff08;Riot Games&#xff09;在近日共同宣布达成三年合作伙伴关系。同时&#xff0c;三大顶级电竞项目——《英雄联盟》《英雄联盟&#xff1a;云顶之弈》&#xff08…...

Bigemap Pro地图配置文件包

配置文件获取 配置文件下载后&#xff0c;直接拖入软件中自动识别导入图源&#xff0c;一键完成加载。...

有哪些免费的SEO软件优化工具

随着2025年互联网的不断发展&#xff0c;越来越多的企业意识到在数字营销中&#xff0c;网站的曝光度和排名至关重要。无论是想要提高品牌知名度&#xff0c;还是想要通过在线销售增加收益&#xff0c;SEO&#xff08;搜索引擎优化&#xff09;都是一项不可忽视的关键策略。而要…...

第二天:工具的使用

每天上午9点左右更新一到两篇文章到专栏《Python爬虫训练营》中&#xff0c;对于爬虫有兴趣的伙伴可以订阅专栏一起学习&#xff0c;完全免费。 键盘为桨&#xff0c;代码作帆。这趟为期30天左右的Python爬虫特训即将启航&#xff0c;每日解锁新海域&#xff1a;从Requests库的…...

分享在职同时准备系统分析师和教资考试的时间安排

&#xff08;在职、时间有限、同时备考系统分析师考试和小学信息技术教资面试&#xff09;&#xff0c;以下是详细的备考计划&#xff0c;确保计划的可行性和通过性。 一、总体安排 时间分配&#xff1a; 每周周末&#xff08;2天&#xff09;用于系统分析师考试备考。工作日晚…...

从Word里面用VBA调用NVIDIA的免费DeepSeekR1

看上去能用而已。 选中的文字作为输入&#xff0c;运行对应的宏即可&#xff1b;会先MSGBOX提示一下&#xff0c;然后相关内容追加到word文档中。 需要自己注册生成好用的apikey Option ExplicitSub DeepSeek()Dim selectedText As StringDim apiKey As StringDim response A…...

3.2 > Bash

概览 在上一节中我们了解了关于 Shell 的执行流程&#xff0c;知道了在 Linux 环境中一般有哪些常用的 Shell。而在本节中&#xff0c;将会学习到 Linux 中最常见的一个 Shell —— Bash&#xff0c;了解到 bash 的相关知识和用法。 本节目录 概览相关知识bash 命令提示符bas…...