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 RGW |
NooBaa MCG |
| storageclass |
ocs-storagecluster-ceph-rgw |
openshift-storage-noobaa.io |
| protocol |
http |
https |
| port |
80 |
443 |
| region |
us-east-1 |
|
| Backend |
Ceph |
Ceph 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:
1 2 3 4 5 6 7 8
| 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 的前缀名称。
1 2 3 4 5 6
| 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
|
查看详细信息:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61
| 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 中的内容:
1 2 3 4 5 6 7 8 9 10
| oc extract configmap/obc-demo --to=-
s3.openshift-storage.svc
obc-demo-e12bde82-eb51-4e42-99d7-3559f67655f7
443
|
查看 secret 中的内容:
1 2 3 4 5
| oc extract secret/obc-demo --to=-
403F9cH6TCCGrq7FCi2C
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 环境变量中指定证书的路径,证书的路径可通过以下方式获取:
1 2
| oc extract configmap/serviceaccount-ca -n openshift-kube-controller-manager ca-bundle.crt
|
评论· · · · · ·