全部产品
Search
文档中心

容器服务 Kubernetes 版 ACK:使用OSS动态存储卷

更新时间:Dec 18, 2024

OSS存储卷支持同时被多个Pod挂载,适用于读文件且对磁盘I/O要求不高的场景,例如读配置文件、视频、图片文件等。除使用静态存储卷外,您也可以创建PVC并配置StorageClass来实现存储资源的动态分配,让系统为您自动预留持久化存储卷,无需预先手动创建和配置存储资源。您可以通过RRSA鉴权或者RAM用户AccessKey鉴权的任一方式进行权限配置并挂载使用OSS动态存储卷。

前提条件

  • 集群需为1.26及以上版本,CSI组件需为v1.31.4-9819c8b-aliyun及以上版本。集群默认已安装CSI组件,如需升级请参见手动升级集群升级csi-plugin和csi-provisioner

    说明

    如果您集群中使用Flexvolume组件,由于Flexvolume已废弃,请参见迁移Flexvolume至CSI完成迁移后再进行挂载。您可以在运维管理 > 组件管理,在存储页签下确认存储组件类型。

  • 已创建Bucket,Bucket与集群需使用同一账号操作。

    说明

    若Bucket和ECS实例位于相同地域,请选择私网域名。

  • 已通过kubectl连接集群

注意事项

  • OSS不建议跨账号使用。

  • 建议在使用OSS的Pod的YAML文件中增加健康检查配置,当容器内OSS目录不可用时,可自动重启Pod重新挂载OSS。

  • 若您在应用模板中配置了securityContext.fsgroup参数,kubelet在存储卷挂载完成后会执行chmodchown操作,导致挂载时间延长。若您已配置securityContext.fsgroup参数,且需要减少挂载时间,请参见OSS存储卷挂载时间延长

  • 通过ossfs进行ls等操作时,将发起HTTP请求到OSS获取文件的meta信息,如果ls的目标目录下文件较多(例如超过100,000个,该数值与机器内存大小相关),ossfs将消耗大量系统内存,可能导致Pod发生OOM(Out Of Memory)事件。您可以通过挂载OSS Bucket的子目录,或对文件较多的目录进行目录分级解决此问题。

  • ossfs适用于并发读场景,配置PVC和PV的访问模式为ReadOnlyMany。若需写入数据,建议您通过OSS SDK、ossutil工具等方式实现数据读写分离,同时配置OSS存储卷的访问模式为ReadWriteMany。具体操作,请参见OSS存储读写分离最佳实践

    重要
    • 在并发写场景中,ossfs无法保证数据写入的一致性。

    • 挂载状态下,登录应用Pod或宿主机,在挂载路径下删除或变更文件,都会直接删除或变更OSS Bucket中对应的源文件。您可以开启OSS Bucket的版本控制,避免误删除重要数据,请参见版本控制

  • 当传输的文件大于10 MB时,可以将文件切成碎片,分片上传。分片上传过程中断后,如您不再需要这些碎片,可以手动删除碎片通过生命周期规则删除碎片

通过RRSA鉴权方式挂载

基于适用于服务账户的RAM角色(RAM Roles for Service Accounts,简称RRSA)功能,您可以在集群内实现PV维度的OpenAPI权限隔离,从而实现云资源访问权限的细粒度隔离,降低安全风险。更多信息,请参见通过RRSA配置ServiceAccount的RAM权限实现Pod权限隔离

重要

RRSA鉴权方式挂载仅支持1.26及以上版本的集群,即ACK托管集群ACK Serverless集群,且集群使用的CSI组件为1.30.4及以上版本。若您在1.30.4之前的版本中使用了RRSA功能,请及时参见【产品变更】CSI ossfs版本升级与挂载流程优化增加RAM角色授权配置。

步骤一:创建RAM角色

如果您在集群中首次使用RRSA功能,需要按照以下步骤操作,如果您已经在集群中使用过RRSA鉴权方式挂载OSS存储卷,则可以跳过本步骤。

  1. 容器服务管理控制台启用RRSA功能。请参见启用RRSA功能

  2. 为OSS存储卷RRSA鉴权新建RAM角色,即使用RRSA功能扮演的指定角色。

    创建可信实体类型为身份供应商的RAM角色,以demo-role-for-rrsa为例。

    1. 使用阿里云账号登录RAM控制台

    2. 在左侧导航栏,选择身份管理 > 角色,然后在角色页面,单击创建角色

    3. 创建角色面板,选择可信实体类型为身份提供商,然后单击下一步

    4. 配置角色页面,配置如下角色信息后,单击完成

      本示例配置如下。

      配置项

      描述

      角色名称

      demo-role-for-rrsa。

      备注

      选填有关该角色的备注信息。

      身份提供商类型

      OIDC

      选择身份提供商

      ack-rrsa-<cluster_id>。其中,<cluster_id>为您的集群ID。

      限制条件

      • oidc:iss:保持默认。

      • oidc:aud:选择sts.aliyuncs.com

      • oidc:sub:条件判定方式选择StringEquals,此处需要填入system:serviceaccount:ack-csi-fuse:csi-fuse-ossfs

步骤二:为demo-role-for-rrsa角色授权

  1. 创建如下OSS访问的自定义权限策略。具体操作,请参见创建自定义权限策略

    以下只读和读写权限策略请根据使用需求选择,并替换mybucket为您实际创建的Bucket名称。

    • OSS只读权限策略

      展开查看OSS只读权限策略内容

      {
          "Statement": [
              {
                  "Action": [
                      "oss:Get*",
                      "oss:List*"
                  ],
                  "Effect": "Allow",
                  "Resource": [
                      "acs:oss:*:*:mybucket",
                      "acs:oss:*:*:mybucket/*"
                  ],
              }
          ],
          "Version": "1"
      }
    • OSS读写权限

      展开查看OSS读写权限策略内容

      {
          "Statement": [
              {
                  "Action": "oss:*",
                  "Effect": "Allow",
                  "Resource": [
                      "acs:oss:*:*:mybucket",
                      "acs:oss:*:*:mybucket/*"
                  ],
              }
          ],
          "Version": "1"
      }
  2. (可选)若您使用KMS托管的指定CMK ID加密OSS Object,还需要为该RAM用户配置KMS权限。具体操作,请参见为OSS存储卷加密

  3. 为demo-role-for-rrsa角色授权。具体操作,请参见为RAM角色授权

    说明

    您也可以通过修改RAM角色信任策略的方式使用已有的授权了OSS权限的RAM角色。具体操作,请参见使用已存在的RAM角色并授权

步骤三:创建存储类

  1. 将以下示例保存为sc-oss-rrsa.yaml,创建配置RRSA权限认证的OSS存储类。

    apiVersion: storage.k8s.io/v1
    kind: StorageClass
    metadata:
      name: sc-oss
    parameters:
      bucket: bucket  # 替换为实际Bucket名称。
      path: /ack
      url: oss-cn-beijing-internal.aliyuncs.com
      authType: rrsa
      roleName: demo-role-for-rrsa
      otherOpts: "-o allow_other"
      volumeAs: sharepath
    provisioner: ossplugin.csi.alibabacloud.com
    reclaimPolicy: Retain
    volumeBindingMode: Immediate

    参数

    说明

    name

    存储类名称。

    bucket

    需要挂载的OSS Bucket。

    path

    表示挂载时相对Bucket根文件的目录结构,默认为/(v1.14.8.32-c77e277b-aliyun及之后版本的CSI组件支持)。

    ossfs 1.91版本前,该路径需在OSS侧预先创建,详情请参见ossfs 1.91及以上版本新功能介绍及性能压测

    url

    挂载OSS的Endpoint,Endpoint以OSS控制台Bucket概览页为准。

    • 挂载节点和Bucket相同地域,或已打通VPC网络时,请使用内网地址。

    • 挂载节点和Bucket不同地域时,请使用外网地址。

    不同访问端口的常见填写格式如下:

    • 内网格式:http://oss-{{regionName}}-internal.aliyuncs.comhttps://oss-{{regionName}}-internal.aliyuncs.com

    • 外网格式:http://oss-{{regionName}}.aliyuncs.comhttps://oss-{{regionName}}.aliyuncs.com

    重要

    vpc100-oss-{{regionName}}.aliyuncs.com的内网访问端口格式已废弃,请及时切换。

    authType

    配置为rrsa,声明使用RRSA方式鉴权。

    roleName

    配置为以上步骤一:创建RAM角色中已创建或修改的RAM角色名称。若您需要为不同的StorageClass配置不同的权限,可以创建不同的RAM角色,在StorageClass中配置不同的roleName。

    otherOpts

    您可以为OSS存储卷输入定制化参数,格式为-o *** -o ***,例如-o umask=022 -o max_stat_cache_size=0 -o allow_other

    umask:用于更改ossfs读文件的权限。例如,设置umask=022后,ossfs文件的权限都会变更为755。通过SDK、OSS控制台等其他方式上传的文件在ossfs中默认权限均为640。因此,建议您在读写分离场景中配置umask权限。

    max_stat_cache_size:用于指定文件元数据的缓存空间,可缓存多少个文件的元数据。元数据缓存可加快ls操作速度。但若通过OSS、SDK、控制台、ossutil等方式修改文件,可能会导致元数据未被及时更新。

    allow_other:赋予计算机上其他用户访问挂载目录的权限,但不包含目录内的文件。

    更多可选参数,请参见ossfs挂载选项说明

    provisioner

    定义驱动类型。取值为ossplugin.csi.alibabacloud.com,表示使用阿里云OSS CSI插件。

    reclaimPolicy

    动态创建的PV的回收策略。当前OSS存储卷仅支持Retain,即删除PVC时,PV和OSS Bucket中的数据不会被删除。

    volumeBindingMode

    绑定模式。

    OSS存储卷无需考虑可用区间节点亲和,使用默认值Immediate即可。

    volumeAs

    存储卷访问模式。默认为sharepath模式。取值:

    • sharepath:即共享方式挂载,所有存储卷共享挂载路径,即数据将存储于<bucket>:<path>/下。

    • subpath:即子目录方式挂载,创建存储卷时在挂载路径下自动新建子目录,即数据将存储于<bucket>:<path>/<pv-name>/下。

      说明

      subpath模式仅在CSI组件为1.31.3及以上版本时生效,否则均为sharepath模式。

  2. 执行以下命令,创建存储类。

    kubetl apply -f sc-oss-rrsa.yaml

步骤四:创建存储声明

  1. 将以下示例保存为pvc-oss.yaml,创建存储声明。

    apiVersion: v1
    kind: PersistentVolumeClaim
    metadata:
      name: pvc-oss
    spec:
      accessModes:
      - ReadOnlyMany
      volumeMode: Filesystem
      resources:
        requests:
          storage: 20Gi
      storageClassName: sc-oss

    参数

    说明

    name

    PVC的名称。

    accessModes

    配置访问模式,支持ReadOnlyMany和ReadWriteMany。

    选择ReadOnlyMany时,ossfs将以只读模式挂载OSS Bucket。

    storage

    声明应用的使用量,此处设置的大小不会限制应用可使用的最大容量。

    storageClassName

    使用的存储类名称。

  2. 执行以下命令,创建存储声明。

    kubectl apply -f pvc-oss.yaml
  3. 执行以下命令,确认PVC已创建且进入绑定状态。

    kubectl get pvc pvc-oss

    预期输出:

    NAME           STATUS   VOLUME                                     CAPACITY   ACCESS MODES   STORAGECLASS         VOLUMEATTRIBUTESCLASS   AGE
    pvc-oss        Bound    oss-251d111d-3b0b-4879-81a0-eb5a19xxxxxx   20Gi       ROX            oss-rrsa             <unset>                 4d20h

步骤五:创建应用

  1. 将以下示例保存为oss-dynamic.yaml文件,创建应用并挂载存储声明。

    apiVersion: apps/v1
    kind: Deployment
    metadata:
      name: oss-dynamic
      labels:
        app: nginx
    spec:
      replicas: 2
      selector:
        matchLabels:
          app: nginx
      template:
        metadata:
          labels:
            app: nginx
        spec:
          containers:
          - name: nginx
            image: anolis-registry.cn-zhangjiakou.cr.aliyuncs.com/openanolis/nginx:1.14.1-8.6
            ports:
            - containerPort: 80
            volumeMounts:
              - name: pvc-oss
                mountPath: "/data"
              - name: pvc-oss
                mountPath: "/data1"
            livenessProbe:
              exec:
                command:
                - sh
                - -c
                - cd /data
              initialDelaySeconds: 30
              periodSeconds: 30
          volumes:
            - name: pvc-oss
              persistentVolumeClaim:
                claimName: pvc-oss
  2. 执行以下命令,部署应用。

    kubectl apply -f oss-dynamic.yaml
  3. 执行以下命令,查询应用副本的运行状态。

    kubectl get pod -lapp=nginx -w

    预期一段时间后,Pod进入Running状态。

通过RAM用户AccessKey鉴权方式挂载

重要
  • 使用该方式挂载时,如果OSS存储卷引用的AccessKey被撤销或取消授权,已经挂载了存储卷的应用将无权访问OSS并报权限错误。您需要修改Secret中的AccessKey信息并重新挂载,此操作将导致应用重启。AccessKey吊销后ossfs重挂载流程,请参见OSS存储挂载权限问题中场景4的解决方案。

  • 如果有定期轮转AccessKey的需求建议您通过RRSA鉴权方式挂载

您需要首先获取RAM用户的AccessKey信息,以使其拥有OSS Bucket的操作权限。

步骤一:创建具有OSS访问权限的RAM用户并获取AccessKey

您需要首先获取RAM用户的AccessKey信息,以使其拥有OSS Bucket的操作权限。

  1. 创建RAM用户,如已创建可跳过。具体操作,请参见创建RAM用户

  2. 创建如下OSS访问的自定义权限策略。具体操作,请参见创建自定义权限策略

    以下只读和读写权限策略请根据使用需求选择,并替换mybucket为您实际创建的Bucket名称。

    • OSS只读权限策略

      展开查看OSS只读权限策略内容

      {
          "Statement": [
              {
                  "Action": [
                      "oss:Get*",
                      "oss:List*"
                  ],
                  "Effect": "Allow",
                  "Resource": [
                      "acs:oss:*:*:mybucket",
                      "acs:oss:*:*:mybucket/*"
                  ],
              }
          ],
          "Version": "1"
      }
    • OSS读写权限

      展开查看OSS读写权限策略内容

      {
          "Statement": [
              {
                  "Action": "oss:*",
                  "Effect": "Allow",
                  "Resource": [
                      "acs:oss:*:*:mybucket",
                      "acs:oss:*:*:mybucket/*"
                  ],
              }
          ],
          "Version": "1"
      }
  3. (可选)若您使用KMS托管的指定CMK ID加密OSS Object,还需要为该RAM用户配置KMS权限。具体操作,请参见为OSS存储卷加密

  4. 为RAM用户添加OSS权限。具体操作,请参见为RAM用户授权

  5. 为RAM用户创建AccessKey。具体操作,请参见获取AccessKey

步骤二:创建存储类StorageClass和PVC并挂载

您可以通过控制台和kubectl两种方式创建存储类、存储声明并挂载至应用中。

控制台

1、创建存储类StorageClass

  1. 登录容器服务管理控制台,在左侧导航栏选择集群

  2. 集群列表页面,单击目标集群名称,然后在左侧导航栏,选择存储 > 存储类

  3. 存储类页面,单击创建

  4. 在弹出对话框中配置参数,设置完成后,单击创建

    配置项

    说明

    示例值

    名称

    存储类的名称。

    sc-oss

    存储卷类型

    选择OSS。

    OSS

    访问证书

    选择访问OSS所需的保密字典,即上一步获取的AccessKey ID和AccessKey Secret。

    • 选择已有保密字典:选择命名空间保密字典

    • 新建保密字典:配置命名空间名称AccessKey IDAccessKey Secret

    选择已有保密字典

    Bucket ID

    您要使用的OSS Bucket的名称。单击选择Bucket,在弹出的对话框中选择所需的Bucket并单击选择

    说明

    此处显示为已配置的AccessKey可获取到的Bucket列表。

    选择Bucket

    OSS Path

    表示挂载时相对Bucket根文件的目录结构,默认为/(v1.14.8.32-c77e277b-aliyun及之后版本的CSI组件支持)。

    ossfs 1.91版本前,该路径需在OSS侧预先创建,详情请参见ossfs 1.91及以上版本新功能介绍及性能压测

    /

    存储卷模式

    存储卷访问模式。默认为共享目录模式。取值:

    • 共享目录:即Sharepath方式挂载,所有存储卷共享挂载路径,即数据将存储于<bucket>:<path>/下。

    • 子目录:即Subpath方式挂载,创建存储卷时在挂载路径下自动新建子目录,即数据将存储于<bucket>:<path>/<pv-name>/下。

      说明

      子目录模式仅在CSI组件为1.31.3及以上版本时生效,否则均为共享目录模式。

    共享目录

    访问域名

    您可以参考以下情况选择需要的访问域名。

    • 如果Bucket和ECS实例位于不同地域(Region),请选择公网域名

    • 如果Bucket和ECS实例位于相同地域,请选择私网域名

      说明

      通过私网访问时,默认使用HTTP协议。若您需要指定网络传输协议为HTTPS,可使用kubectl命令行方式创建静态PV。

    私网域名

    回收策略

    动态创建的PV的回收策略。当前OSS存储卷仅支持Retain,即删除PVC时,PV和OSS Bucket中的数据不会被删除。

    Retain

    可选参数

    您可以为OSS存储卷输入定制化参数,格式为-o *** -o ***,例如-o umask=022 -o max_stat_cache_size=0 -o allow_other

    umask:用于更改ossfs读文件的权限。例如,设置umask=022后,ossfs文件的权限都会变更为755。通过SDK、OSS控制台等其他方式上传的文件在ossfs中默认权限均为640。因此,建议您在读写分离场景中配置umask权限。

    max_stat_cache_size:用于指定文件元数据的缓存空间,可缓存多少个文件的元数据。元数据缓存可加快ls操作速度。但若通过OSS、SDK、控制台、ossutil等方式修改文件,可能会导致元数据未被及时更新。

    allow_other:赋予计算机上其他用户访问挂载目录的权限,但不包含目录内的文件。

    更多可选参数,请参见ossfs挂载选项说明

    -o umask=022 -o max_stat_cache_size=0 -o allow_other

2、创建存储声明

  1. 集群列表页面,单击目标集群名称,然后在左侧导航栏,选择存储 > 存储声明

  2. 存储声明页面,单击创建

  3. 在弹出的对话框中配置参数,配置完成后,单击创建

    配置项

    说明

    示例值

    存储声明类型

    选择OSS。

    OSS

    名称

    存储声明PVC的名称。

    pvc-oss

    分配模式

    选择使用存储类动态创建

    使用存储类动态创建

    已有存储类

    单击选择存储类,在目标存储卷右侧操作列,单击选择,选择存储类。

    选择存储类

    总量

    声明应用的使用量,此处设置的大小不会限制应用可使用的最大容量。

    20Gi

    访问模式

    配置访问模式,支持ReadOnlyMany和ReadWriteMany。

    选择ReadOnlyMany时,ossfs将以只读模式挂载OSS Bucket。

    ReadOnlyMany

3、创建应用

  1. 集群列表页面,单击目标集群名称,然后在左侧导航栏,选择工作负载 > 无状态

  2. 无状态页面,单击使用镜像创建

  3. 配置创建应用的参数信息,配置完成后,单击创建

    主要参数如下,其他参数保持默认即可。更多信息,请参见创建无状态工作负载Deployment

    配置页

    参数

    说明

    示例

    应用基本信息

    应用名称

    Deployment名称,自定义输入。格式要求请参考界面提示。

    test-oss

    副本数量

    Deployment的副本数量。

    2

    容器配置

    镜像名称

    用于部署应用的镜像地址。

    anolis-registry.cn-zhangjiakou.cr.aliyuncs.com/openanolis/nginx:1.14.1-8.6

    所需资源

    所需的vCPU和内存资源。

    0.25 vCPU,0.5 GiB

    数据卷

    单击增加云存储声明,然后完成参数配置。

    • 挂载源:选择之前创建的PVC。

    • 容器路径:输入OSS要挂载到的容器路径。

    • 挂载源:pvc-oss

    • 容器路径:/data

    image.png

  4. 查看应用部署状态。

    1. 无状态页面,单击应用名称。

    2. 容器组页签下,确认Pod已正常运行(状态为Running)。

kubectl

1、创建存储类StorageClass

  1. 创建Secret,该Secret选择的Namespace需要和应用所在的Namespace一致。

    替换以下akIdakSecret为上一步获取的AccessKey ID和AccessKey Secret。

    kubectl create secret generic oss-secret --from-literal='akId=<yourAccessKey ID>' --from-literal='akSecret=<yourAccessKey Secret>'
  2. 将以下示例保存为sc-oss.yaml文件,创建存储类。

    apiVersion: storage.k8s.io/v1
    kind: StorageClass
    metadata:
      name: sc-oss
    parameters:
      bucket: bucket
      path: /ack
      url: oss-cn-beijing.aliyuncs.com
      csi.storage.k8s.io/node-publish-secret-name: oss-secret
      csi.storage.k8s.io/node-publish-secret-namespace: default
      otherOpts: '-o allow_other'
    provisioner: ossplugin.csi.alibabacloud.com
    reclaimPolicy: Retain
    volumeBindingMode: Immediate
    

    参数

    说明

    name

    存储类名称

    bucket

    需要挂载的OSS Bucket。

    path

    表示挂载时相对Bucket根文件的目录结构,默认为/(v1.14.8.32-c77e277b-aliyun及之后版本的CSI组件支持)。

    ossfs 1.91版本前,该路径需在OSS侧预先创建,详情请参见ossfs 1.91及以上版本新功能介绍及性能压测

    url

    挂载OSS的Endpoint,Endpoint以OSS控制台Bucket概览页为准。

    • 挂载节点和Bucket相同地域,或已打通VPC网络时,请使用内网地址。

    • 挂载节点和Bucket不同地域时,请使用外网地址。

    不同访问端口的常见填写格式如下:

    • 内网格式:http://oss-{{regionName}}-internal.aliyuncs.comhttps://oss-{{regionName}}-internal.aliyuncs.com

    • 外网格式:http://oss-{{regionName}}.aliyuncs.comhttps://oss-{{regionName}}.aliyuncs.com

    重要

    vpc100-oss-{{regionName}}.aliyuncs.com的内网访问端口格式已废弃,请及时切换。

    csi.storage.k8s.io/node-publish-secret-name

    存储AccessKey信息的Secret名称。

    csi.storage.k8s.io/node-publish-secret-namespace

    存储AccessKey信息的Secret所在的命名空间。

    otherOpts

    您可以为OSS存储卷输入定制化参数,格式为-o *** -o ***,例如-o umask=022 -o max_stat_cache_size=0 -o allow_other

    umask:用于更改ossfs读文件的权限。例如,设置umask=022后,ossfs文件的权限都会变更为755。通过SDK、OSS控制台等其他方式上传的文件在ossfs中默认权限均为640。因此,建议您在读写分离场景中配置umask权限。

    max_stat_cache_size:用于指定文件元数据的缓存空间,可缓存多少个文件的元数据。元数据缓存可加快ls操作速度。但若通过OSS、SDK、控制台、ossutil等方式修改文件,可能会导致元数据未被及时更新。

    allow_other:赋予计算机上其他用户访问挂载目录的权限,但不包含目录内的文件。

    更多可选参数,请参见ossfs挂载选项说明

    provisioner

    定义驱动类型。取值为ossplugin.csi.alibabacloud.com,表示使用阿里云OSS CSI插件。

    reclaimPolicy

    动态创建的PV的回收策略。当前OSS存储卷仅支持Retain,即删除PVC时,PV和OSS Bucket中的数据不会被删除。

    volumeBindingMode

    绑定模式。

    OSS存储卷无需考虑可用区间节点亲和,使用默认值Immediate即可。

    volumeAs

    存储卷访问模式。默认为sharepath模式。取值:

    • sharepath:即共享方式挂载,所有存储卷共享挂载路径,即数据将存储于<bucket>:<path>/下。

    • subpath:即子目录方式挂载,创建存储卷时在挂载路径下自动新建子目录,即数据将存储于<bucket>:<path>/<pv-name>/下。

      说明

      subpath模式仅在CSI组件为1.31.3及以上版本时生效,否则均为sharepath模式。

2、创建存储声明

创建存储声明操作同RRSA鉴权方式操作一致。具体操作,请参见上文步骤四:创建存储声明

3、创建应用

创建应用操作同RRSA鉴权方式操作一致。具体操作,请参见上文步骤五:创建应用

验证OSS的持久化存储和共享存储

  1. 查看部署oss-dynamic应用所在的Pod。

    kubectl get pod

    预期输出:

    NAME                             READY   STATUS    RESTARTS   AGE
    oss-dynamic-68f4945c46-h****      1/1     Running   0          1h
    oss-dynamic-68f4945c46-4****      1/1     Running   0          1h
  2. 在任意Pod下创建tmpfile文件。以名为oss-dynamic-68f4945c46-h****的Pod为例。

    • 若以ReadWriteMany方式挂载,执行以下命令,在/data路径下创建tmpfile文件。

      kubectl exec oss-dynamic-68f4945c46-h**** -- touch /data/tmpfile
    • 若以ReadOnlyMany方式挂载,可通过OSS控制台cp(上传文件)等方式上传tmpfile文件至OSS Bucket对应路径。

  3. 在两个Pod挂载路径下查看文件。

    以名oss-dynamic-68f4945c46-h****的Pod挂载路径为data,名为oss-dynamic-68f4945c46-4****的挂载路径为data1为例。

    kubectl exec oss-dynamic-68f4945c46-h**** -- ls /data | grep tmpfile
    kubectl exec oss-dynamic-68f4945c46-4**** -- ls /data1 | grep tmpfile

    预期输出:

    tmpfile

    预期输出表明,两个Pod的挂载路径下均存在此文件,说明两个Pod共享数据。

    说明

    若您无法看到预期输出,请确认CSI组件版本为v1.20.7及以上版本。更多信息,请参见csi-plugin

  4. 重建Pod。

    kubectl delete pod oss-dynamic-68f4945c46-h****

    预期输出:

    pod "oss-dynamic-68f4945c46-h****" deleted
  5. 验证Pod删除后,存储空间里创建的文件是否还存在。

    1. 执行以下命令,查看重建的Pod名称。

      kubectl get pod

      预期输出:

      NAME                             READY   STATUS    RESTARTS   AGE
      oss-dynamic-68f4945c46-4****      1/1     Running   0          1h
      oss-dynamic-68f4945c46-z****     1/1     Running   0          40s
    2. 执行以下命令,查看/data路径下的文件。

      kubectl exec oss-dynamic-68f4945c46-z**** -- ls /data | grep tmpfile

      预期输出:

      tmpfile

      预期输出表明,temfile文件仍然存在,说明OSS的数据可持久化保存。

相关文档