更新时间:2024-12-04 GMT+08:00

挂载第三方租户的对象存储

本章节介绍如何挂载第三方租户的OBS桶,包含OBS并行文件系统(优先)和OBS对象桶。

使用场景

SaaS服务提供商的CCE集群需要挂载使用第三方租户的OBS桶,使用场景如图1所示。

图1 挂载第三方租户的对象存储使用场景
  1. 第三方租户授权SaaS服务提供商访问所拥有的对象存储,第三方租户对SaaS服务提供商需要访问的OBS对象桶或者并行文件系统设置桶策略和桶ACL。
  2. SaaS服务提供商静态导入第三方OBS对象桶和并行文件系统
  3. SaaS服务提供商进行业务处理,最终需要将处理结果(结果文件或者结果数据)写回第三方租户的桶。

使用须知

  • 仅支持挂载同一区域下的第三方租户的并行文件系统和对象桶。
  • 仅已安装1.1.11及以上版本Everest存储插件的集群(集群版本需v1.15及以上),支持挂载第三方租户的OBS桶。
  • CCE集群所在的SaaS服务提供商的业务平台需要管理第三方桶PV的生命周期,单独删除PVC时PV不会被关联删除而被保留(Kubernetes原生PV Retain回收策略的效果),需要调用Kubernetes原生接口进行静态PV的创建和删除。

第三方租户授权SaaS服务提供商访问所拥有的对象存储

以授权访问OBS对象桶为例介绍如何设置桶策略和桶ACL,OBS并行文件系统的设置方法和对象桶相同。

  1. 登录OBS控制台。
  2. 在桶列表单击待操作的桶,进入“概览”页面。
  1. 在左侧导航栏,单击“访问权限控制”,在右侧选择桶策略,在自定义策略下单击“创建桶策略”。

    • 策略类型:选择“自定义”。
    • 允许:设置为“允许”。
    • 被授权用户:选择包含 > 云服务用户,输入账号ID和用户ID,桶策略对指定的用户生效。
    • 资源:选择允许操作的资源。
    • 动作:勾选可以操作的动作。

  2. 在左侧导航栏,单击“访问权限控制”,在右侧选择“桶ACL”,单击“增加”,输入授权用户的账号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:        #设置为当前区域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
    • 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:   
          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
    • 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),不涉及使用动态创建。