配置 CephObject 分布式存储
CephObject 分布式存储提供标准 S3 接口,适用于大数据、备份归档、网盘等场景。本实践提供了配置分布式存储所需的操作指导,以及使用方式介绍。
分布式存储兼容的 API 及支持的 S3 特性参见 Ceph 官方文档 。
提示:本节涉及的所有终端操作,都需在存储所在集群的 控制节点 上执行。
准备分布式存储
提示:
创建 Bucket
通过创建 ObjectBucketClaim 资源来创建 Bucket。一个 ObjectBucketClaim 资源对应一个 Bucket。
操作步骤
-
创建 Bucket。
cat << EOF | kubectl create -f - apiVersion: objectbucket.io/v1alpha1 kind: ObjectBucketClaim metadata: name: ceph-object-bucket # 重复执行此命令创建 Bucket 时,需对应修改此处。 namespace: rook-ceph spec: generateBucketName: ceph-bkt storageClassName: {分布式存储中,对象存储类的名称} EOF
等待提示类似 …ceph-object-bucket created 信息时,操作成功。
-
查询 Bucket 名称。
kubectl -n rook-ceph get objectbucketclaims {ObjectBucketClaim 名称,例如 ceph-object-bucket} -o yaml | grep bucketName | grep -v {} | awk '{print $2}'
获取访问信息
包括用户凭证和连接信息。在 rook-ceph 命名空间下可查得对象存储的保密字典(与 ObjectBucketClaim 同名)以及内部路由。保密字典中记录了 Bucket 对应的用户及凭证,可用于上传、下载或删除对象。内部路由中记录了对象存储的 Endpoint 信息,可用于从集群内/外连接存储。
内部路由命名规则:
-
创建存储池时,关闭外网访问:rook-ceph-rgw-{存储池名称}
-
创建存储池时,开启外网访问:rook-ceph-rgw-{存储池名称}-external
操作步骤
-
获取用户凭证。
- AWS_ACCESS_KEY_ID
kubectl -n rook-ceph get secret {保密字典名称,例如 ceph-object-bucket} -o yaml | grep AWS_ACCESS_KEY_ID | grep -v {} | awk '{print $2}' | base64 -d
- AWS_SECRET_ACCESS_KEY
kubectl -n rook-ceph get secret {保密字典名称,例如 ceph-object-bucket} -o yaml | grep AWS_SECRET_ACCESS_KEY | grep -v {} | awk '{print $2}' | base64 -d
-
获取连接信息。
kubectl -n rook-ceph get svc/{内部路由名称,例如 rook-ceph-rgw-object}
-
Endpoint IP:如果用于集群内访问,则为通过 rook-ceph-rgw-{存储池名称} 查得的 CLUSTER-IP 取值;如果用于集群外访问,则为存储集群(ceph-cluster)中任一节点的 IP。节点信息可在 存储管理 > 分布式存储 页面的 存储设备 页签中查得。
-
Endpoint 端口号:以下回显示例中,7480 和 30176 端口将分别用于从集群内/外连接存储。
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE rook-ceph-rgw-object-external NodePort 10.8.165.226 <none> 7480:30176/TCP 30h
-
应用场景一:用于 MySQL 备份
对象存储可作为 S3 存储供集群内/外的应用使用。例如开发人员可在备份 MySQL 时输入对象存储的访问信息(示例中模块 2 ),将数据备份到其中。

应用场景二:CLI 客户端调用对象存储
往 Bucket 中上传、下载或删除对象。
-
安装命令行工具 s3cmd。
yum -y install s3cmd
提示:如果提示 No package s3cmd available , 可尝试执行 yum install -y epel-release 后重新安装。
-
将访问信息填入 s3cmd 的配置文件。
cat << EOF > ~/.s3cfg [default] access_key = {AWS_ACCESS_KEY_ID} secret_key = {AWS_SECRET_ACCESS_KEY} host_base = {Endpoint IP}:{Endpoint 端口号} host_bucket = {Endpoint IP}:{Endpoint 端口号}/{Bucket 名称} use_https = False EOF
-
上传、下载,或删除对象。
# 获取所有的 bucket 信息 s3cmd ls # 上传一个 object 文件到 bucket 中 s3cmd put {object 文件} s3://{Bucket 名称} # 查看上传的 object s3cmd ls s3://{Bucket 名称}/ # 下载 object s3cmd get s3://{Bucket 名称}/{object 文件} # 删除 object s3cmd rm s3://{Bucket 名称}/{object 文件}