问题描述
该笔记将记录:在 Rook Ceph 中,使用对象存储的方法,以及相关问题的解决办法。
解决方案
该部分内容是针对我们的应用场景而整理的笔记,建议参考官方文档以获取详细说明:
1)Object Storage Overview – Rook Ceph Documentation
2)Bucket Claim – Rook Ceph Documentation
3)Object Store CRD – Rook Ceph Documentation
4)Object Store User CRD – Rook Ceph Documentation
流程概述
在 Rook Ceph 中,使用对象存储的流程如下:
1)创建 CephObjectStore 对象,该资源将启动 RGW 服务,以提供 S3 API 接口;
2)创建 StorageClass 对象,并关联到 CephObjectStore 对象;
3)创建 ObjectBucketClaim 对象,并指定其引用的 StorageClass 对象;
在实际的部署中,集群中已经存在 StorageClass ceph-bucket 对象,所以我们可以直接从(3)开始,即直接创建 Bucket 实例:
第一步、创建 Bucket 资源
cat > bucket-foo.yaml <<EOF apiVersion: objectbucket.io/v1alpha1 kind: ObjectBucketClaim metadata: name: ceph-bucket spec: bucketName: ceph-bkt-foo storageClassName: ceph-bucket EOF kubectl apply -f bucket-foo.yaml # 补充说明: # 1)在 Dashboard 中,将看到新创建的 Bucket 名称; # 2)bucketName 指定真正的 Bucket 名称;还有 generateBucketName 属性,建议阅读官方文档以了解两者区别; # 3)同时,将自动创建 能够访问该 Bucket 的用户,其用户名是随机的;
第二步、获取访问信息
#config-map, secret, OBC will part of default if no specific name space mentioned export AWS_HOST=$(kubectl -n default get cm ceph-bucket -o jsonpath='{.data.BUCKET_HOST}') export PORT=$(kubectl -n default get cm ceph-bucket -o jsonpath='{.data.BUCKET_PORT}') export BUCKET_NAME=$(kubectl -n default get cm ceph-bucket -o jsonpath='{.data.BUCKET_NAME}') export AWS_ACCESS_KEY_ID=$(kubectl -n default get secret ceph-bucket -o jsonpath='{.data.AWS_ACCESS_KEY_ID}' | base64 --decode) export AWS_SECRET_ACCESS_KEY=$(kubectl -n default get secret ceph-bucket -o jsonpath='{.data.AWS_SECRET_ACCESS_KEY}' | base64 --decode)
第三步、存储访问测试
kubectl exec -n rook-ceph -it rook-ceph-tools-6648b669df-l5dcr \ -- env \ AWS_HOST=$AWS_HOST \ PORT=$PORT \ BUCKET_NAME=$BUCKET_NAME \ AWS_ACCESS_KEY_ID=$AWS_ACCESS_KEY_ID \ AWS_SECRET_ACCESS_KEY=$AWS_SECRET_ACCESS_KEY \ bash mkdir ~/.aws cat > ~/.aws/credentials << EOF [default] aws_access_key_id = ${AWS_ACCESS_KEY_ID} aws_secret_access_key = ${AWS_SECRET_ACCESS_KEY} EOF # 上传文件 echo "Hello Rook" > /tmp/rookObj s5cmd --endpoint-url http://$AWS_HOST:$PORT cp /tmp/rookObj s3://$BUCKET_NAME # 下载文件 s5cmd --endpoint-url http://$AWS_HOST:$PORT cp s3://$BUCKET_NAME/rookObj /tmp/rookObj-download cat /tmp/rookObj-download