ODF 05:使用 ODF 对象存储

ODF 默认创建了两种提供对象存储的存储类:

  • ocs-storagecluster-ceph-rgw Ceph RADOS 对象网关
  • openshift-storage-noobaa.io 多云对象网关

OBC

OBC(Object Bucket Claim) 类似于 PVC(Persistent Volume Claim),通过 OBC 可以请求兼容 S3 的 bucket。

ODF 提供了两个 Operator 提供存储类,Ceph RGW 和 NooBaa MCG,它们之间的区别:

属性Ceph RGWNooBaa MCG
storageclassocs-storagecluster-ceph-rgwopenshift-storage-noobaa.io
protocolhttphttps
port80443
regionus-east-1
BackendCephCeph or S3

S3 端点

Ceph RGW 使用 openshift-storage 项目中的 rook-ceph-rgw-ocs-storagecluster-cephobjectstore SVC,在集群内部可以通过 rook-ceph-rgw-ocs-storagecluster-cephobjectstore.openshift-storage.svc 进行访问。
同时在项目中也通过 route 资源将该 SVC 暴露了,意味着可以在集群外部进行访问。
Ceph RGW 使用的是 http 协议 80 端口。

NooBaa MCG 也是使用 openshift-storage 项目中的 s3 SVC,在内部使用 s3.openshift-storage.svc 进行访问,同时也通过 route 暴露了 svc,可在外部访问。
NooBaa MCG 使用的是 https 协议 443 端口。

OBC 示例

以下是创建 OBC 资源的示例,在 default 项目中创建一个 obc-demo 的 OBC:

apiVersion: objectbucket.io/v1alpha1
kind: ObjectBucketClaim
metadata:
  name: obc-demo 
  namespace: obc-demo
spec:
  storageClassName: openshift-storage.noobaa.io 
  generateBucketName: obc-demo

这里使用的存储类是 NooBaa MCG 也可以替换成 Ceph RGW。
generateBucketName 是声明创建的 Bucket 的前缀名称。

oc apply -f obc-demo.yaml 
objectbucketclaim.objectbucket.io/obc-demo created

oc get obc
NAME       STORAGE-CLASS                 PHASE   AGE
obc-demo   openshift-storage.noobaa.io   Bound   4s

查看详细信息:

oc describe obc obc-demo
Name:         obc-demo
Namespace:    obc-demo
Labels:       app=noobaa
              bucket-provisioner=openshift-storage.noobaa.io-obc
              noobaa-domain=openshift-storage.noobaa.io
Annotations:  <none>
API Version:  objectbucket.io/v1alpha1
Kind:         ObjectBucketClaim
Metadata:
  Creation Timestamp:  2024-02-08T23:13:11Z
  Finalizers:
    objectbucket.io/finalizer
  Generation:  4
  Managed Fields:
    API Version:  objectbucket.io/v1alpha1
    Fields Type:  FieldsV1
    fieldsV1:
      f:metadata:
        f:annotations:
          .:
          f:kubectl.kubernetes.io/last-applied-configuration:
      f:spec:
        .:
        f:generateBucketName:
        f:storageClassName:
    Manager:      kubectl-client-side-apply
    Operation:    Update
    Time:         2024-02-08T23:13:11Z
    API Version:  objectbucket.io/v1alpha1
    Fields Type:  FieldsV1
    fieldsV1:
      f:metadata:
        f:finalizers:
          .:
          v:"objectbucket.io/finalizer":
        f:labels:
          .:
          f:app:
          f:bucket-provisioner:
          f:noobaa-domain:
      f:spec:
        f:bucketName:
        f:objectBucketName:
      f:status:
        .:
        f:phase:
    Manager:         noobaa-operator
    Operation:       Update
    Time:            2024-02-08T23:13:12Z
  Resource Version:  158763
  Self Link:         /apis/objectbucket.io/v1alpha1/namespaces/obc-demo/objectbucketclaims/obc-demo
  UID:               7e8c9770-8315-4767-a3c2-7ee0f7039e34
Spec:
  Bucket Name:           obc-demo-e12bde82-eb51-4e42-99d7-3559f67655f7
  Generate Bucket Name:  obc-demo
  Object Bucket Name:    obc-obc-demo-obc-demo
  Storage Class Name:    openshift-storage.noobaa.io
Status:
  Phase:  Bound
Events:   <none>

使用 OBC 资源

对象存储不想文件存储或块存储直接挂载到容器中,而是通过 API 进行使用。

当创建 OBC 时,API Server 会创建关联的资源:

  • object bucket 这种资源不属于特定的命名空间
  • configmap 包含 S3 Endpoint 和 S3 Bucket 名称
  • secret 用于访问 S3 API 身份验证密钥

查看 configmap 中的内容:

oc extract configmap/obc-demo --to=-
# BUCKET_SUBREGION

# BUCKET_HOST
s3.openshift-storage.svc
# BUCKET_NAME
obc-demo-e12bde82-eb51-4e42-99d7-3559f67655f7
# BUCKET_PORT
443
# BUCKET_REGION

查看 secret 中的内容:

oc extract secret/obc-demo --to=-
# AWS_ACCESS_KEY_ID
403F9cH6TCCGrq7FCi2C
# AWS_SECRET_ACCESS_KEY
yYyldLt3tqwRxCCQ+4mUglQRq3LWJtD5JqcyviVx

在 Pod 中使用 S3 访问 object bucket 需要从 configmap 导出变量和相关的 secret,通常会导出以下变量:

  • BUCKET_HOST
  • BUCKET_PORT
  • BUCKET_NAME
  • AWS_ACCESS_KEY_ID
  • AWS_SECRET_ACCESS_KEY

如果使用私有 CA 签名的证书时,还需在 AWS_CA_BUNDLE 环境变量中指定证书的路径,证书的路径可通过以下方式获取:

oc extract configmap/serviceaccount-ca -n openshift-kube-controller-manager
ca-bundle.crt

发表评论

您的电子邮箱地址不会被公开。 必填项已用 * 标注

滚动至顶部