k8s中部署ceph外部存储与简单使用

news/2025/3/12 9:45:31/文章来源:https://www.cnblogs.com/pgyLang/p/18766800

k8s中部署ceph外部存储与简单使用

在 Kubernetes (k8s) 中部署 Ceph 作为外部存储,可以提供高可用、可扩展和持久化的存储解决方案。本指南将详细讲解如何在 k8s 集群中集成 Ceph,并使用 Ceph RBD (块存储) 和 CephFS (文件存储)


1. Ceph 介绍

Ceph 提供三种主要的存储模式:

  1. RBD (RADOS Block Device):块存储,适用于数据库、持久化应用,如 MySQL、PostgreSQL。
  2. CephFS (Ceph File System):分布式文件系统,适用于共享存储,如 Web 应用、日志存储。
  3. Object Storage (S3 兼容):适用于大规模对象存储,如图片、备份。

Kubernetes 可以通过 Ceph CSI (Container Storage Interface) 实现动态存储管理。


2. 部署 Ceph 存储集群

2.1 环境要求

  • Kubernetes 集群 (v1.20+ 推荐) 确保你的 K8s 集群已经搭建好,并且每个存储节点(OSD 节点)上有未格式化的本地磁盘可用。
  • 3+ 台服务器(建议至少 3 个节点)
  • 安装qemu-nbd 是用于将磁盘映像文件映射到块设备的工具:yum install qemu-img。 否则在osd的job初始化时会报错
  • 所有部署yaml来源官方github仓库,地址:GitHub - rook/rook: Storage Orchestration for Kubernetes 文件路径:deploy/examples
  • Ceph 需要的基本组件
    • mon(监视器):存储集群的元数据
    • mgr(管理器):集群管理
    • osd(存储守护进程):数据存储
    • mds(元数据服务器,仅 CephFS 需要)
    • radosgw(对象存储网关,仅 S3 兼容对象存储需要)
  • 部署过程中出现错误删除所有资源重新部署时还需要清理osd相关本地目录
rm -rf /var/lib/ceph/osd/*
rm -rf /var/lib/rook
rm -rf /var/lib/kubelet/plugins/ceph*
rm -rf /etc/ceph
rm -rf /dev/ceph-*
rm -rf /dev/nbd*

2.2 部署 Ceph 集群

使用 Rook-Ceph 在 Kubernetes 中部署 Ceph。

准备镜像,由于国内网络原因,最好先准备好需要的镜像,一下镜像来源operator.yaml,cluster.yaml以及部署过程需要拉取的:

docker.io/rook/ceph:master
quay.io/ceph/ceph:v19.2.1
registry.k8s.io/sig-storage/csi-node-driver-registrar:v2.13.0
registry.k8s.io/sig-storage/csi-attacher:v4.8.0
registry.k8s.io/sig-storage/csi-snapshotter:v8.2.0
registry.k8s.io/sig-storage/csi-provisioner:v5.1.0
quay.io/cephcsi/cephcsi:v3.13.1
registry.k8s.io/sig-storage/csi-resizer:v1.13.1
docker.io/library/busybox

Step 1: 安装 Rook Operator

先下载文件,在执行

curl -LO https://raw.githubusercontent.com/rook/rook/master/deploy/examples/common.yaml
curl -LO https://raw.githubusercontent.com/rook/rook/master/deploy/examples/operator.yamlkubectl create -f common.yaml
kubectl create -f operator.yaml

Step 2: 部署 Ceph 集群

注意,在部署集群之前先创建crds资源

curl -LO https://raw.githubusercontent.com/rook/rook/master/deploy/examples/crds.yaml
kubectl create -f crds.yamlcurl -LO https://raw.githubusercontent.com/rook/rook/master/deploy/examples/cluster.yaml
# 修改dashboard 的ssl为false,没有证书否则无法正常访问dashboard,dashboard默认开启
#  dashboard:
#    enabled: true
#    ssl: false  # http默认端口7000,https为8443
kubectl create -f cluster.yaml

执行后,Rook 将自动创建:

  • Ceph OSD (Object Storage Daemon)
  • Ceph Monitor (MON)
  • Ceph Manager (MGR)

检查 Ceph 集群状态

kubectl -n rook-ceph get pod

确保 rook-ceph-monrook-ceph-osdrook-ceph-mgr 等 Pod 正常运行。

如需dashboard对外访问需要提供ingress,此时可以在dashboard创建存储池,提供给StorageClass使用

vim ceph-dashboard-ingress.yaml

apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:name: rook-ceph-dashboardnamespace: rook-cephannotations:nginx.ingress.kubernetes.io/rewrite-target: /
spec:ingressClassName: nginxrules:- host: ceph-dashboard.localhttp:paths:- path: /pathType: Prefixbackend:service:name: rook-ceph-mgr-dashboardport:number: 7000

获取dashboard的登录密码

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

Rook-Ceph 部署完成后,可以安装 rook-ceph-tools 这个工具 Pod,用来管理和调试 Ceph 集群。以下是安装步骤:

1. 安装 rook-ceph-tools

官方 Rook 提供了一个工具 Pod,包含 ceph 命令行工具。你可以使用以下命令部署它:

curl -LO https://raw.githubusercontent.com/rook/rook/master/deploy/examples/toolbox.yaml
kubectl apply -f toolbox.yaml

如果你使用的是 离线环境,你可能需要手动下载 toolbox.yaml 文件并修改镜像地址。


2. 确保 rook-ceph-tools 正常运行

kubectl get pods -n rook-ceph

你应该看到类似的输出:

NAME                                  READY   STATUS    RESTARTS   AGE
rook-ceph-tools-6b8d89f67d-abcde      1/1     Running   0          30s

如果 rook-ceph-tools 处于 CrashLoopBackOff,可能是 Ceph 集群未完全启动,可以先检查:

kubectl get cephcluster -n rook-ceph

如果状态是 HEALTH_WARNHEALTH_ERR,需要先修复集群。


3. 进入 rook-ceph-tools Pod

kubectl exec -it -n rook-ceph deploy/rook-ceph-tools -- bash

进入后,你可以运行 ceph 相关命令,比如:

ceph status
ceph osd tree
ceph mon stat
ceph health detail

4. (可选) 删除 rook-ceph-tools

如果不再需要,可以删除:

kubectl delete -f toolbox.yaml

3. Kubernetes 使用 Ceph 存储

在创建StorageClass前需要创建存储池 pool

3.1 Ceph RBD (块存储)

Step 1: 创建 StorageClass

apiVersion: storage.k8s.io/v1
kind: StorageClass
metadata:name: ceph-rbd
provisioner: rook-ceph.rbd.csi.ceph.com
parameters:clusterID: rook-cephpool: replicapoolimageFormat: "2"imageFeatures: "layering"csi.storage.k8s.io/provisioner-secret-name: rook-csi-rbd-provisionercsi.storage.k8s.io/provisioner-secret-namespace: rook-cephcsi.storage.k8s.io/node-stage-secret-name: rook-csi-rbd-nodecsi.storage.k8s.io/node-stage-secret-namespace: rook-ceph
reclaimPolicy: Retain

解释:

  • provisioner: rook-ceph.rbd.csi.ceph.com 表示 Ceph CSI 驱动。
  • pool: replicapool 是 Ceph RBD 存储池。
  • reclaimPolicy: Retain 表示 PVC 删除后 PV 不会自动删除数据。

Step 2: 创建 PVC

apiVersion: v1
kind: PersistentVolumeClaim
metadata:name: ceph-rbd-pvc
spec:accessModes:- ReadWriteOnceresources:requests:storage: 10GistorageClassName: ceph-rbd

Step 3: 创建使用 Ceph RBD 的 Pod

apiVersion: v1
kind: Pod
metadata:name: ceph-rbd-pod
spec:containers:- name: appimage: busyboxcommand: [ "sleep", "3600" ]volumeMounts:- mountPath: "/mnt/data"name: ceph-storagevolumes:- name: ceph-storagepersistentVolumeClaim:claimName: ceph-rbd-pvc

测试 Ceph RBD 存储

kubectl exec -it ceph-rbd-pod -- df -h /mnt/data

3.2 CephFS (文件存储)

适用于多个 Pod 共享访问的场景。

Step 1: 创建 CephFS StorageClass

apiVersion: storage.k8s.io/v1
kind: StorageClass
metadata:name: cephfs
provisioner: rook-ceph.cephfs.csi.ceph.com
parameters:clusterID: rook-cephfsName: myfspool: myfs-data0csi.storage.k8s.io/provisioner-secret-name: rook-csi-cephfs-provisionercsi.storage.k8s.io/provisioner-secret-namespace: rook-cephcsi.storage.k8s.io/node-stage-secret-name: rook-csi-cephfs-nodecsi.storage.k8s.io/node-stage-secret-namespace: rook-ceph
reclaimPolicy: Retain

Step 2: 创建 PVC

apiVersion: v1
kind: PersistentVolumeClaim
metadata:name: cephfs-pvc
spec:accessModes:- ReadWriteManyresources:requests:storage: 10GistorageClassName: cephfs

Step 3: 创建使用 CephFS 的 Pod

apiVersion: v1
kind: Pod
metadata:name: cephfs-test-pod
spec:containers:- name: appimage: busyboxcommand: [ "sleep", "3600" ]volumeMounts:- mountPath: "/mnt/shared"name: cephfs-volumevolumes:- name: cephfs-volumepersistentVolumeClaim:claimName: cephfs-pvc

验证 CephFS 共享存储

kubectl exec -it cephfs-test-pod -- df -h /mnt/shared

4. 验证 Ceph 存储

4.1 检查 Ceph 运行状态

kubectl -n rook-ceph get pod

4.2 查看存储池

kubectl -n rook-ceph get cephblockpools

4.3 进入 Ceph 工具 Pod

kubectl -n rook-ceph exec -it deploy/rook-ceph-tools -- bash

在 Ceph Pod 内运行:

ceph status
ceph osd status
rbd list -p replicapool

5.ceph的简单使用

I.查看pool

在 Ceph 中查看存储池(Pool)的方法如下:

. 使用 ceph osd pool ls 列出所有存储池

ceph osd pool ls

输出示例:

mypool
rbd
cephfs_data
cephfs_metadata

如果你想查看更详细的信息,可以使用:

ceph osd pool ls detail

输出示例:

pool 1 'mypool' replicated size 3 min_size 2 crush_rule 0 object_hash rjenkins pg_num 128 pgp_num 128 ...

2. 查看指定存储池的详细信息

ceph osd pool get <pool-name> all

例如:

ceph osd pool get mypool all

输出示例:

size: 3
min_size: 2
pg_num: 128
pgp_num: 128
crush_rule: 0

3. 查看存储池的使用情况

ceph df

示例输出:

POOLS:NAME                ID     USED      %USED     MAX AVAIL     OBJECTSmypool              1      10 GiB    5%        200 GiB       10240rbd                 2      20 GiB    10%       180 GiB       20480

这显示了每个池的已使用空间、最大可用空间和对象数量。

4. 查看 Pool 中的对象

rados -p mypool ls

示例输出:

obj1
obj2
obj3

如果要统计对象总数:

rados df

或者:

ceph osd pool stats mypool

5. 查看 PG 状态

ceph pg dump pgs

或者查看特定 Pool 的 PG:

ceph pg ls-by-pool mypool

6. 在 rook-ceph-tools 里执行

如果你在 Kubernetes 中使用 rook-ceph,先进入工具箱:

kubectl exec -it -n rook-ceph deploy/rook-ceph-tools -- bash

然后执行上面的 Ceph 命令。

II.在 Ceph 中删除存储池(Pool)

删除 Ceph 存储池需要小心操作,因为删除后数据无法恢复。确保你已经备份或确认不再需要该存储池。

1. 启用 Pool 删除功能

默认情况下,Ceph 不允许 直接删除 Pool,需要先启用删除功能:

ceph config set mon mon_allow_pool_delete true

然后检查是否启用:

ceph config get mon mon_allow_pool_delete

如果返回 true,说明已开启。

2. 删除 Pool

2.1 列出所有存储池

ceph osd pool ls

示例输出:

mypool
rbd
cephfs_data
cephfs_metadata

假设要删除 mypool

2.2 删除指定 Pool

ceph osd pool delete mypool mypool --yes-i-really-really-mean-it

⚠️ 注意:

  • mypool(第一个参数):要删除的存储池名称。
  • mypool(第二个参数):确认删除的存储池名称,必须和第一个参数一致。
  • --yes-i-really-really-mean-it:强制删除,绕过确认。

3. 确认 Pool 已删除

ceph osd pool ls

如果 mypool 不在列表中,说明删除成功。

4. 关闭 Pool 删除功能(可选)

如果不想误删其他池,可以关闭删除功能:

ceph config set mon mon_allow_pool_delete false

在 Rook-Ceph(Kubernetes)环境中删除 Pool

如果你在 Rook-Ceph(Kubernetes 内部部署):

  1. 先进入

    rook-ceph-tools
    

    容器:

    kubectl exec -it -n rook-ceph deploy/rook-ceph-tools -- bash
    
  2. 按照上面的步骤删除 Pool。

III.pool type 有哪几类

Ceph 存储池(Pool)的类型主要分为以下几类:


1. Replicated Pool(复制池)


特点:

  • 通过 多副本 机制保障数据可靠性。
  • 数据会被复制到多个 OSD(通常是 3 个,默认 size=3)。
  • 适用于高可靠性场景,如 Kubernetes RBD 存储、CephFS 元数据等。

创建示例:

sh复制编辑ceph osd pool create my-replicated-pool 128
ceph osd pool set my-replicated-pool size 3

size=3 表示 3 副本,每个对象存 3 份。

2. Erasure Coded Pool(纠删码池)

特点:

  • 通过 纠删码(Erasure Coding, EC) 进行数据分片,提高存储效率。
  • 适用于大容量存储需求,减少存储开销(比 3 副本方案节省 30-50% 存储空间)。
  • 读取性能比 Replicated Pool 差一些,因为需要计算和重构数据。

创建示例(EC 4+2 模式)

sh复制编辑ceph osd erasure-code-profile set my-ec-profile k=4 m=2
ceph osd pool create my-ec-pool 128 erasure my-ec-profile

k=4, m=2 表示:数据分成 4 份,额外存 2 份校验数据。

⚠️ 需要注意:

  • EC Pool 不能直接用作 RBD 或 CephFS,因为它不支持 omap 数据(RADOS 对象索引)。
  • 适用于 RGW(Ceph Object Gateway,S3 兼容存储)大对象存储

3. Cache Tier Pool(缓存层池,已废弃)

特点:

  • 早期 Ceph 设计的一种 热数据缓存 方案,冷热数据分层存储。
  • 由于性能和复杂性问题,Ceph 从 Luminous 版本开始废弃了 Cache Tiering
  • 现在推荐使用 SSD+HDD 设备分组 来替代。

示例(已不推荐)

ceph osd tier add-cache my-hot-pool my-cold-pool

4. Metadata Pool(元数据池,CephFS 专用)

特点:

  • CephFS(Ceph 文件系统) 需要专门的 元数据池 存储目录结构、文件信息等。
  • 该 Pool 由 CephFS 自动管理,不需要手动创建。

查看 CephFS 的元数据池:

ceph fs ls

示例输出:

name: cephfs, metadata pool: cephfs_metadata, data pools: [cephfs_data]

5. Special Purpose Pool(特殊用途池)

一些特殊用途的 Pool,例如:

  • RBD Pool(块存储):用于存放 Ceph RBD(块设备)数据。
  • RGW Pool(对象存储):用于 Ceph Object Gateway(S3 API 兼容)。
  • Custom Pools(自定义池):可以根据应用需求创建。

示例:

ceph osd pool create rbd-pool 128
rbd pool init rbd-pool

rbd pool init 让 Pool 适配 RBD 存储。

总结

Pool 类型 适用场景 主要特点
Replicated 高可靠存储,CephFS 元数据,RBD 3 副本,高可靠性,存储占用大
Erasure Coded 对象存储(RGW)、大文件存储 纠删码存储,节省空间,读取时需计算恢复
Cache Tier(废弃) 旧版冷热数据缓存方案 Ceph 已不推荐使用
Metadata CephFS 专用 用于存储 CephFS 的目录结构和索引
Special Purpose RBD、RGW、Custom Pool 适用于块存储、对象存储等特定需求

IV.Ceph Pool 的作用

在 Ceph 中,Pool(存储池) 是用于组织和管理存储数据的逻辑分区,主要作用如下:

1. 数据分组管理

  • Pool 提供了一种逻辑隔离的方式,把不同用途的数据分开存储。
  • 例如:
    • rbd 存储块设备(Ceph RBD)。
    • cephfs_data 存储 Ceph 文件系统数据。
    • cephfs_metadata 存储 CephFS 的元数据。
    • rgw.buckets.data 存储对象存储(S3 兼容的 RGW)。

2. 控制数据存储策略

  • 每个 Pool 可以有

    不同的存储策略

    ,如:

    • 副本数(size)ceph osd pool set mypool size 3(存 3 份数据)。
    • PG 数量(pg_num):影响数据分布和性能。
    • Erasure Coding 纠删码:节省存储空间。
    • 存储级别(CRUSH 规则):存储在哪些 OSD 或磁盘类型(SSD/HDD)。

3. 资源隔离

  • 通过不同的 Pool,可以为不同用户或应用提供存储隔离,避免互相影响。
  • 例如:
    • pool-A 供数据库使用(高 IOPS)。
    • pool-B 供日志存储(高吞吐量)。
    • pool-C 供备份数据(低成本 HDD)。

4. 适用于不同存储类型

Ceph Pool 适用于不同存储模式:

  • 块存储(RBD):使用 rbd 池存放虚拟机磁盘。
  • 文件存储(CephFS):使用 cephfs_data 存文件,cephfs_metadata 存目录结构。
  • 对象存储(RGW):使用 rgw.buckets.data 存对象数据。

5. 负载均衡 & 性能优化

  • 通过调整 Pool 的

    PG 数量

    ,可以优化 OSD 负载均衡,提高存储性能:

    ceph osd pool set mypool pg_num 128
    
  • 还可以使用 不同 CRUSH 规则,让 Pool 存在特定类型的 OSD(例如 SSD 或 HDD)。

总结

作用 说明
数据分类存储 让不同用途的数据存储在不同的 Pool 里。
存储策略管理 控制副本数、纠删码、PG 数量等策略。
资源隔离 为不同应用/用户提供独立存储空间。
适配存储类型 支持块存储、文件存储、对象存储。
优化性能 通过 CRUSH 规则和 PG 负载均衡提高性能。

V.如何查看存储在ceph中的数据

在 Ceph 中查看存储数据的方法取决于你使用的存储类型(块存储 RBD、文件存储 CephFS、对象存储 RGW)。以下是几种常见方式:

1. 查看存储池中的对象(适用于所有 Pool)

1.1 列出 Pool 中的所有对象*

rados -p <pool-name> ls

示例:

rados -p mypool ls

输出示例:

obj1
obj2
obj3

这个命令适用于 所有 Ceph Pool,可以直接列出存储在池中的 RADOS 对象。

1.2 查看 Pool 的存储占用

ceph osd pool stats <pool-name>

示例:

ceph osd pool stats mypool

输出示例:

mypool:objects: 10240bytes_used: 10GiBmax_avail: 200GiB

显示当前存储池的对象数量、已用空间和可用空间。

2. RBD(块存储)中的数据

如果你在 Ceph RBD(块存储)中存储数据,你可以使用以下命令查看 RBD 镜像。

2.1 列出所有 RBD 镜像

rbd ls -p <pool-name>

示例:

rbd ls -p rbd

输出示例:

vm-disk-1
vm-disk-2

这表示 rbd 存储池中存储了两个 RBD 磁盘。

2.2 查看 RBD 镜像的详细信息

rbd info -p <pool-name> <image-name>

示例:

rbd info -p rbd vm-disk-1

输出示例:

rbd image 'vm-disk-1':size 50GiB in 1280 objectsorder 22 (4MiB objects)block_name_prefix: rbd_data.abc123format: 2features: layering, exclusive-lock, object-map

这里显示了 RBD 磁盘的大小、存储格式等信息。

2.3 挂载 RBD 设备并读取数据

rbd map -p rbd vm-disk-1
mount /dev/rbd0 /mnt
ls /mnt

适用于直接读取块存储的数据。

3. CephFS(文件存储)中的数据

如果你使用 CephFS 作为文件存储,你可以直接查看挂载点的数据。

3.1 列出 CephFS 里的文件

进入 rook-ceph-tools 容器:

kubectl exec -it -n rook-ceph deploy/rook-ceph-tools -- bash

然后执行:

ceph fs ls

示例输出:

name: cephfs, metadata pool: cephfs_metadata, data pools: [cephfs_data]

如果 CephFS 已经挂载到本地:

ls /mnt/cephfs

查看 CephFS 存储的文件。

4. RGW(对象存储,S3 兼容)中的数据

如果你在 Ceph RGW(对象存储) 里存放 S3 兼容的对象,可以使用以下命令查看。

4.1 列出对象存储的桶

radosgw-admin bucket list

输出示例:

["my-bucket1", "my-bucket2"]

这表示 my-bucket1my-bucket2 是 Ceph RGW 里存储的对象桶。

4.2 列出桶中的对象

radosgw-admin bucket stats --bucket=my-bucket1

输出示例:

{"bucket": "my-bucket1","num_objects": 1500,"size_kb": 1048576,"size_kb_actual": 1050000
}

这表示 my-bucket1 里存储了 1500 个对象,总大小 1GB。

4.3 使用 S3 命令列出对象

如果使用 s3cmd 连接 Ceph RGW:

s3cmd ls s3://my-bucket1

或者使用 aws s3 命令:

aws --endpoint-url=http://ceph-rgw.example.com s3 ls s3://my-bucket1

总结

存储类型 查看方式 命令示例
所有 Ceph Pool 列出存储对象 rados -p mypool ls
块存储(RBD) 查看 RBD 镜像 rbd ls -p rbd
文件存储(CephFS) 直接访问文件 ls /mnt/cephfs
对象存储(RGW) 列出桶和对象 radosgw-admin bucket list

如果你使用的是 Kubernetes + Rook-Ceph,建议你先进入 rook-ceph-tools 容器再执行这些命令:

kubectl exec -it -n rook-ceph deploy/rook-ceph-tools -- bash

VI.导出数据

Ceph 数据导出的方法取决于存储类型(RADOS 对象、RBD 块设备、CephFS 文件系统、RGW 对象存储)。以下是不同场景下的数据导出方法:

1. 导出 RADOS 对象(适用于所有 Ceph Pool)

如果你想导出特定 Pool 里的对象,可以使用 rados get 命令。

1.1 导出单个对象

rados -p <pool-name> get <object-name> <output-file>

示例:

rados -p mypool get obj1 obj1-backup.data

这会把 mypool 里的 obj1 导出为 obj1-backup.data

1.2 导出整个 Pool

如果你想导出整个 Pool,可以遍历导出所有对象:

for obj in $(rados -p mypool ls); dorados -p mypool get $obj $obj.backup
done

这个脚本会把 mypool 里的所有对象导出到当前目录。

2. 导出 RBD 镜像(块存储)

如果你在 Ceph RBD(块存储) 里存有数据,可以用 rbd export 导出整个 RBD 镜像。

2.1 导出 RBD 镜像到文件

rbd export -p <pool-name> <rbd-image> <output-file>

示例:

rbd export -p rbd vm-disk-1 vm-disk-1.img

这会把 rbd 池中的 vm-disk-1 镜像导出为 vm-disk-1.img,可用于备份或迁移。

2.2 直接挂载 RBD 设备并拷贝数据

如果你想直接访问 RBD 里的数据:

rbd map -p rbd vm-disk-1
mount /dev/rbd0 /mnt
cp -r /mnt /backup

这会把 RBD 设备挂载到 /mnt,然后拷贝数据到 /backup

3. 导出 CephFS(文件存储)

CephFS 作为一个 POSIX 兼容的文件系统,可以直接使用 rsynctar 导出数据。

3.1 挂载 CephFS 并导出

如果你的 CephFS 已经挂载:

rsync -av /mnt/cephfs /backup/

或者:

tar -czf cephfs-backup.tar.gz -C /mnt/cephfs .

这个方法适用于 CephFS 里存储的所有文件。

3.2 直接从 CephFS Pool 导出数据

如果你不能挂载 CephFS,可以从 cephfs_datacephfs_metadata Pool 里导出数据:

rados -p cephfs_data ls | while read obj; dorados -p cephfs_data get $obj $obj.backup
done

这个方法适用于恢复文件系统级别的元数据。

4. 导出 RGW(对象存储,S3 兼容)

如果你使用 Ceph RGW(对象存储,S3 兼容),可以使用 radosgw-admins3cmd/aws s3 导出数据。

4.1 使用 radosgw-admin 导出

radosgw-admin bucket list
radosgw-admin bucket stats --bucket=my-bucket

然后遍历导出:

radosgw-admin object list --bucket=my-bucket | jq -r '.[].name' | while read obj; doradosgw-admin object get --bucket=my-bucket --object "$obj" --outfile "$obj"
done

4.2 使用 s3cmdaws s3

如果 Ceph RGW 配置了 S3 API:

s3cmd sync s3://my-bucket /backup/

或者:

aws --endpoint-url=http://ceph-rgw.example.com s3 sync s3://my-bucket /backup/

这个方法适用于大规模对象存储备份。

总结

存储类型 导出方式 命令示例
RADOS 对象 导出单个对象 rados -p mypool get obj1 obj1-backup.data
RADOS 对象 导出整个 Pool for obj in $(rados -p mypool ls); do rados -p mypool get $obj $obj.backup; done
RBD(块存储) 导出 RBD 镜像 rbd export -p rbd vm-disk-1 vm-disk-1.img
RBD(块存储) 挂载后拷贝数据 rbd map -p rbd vm-disk-1 && mount /dev/rbd0 /mnt && cp -r /mnt /backup
CephFS(文件存储) 直接拷贝数据 rsync -av /mnt/cephfs /backup/
CephFS(文件存储) 导出 Pool 数据 `rados -p cephfs_data ls
RGW(对象存储) radosgw-admin 导出 radosgw-admin object get --bucket=my-bucket --object "obj1" --outfile "obj1"
RGW(对象存储) s3cmd 导出 s3cmd sync s3://my-bucket /backup/

VII.删除ceph中的数据

在 Ceph 中删除数据的方法取决于存储类型(RADOS 对象、RBD 块存储、CephFS 文件系统、RGW 对象存储)。请注意,删除数据是不可逆的,请谨慎操作! 🔥

1. 删除 RADOS 对象(适用于所有 Ceph Pool)

1.1 删除单个对象

rados -p <pool-name> rm <object-name>

示例:

rados -p mypool rm obj1

这个命令会从 mypool 里删除 obj1

1.2 删除整个 Pool 里的所有对象

rados -p <pool-name> ls | while read obj; dorados -p <pool-name> rm $obj
done

这个方法适用于清空整个 Pool。

2. 删除 RBD(块存储)

2.1 列出所有 RBD 镜像

rbd ls -p <pool-name>

示例:

rbd ls -p rbd

你会看到该 Pool 里的所有 RBD 磁盘。

2.2 删除 RBD 镜像

如果确认不需要某个 RBD 镜像,可以删除:

rbd rm -p <pool-name> <image-name>

示例:

rbd rm -p rbd my-vm-disk

这个命令会彻底删除 rbd 池中的 my-vm-disk 磁盘。

2.3 删除 PVC 绑定的 RBD

如果 RBD 由 Kubernetes 通过 PVC 创建,先删除 PVC:

kubectl delete pvc <pvc-name>

如果 StorageClassRECLAIMPOLICY=Delete,Ceph 会自动删除 RBD 卷。如果是 Retain,你需要手动删除 RBD 镜像。

3. 删除 CephFS(文件存储)

3.1 删除 CephFS 里的文件

如果 CephFS 已经挂载到本地:

rm -rf /mnt/cephfs/*

这个命令会删除 CephFS 里的所有文件,但不会删除整个文件系统。

3.2 直接从 CephFS 数据池删除数据

rados -p cephfs_data ls | while read obj; dorados -p cephfs_data rm $obj
done

这个方法适用于从 cephfs_data 池直接删除存储对象。

4. 删除 RGW(对象存储,S3 兼容)

4.1 删除 S3 Bucket

如果你使用了 S3 兼容的 RGW 存储,可以使用 s3cmd

s3cmd rb --recursive s3://my-bucket

或者:

aws --endpoint-url=http://ceph-rgw.example.com s3 rb s3://my-bucket --force

4.2 直接删除 Bucket

radosgw-admin bucket delete --bucket=my-bucket

4.3 删除 RGW 对象

radosgw-admin object rm --bucket=my-bucket --object=obj1

5. 删除 Ceph Pool

如果你想删除整个 Pool(⚠ 危险操作!会删除所有数据!):

  1. 确保 Pool 允许删除

    ceph osd pool set <pool-name> allow_delete true
    
  2. 删除 Pool

    ceph osd pool delete <pool-name> <pool-name> --yes-i-really-really-mean-it
    

    示例:

    ceph osd pool delete mypool mypool --yes-i-really-really-mean-it
    

⚠ 重要提示: 这个命令会彻底删除 mypool,且数据无法恢复!

总结

存储类型 删除方法 命令示例
RADOS 对象 删除单个对象 rados -p mypool rm obj1
RADOS 对象 清空 Pool `rados -p mypool ls
RBD(块存储) 删除 RBD 镜像 rbd rm -p rbd my-vm-disk
RBD(块存储) 删除 PVC 绑定的 RBD kubectl delete pvc my-pvc
CephFS(文件存储) 删除文件 rm -rf /mnt/cephfs/*
CephFS(文件存储) 删除 Pool 数据 `rados -p cephfs_data ls
RGW(对象存储) 删除 Bucket radosgw-admin bucket delete --bucket=my-bucket
RGW(对象存储) 删除对象 radosgw-admin object rm --bucket=my-bucket --object=obj1
删除整个 Pool 彻底删除 Pool ceph osd pool delete mypool mypool --yes-i-really-really-mean-it

6. 总结

存储类型 适用场景
Ceph RBD (块存储) 适用于数据库、单 Pod 访问
CephFS (文件存储) 适用于多个 Pod 共享存储
S3 兼容对象存储 适用于日志、备份、大规模数据

推荐

  • 数据库:使用 Ceph RBD
  • 共享文件存储:使用 CephFS
  • 大规模对象存储:使用 S3 兼容对象存储

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

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

相关文章

【译】Visual Studio 中新的强大生产力特性

有时候,生活中的小事才是最重要的。在最新版本的 Visual Studio 中,我们增加了一些功能和调整,目的是让您脸上带着微笑,让您更有效率。这里是其中的一些列表,如果您想要完整的列表,请查看发行说明。 自定义文件编码在跨平台环境中工作的开发人员通常需要使用特定的文件编…

desu日语:详解日语助动词「です」的用法和意义

日语中的「です」(desu) 是一个非常重要的助动词,对于理解和运用日语至关重要。它并非简单的“是”,而是承载着多种语法功能,其用法灵活多变,也正因如此,初学者往往难以掌握。本文将深入探讨「です」的用法和意义,力求全面、准确地讲解其在不同语境下的应用。一、「です」…

Hyper-V分辨率过低,适配屏幕教程

当Hyper-V虚拟机的分辨率过低,无法适配屏幕时,可以按照以下步骤进行调整:一、通过增强会话模式调整分辨率 打开Hyper-V管理器: 在Windows系统中,找到并打开Hyper-V管理器应用程序。 配置虚拟机设置以启用增强会话模式: 在Hyper-V管理器中,找到并右键点击目标虚拟机,选择…

qt creator 配置clang-format 代码风格

1 Qt creator配置格式化代码插件clang-format 2 clang-format的配置 qt creator上面的选项卡:帮助>关于插件,在c++的那一栏中勾选Beautifier,然后重启qt creator的软件。上方的选项卡:编辑>Preferences>美化器 选择工具为ClangFormat在Clang Format的那一栏中,选…

利用Xshell进行文件传输

1.利用Xshell连接靶机或服务器 新建会话,(连接这里)输入ip,选择端口,名字随便写 点击用户身份验证,输入管理员用户和密码 点击连接 进入靶机终端(可能还需要确认一次密码)2.提权与修改密码 如果不是root权限,可以通过su root提权 root权限下直接通过passwd修改密码 如果是…

です(desu)的意思

“です”是日语中常用的表达方式,主要有以下几个含义和使用场景: 1. 表达断定:在日语中,“です”相当于汉语的“是”,用于断定句的结尾,表示对前面所述内容的肯定。例如,“これは本です。”(这是书。)2. 表达尊敬:在表达尊敬的场合,使用“です”可以使语气显得更加礼…

2025-03-12 随笔

今天周三,天气不错,记

线上测试木舟物联网平台之如何通过HTTP网络组件接入设备

一、概述 木舟 (Kayak) 是什么?木舟(Kayak)是基于.NET6.0软件环境下的surging微服务引擎进行开发的, 平台包含了微服务和物联网平台。支持异步和响应式编程开发,功能包含了物模型,设备,产品,网络组件的统一管理和微服务平台下的注册中心,服务路由,模块,中间服务等管理。还…

经过 10 亿级性能验证的隐私计算开源利器

在数据驱动的时代,我们每天都在产生大量数据:购物记录、健康信息、社交关系……这些数据蕴含巨大价值,但也伴随着隐私泄露的风险。 试想一下:医院希望联合研究某种疾病,但患者数据无法直接共享。 银行想合作分析反欺诈信息,但客户隐私数据必须严格保护。 AI 公司需要使用…

值得推荐的IT公司名单(国企篇)

大家好,今天我们来盘点一下值得推荐的国企,这些企业在行业内具有举足轻重的地位,不仅主营业务突出,福利待遇优厚,尤其是研发岗位的薪资区间,更是让人眼前一亮。十大顶尖央企国企,待遇优厚如天花板级别!(排名不分先后)1、中国烟草总公司 人家都说能成为烟草总公司的一…

Entity Framework Core 数据库迁移

EF Core 通过两种方式来保持**模型**和**数据库架构**同步。 迁移 Code First 反向工程 Db First 管理迁移 通过EF Core 命令行工具来管理迁移 安装EF Core 命令行工具# 安装 dotnet-ef dotnet tool install --global dotnet-ef# 验证安装 dotnet ef# 更新工具 dotnet tool upd…