更新时间:2024-07-04 GMT+08:00
挂载第三方租户的对象存储
本章节介绍如何挂载第三方租户的OBS桶,包含OBS并行文件系统(优先)和OBS对象桶。
使用场景
SaaS服务提供商的CCE集群需要挂载使用第三方租户的OBS桶,使用场景如图1所示。
- 第三方租户授权SaaS服务提供商访问所拥有的对象存储,第三方租户对SaaS服务提供商需要访问的OBS对象桶或者并行文件系统设置桶策略和桶ACL。
- SaaS服务提供商静态导入第三方OBS对象桶和并行文件系统。
- SaaS服务提供商进行业务处理,最终需要将处理结果(结果文件或者结果数据)写回第三方租户的桶。
使用须知
- 仅支持挂载同一区域下的第三方租户的并行文件系统和对象桶。
- 仅已安装1.1.11及以上版本Everest存储插件的集群(集群版本需v1.15及以上),支持挂载第三方租户的OBS桶。
- CCE集群所在的SaaS服务提供商的业务平台需要管理第三方桶PV的生命周期,单独删除PVC时PV不会被关联删除而被保留(Kubernetes原生PV Retain回收策略的效果),需要调用Kubernetes原生接口进行静态PV的创建和删除。
第三方租户授权SaaS服务提供商访问所拥有的对象存储
以授权访问OBS对象桶为例介绍如何设置桶策略和桶ACL,OBS并行文件系统的设置方法和对象桶相同。
- 登录OBS控制台。
- 在桶列表单击待操作的桶,进入“概览”页面。
- 在左侧导航栏,单击“访问权限控制 > 桶策略”,在右侧单击“创建”。
图2 创建桶策略
- 效力:设置为“允许”。
- 被授权用户:选择其他账号,输入授权用户的账号ID和用户ID,桶策略对指定的用户生效。
- 授权资源:选择允许操作的资源。
- 授权操作:勾选可以操作的动作。
- 在左侧导航栏,单击“访问权限控制 > 桶ACLs”,在右侧单击“增加”,输入授权用户的账号ID,桶访问权限勾选“读取权限”、“对象读权限”和“写入权限”,ACL访问权限勾选“读取权限”和“写入权限”,单击“保存”。
SaaS服务提供商静态导入第三方OBS对象桶和并行文件系统
- OBS对象桶静态PV:
apiVersion: v1 kind: PersistentVolume metadata: name: objbucket #名称替换为实际的对象桶PV名称 annotations: pv.kubernetes.io/provisioned-by: everest-csi-provisioner spec: accessModes: - ReadWriteMany capacity: storage: 1Gi mountOptions: - default_acl=bucket-owner-full-control #新增的OBS挂载参数 csi: driver: obs.csi.everest.io fsType: s3fs volumeAttributes: everest.io/obs-volume-type: STANDARD everest.io/region: ap-southeast-1 #设置为当前区域id storage.kubernetes.io/csiProvisionerIdentity: everest-csi-provisioner volumeHandle: objbucket #名称替换为实际的第三方租户对象桶名称 persistentVolumeReclaimPolicy: Retain #必须设置为Retain,删除PV时保留桶实际也无法删除 storageClassName: csi-obs-mountoption #可以关联某个新增自定义OBS StorageClass, 也可关联集群自带的csi-obs
- mountOptions:新增的OBS挂载参数,允许桶所有者对桶中数据有完整的访问权限,解决挂载第三方桶后写入数据、桶所有者无法读取的问题。挂载第三方租户的对象存储使用场景下,default_acl必须设置为bucket-owner-full-control,default_acl的其他取值请参见OBS预定义的权限控制策略。
- persistentVolumeReclaimPolicy:挂载第三方租户的对象存储使用场景下,persistentVolumeReclaimPolicy必须设置为Retain。删除PV时保留桶实际也无法删除,因此CCE集群所在的SaaS服务提供商的业务平台需要管理第三方桶PV的生命周期,单独删除PVC时PV不会被关联删除而被保留(Kubernetes原生PV Retain回收策略的效果),需要调用Kubernetes原生接口进行静态PV的创建和删除。
- storageClassName:可以关联某个新增自定义OBS StorageClass(创建自定义OBS StorageClass),也可关联集群自带的csi-obs。
绑定的OBS对象桶PVC:apiVersion: v1 kind: PersistentVolumeClaim metadata: annotations: csi.storage.k8s.io/fstype: obsfs everest.io/obs-volume-type: STANDARD volume.beta.kubernetes.io/storage-provisioner: everest-csi-provisioner name: objbucketpvc #名称替换为实际的对象桶PVC名称 namespace: default spec: accessModes: - ReadWriteMany resources: requests: storage: 1Gi storageClassName: csi-obs-mountoption #与绑定的PV关联的StorageClass保持一致 volumeName: objbucket #名称替换为实际需要绑定的对象桶PV名称
- OBS并行文件系统静态PV:
apiVersion: v1 kind: PersistentVolume metadata: name: obsfscheck #名称替换为实际的并行文件系统PV名称 annotations: pv.kubernetes.io/provisioned-by: everest-csi-provisioner spec: accessModes: - ReadWriteMany capacity: storage: 1Gi mountOptions: - default_acl=bucket-owner-full-control #新增的OBS挂载参数 csi: driver: obs.csi.everest.io fsType: obsfs volumeAttributes: everest.io/obs-volume-type: STANDARD everest.io/region: ap-southeast-1 storage.kubernetes.io/csiProvisionerIdentity: everest-csi-provisioner volumeHandle: obsfscheck #名称替换为实际的三方租户的并行文件系统名称 persistentVolumeReclaimPolicy: Retain #必须设置为Retain,删除PV时保留桶实际也无法删除 storageClassName: csi-obs-mountoption #可以关联某个新增自定义OBS StorageClass,也可关联集群自带的csi-obs
- mountOptions:新增的OBS挂载参数,允许桶所有者对桶中数据有完整的访问权限,解决挂载第三方桶后写入数据、桶所有者无法读取的问题。挂载第三方租户的对象存储使用场景下,default_acl必须设置为bucket-owner-full-control,default_acl的其他取值请参见OBS预定义的权限控制策略。
- persistentVolumeReclaimPolicy:挂载第三方租户的对象存储使用场景下,persistentVolumeReclaimPolicy必须设置为Retain。删除PV时保留桶实际也无法删除,因此CCE集群所在的SaaS服务提供商的业务平台需要管理第三方桶PV的生命周期,单独删除PVC时PV不会被关联删除而被保留(Kubernetes原生PV Retain回收策略的效果),需要调用Kubernetes原生接口进行静态PV的创建和删除。
- storageClassName:可以关联某个新增自定义OBS StorageClass(创建自定义OBS StorageClass),也可关联集群自带的csi-obs。
绑定的OBS并行文件系统PVC:apiVersion: v1 kind: PersistentVolumeClaim metadata: annotations: csi.storage.k8s.io/fstype: obsfs everest.io/obs-volume-type: STANDARD volume.beta.kubernetes.io/storage-provisioner: everest-csi-provisioner name: obsfscheckpvc #名称替换为实际的并行文件系统PVC名称 namespace: default spec: accessModes: - ReadWriteMany resources: requests: storage: 1Gi storageClassName: csi-obs-mountoption #与绑定的PV关联的StorageClass保持一致 volumeName: obsfscheck #名称替换为实际的并行文件系统PV名称
- 创建自定义OBS StorageClass,用以关联静态PV(可选):
apiVersion: storage.k8s.io/v1 kind: StorageClass metadata: name: csi-obs-mountoption mountOptions: - default_acl=bucket-owner-full-control parameters: csi.storage.k8s.io/csi-driver-name: obs.csi.everest.io csi.storage.k8s.io/fstype: obsfs everest.io/obs-volume-type: STANDARD provisioner: everest-csi-provisioner reclaimPolicy: Retain volumeBindingMode: Immediate
- csi.storage.k8s.io/fstype:指定文件类型,支持“obsfs”与“s3fs”。取值为s3fs时说明使用的obs对象桶,配套使用s3fs挂载;取值为obsfs时说明使用的是obs并行文件系统,配套使用obsfs挂载。
- reclaimPolicy:指定创建的Persistent Volume的回收策略。该取值会设置到基于新的PVC关联该SC动态创建的PV.spec.persistentVolumeReclaimPolicy中。若设置为Delete,删除PVC时会触发关联删除外部OBS对象和该PV;若设置为Retain,删除PVC时会保留PV和外部存储,需要单独清理PV。对于使用导入关联三方桶对应的使用场景,该SC只做关联静态PV使用(需要设置为Retain),不涉及使用动态创建。