使用ossfs 1.0挂载静态OSS存储卷

ossfs 1.0 支持以静态存储卷的方式,通过PV/PVC 将已有的 OSS Bucket 挂载为持久化存储。该方式适用于并发读、少量随机写以及需要修改文件权限的通用场景,如挂载配置文件、图片或视频资源等。

适用范围

集群和CSI组件(csi-plugincsi-provisioner)版本需符合要求:

  • 通过RRSA鉴权方式挂载时:集群版本为1.26及以上,CSI版本为v1.30.4及以上。

    若在1.30.4之前的版本中使用了RRSA功能,需参见【产品变更】CSI ossfs版本升级与挂载流程优化增加RAM角色授权配置。
  • 通过AccessKey鉴权方式挂载时:为确保挂载稳定性,CSI版本建议不低于 v1.18.8.45。

如需升级集群,请参见手动升级集群;如需升级组件,请参见升级csi-plugincsi-provisioner

CSI v1.30.4-*版本起,OSS静态卷挂载已依赖csi-provisioner组件

步骤一:选择鉴权方式(RRSAAccessKey)并准备访问凭证

为确保集群能够安全、合规地访问OSS Bucket资源,需先配置一种鉴权机制。

  • RRSA鉴权方式:为 Pod 动态授予临时、自动轮换的 RAM 角色,实现应用级别的精细化权限隔离,安全性较高。

  • AccessKey鉴权方式:将静态、长期的密钥存储在 Secret 中。配置简单,但安全性较低。

重要
  • 1.26及以上版本的集群中,为避免因AccessKey轮转导致的ossfs重挂载和业务重启,建议使用RRSA鉴权方式。

  • 本示例中集群与OSS Bucket处于同一阿里云账号下。如需跨账号挂载OSS Bucket,建议使用RRSA鉴权方式。

RRSA方式

1. 在集群中启用RRSA

  1. ACK集群列表页面,单击目标集群名称,选择集群信息

  2. 基本信息页签的安全与审计区域,单击RRSA OIDC右侧的开启,按照页面提示在业务低峰期完成RRSA的启用。

    当集群状态由更新中变为运行中,表明RRSA已成功启用。

    重要

    启用RRSA功能后,集群内新创建的ServiceAccount Token的最大有效期将限制为12小时。

2. 创建RAM角色并授权

创建一个供 Pod 扮演的 RAM 角色,以通过 RRSA 鉴权来访问 OSS 存储卷。

展开查看步骤

  1. 创建一个RAM角色。

    1. 访问RAM控制台-创建角色页面,选择信任主体类型身份提供商,然后切换编辑器,进入可视化编辑页面。

    2. 选择主体身份提供商,单击编辑,参见以下说明完成配置。

      主要配置如下,其余参数保持默认即可。详见创建OIDC身份提供商的RAM角色

      配置项

      描述

      身份提供商类型

      OIDC

      身份提供商

      选择ack-rrsa-<cluster_id>。其中,<cluster_id>为集群ID。

      条件

      手动添加oidc:sub。

      • 条件键:选择oidc:sub

      • 运算符:选择StringEquals

      • 条件值:默认输入system:serviceaccount:ack-csi-fuse:csi-fuse-ossfs

      角色名称

      本示例为demo-role-for-rrsa。

  2. 创建权限策略。

    本示例遵循最小权限原则,创建一个自定义权限策略,授予访问目标OSS Bucket的权限(OSS只读权限或OSS读写权限)。

    1. 访问RAM控制台-创建权限策略页面,切换为脚本编辑,按照页面提示配置策略脚本。

      若已有授权OSS权限的RAM角色,修改其信任策略即可复用,请参见使用已存在的RAM角色并授权

      OSS只读权限策略

      替换<myBucketName>为实际Bucket名称。
      {
          "Statement": [
              {
                  "Action": [
                      "oss:Get*",
                      "oss:List*"
                  ],
                  "Effect": "Allow",
                  "Resource": [
                      "acs:oss:*:*:<myBucketName>",
                      "acs:oss:*:*:<myBucketName>/*"
                  ]
              }
          ],
          "Version": "1"
      }

      OSS读写权限策略

      替换<myBucketName>为实际Bucket名称。
      {
          "Statement": [
              {
                  "Action": "oss:*",
                  "Effect": "Allow",
                  "Resource": [
                      "acs:oss:*:*:<myBucketName>",
                      "acs:oss:*:*:<myBucketName>/*"
                  ]
              }
          ],
          "Version": "1"
      }
    2. (可选)使用KMS托管的指定CMK ID加密OSS Object时,还需为该角色配置KMS权限,详见使用KMS托管的指定CMK ID加密

  3. 将该策略授权给RAM角色。

    1. 访问RAM控制台-角色页面,在RAM角色列表的操作列,单击目标角色对应的新增授权

    2. 权限策略区域,按照页面提示搜索并选择上一步创建的权限策略,并完成授权的新增。

AccessKey方式

创建具有OSS访问权限的RAM用户并获取其AccessKey,使其拥有OSS Bucket的操作权限。

  1. 创建RAM用户(如有,可跳过)。

    访问RAM控制台-创建用户页面,按照页面提示完成RAM用户的创建,如登录名称、密码等。

  2. 创建权限策略。

    本示例遵循最小权限原则,创建一个自定义权限策略,授予访问目标OSS Bucket的权限(OSS只读权限或OSS读写权限)。

    1. 访问RAM控制台-创建权限策略页面,切换为脚本编辑,按照页面提示配置策略脚本。

      OSS只读权限策略

      替换<myBucketName>为实际Bucket名称。
      {
          "Statement": [
              {
                  "Action": [
                      "oss:Get*",
                      "oss:List*"
                  ],
                  "Effect": "Allow",
                  "Resource": [
                      "acs:oss:*:*:<myBucketName>",
                      "acs:oss:*:*:<myBucketName>/*"
                  ]
              }
          ],
          "Version": "1"
      }

      OSS读写权限策略

      替换mybucket为实际Bucket名称。
      {
          "Statement": [
              {
                  "Action": "oss:*",
                  "Effect": "Allow",
                  "Resource": [
                      "acs:oss:*:*:<myBucketName>",
                      "acs:oss:*:*:<myBucketName>/*"
                  ]
              }
          ],
          "Version": "1"
      }

      使用控制台创建PV时,还需拥有oss:ListBuckets权限。

      {
        "Effect": "Allow",
        "Action": "oss:ListBuckets",
        "Resource": "*"
      }
    2. (可选)使用KMS托管的指定CMK ID加密OSS Object时,还需为该RAM用户配置KMS权限,详见使用KMS托管的指定CMK ID加密

  3. 将该策略授权给RAM用户。

    1. 访问RAM控制台-用户页面,在RAM用户列表的操作列,单击目标用户对应的添加权限

    2. 权限策略区域,按照页面提示搜索并选择上一步创建的权限策略,并完成授权的新增。

  4. RAM用户创建AccessKey,以便后续将其存储为Secret,供PV使用。

    1. 访问RAM控制台-用户页面,在RAM用户列表单击目标用户,然后在AccessKey区域,单击创建 AccessKey

    2. 按照页面提示,在对话框进行AccessKey的创建,获取并妥善保管其AccessKey IDAccessKey Secret。

步骤二:创建PV

创建PV,在集群中“注册”已有的OSS Bucket。

RRSA方式

  1. 创建 pv-oss-rrsa.yaml

    apiVersion: v1
    kind: PersistentVolume
    metadata:
      # PV名称
      name: pv-oss   
      # PV标签
      labels:    
        alicloud-pvname: pv-oss
    spec:
      capacity:
        # 定义存储卷容量
        storage: 10Gi  
      # 访问模式
      accessModes:  
        - ReadOnlyMany
      persistentVolumeReclaimPolicy: Retain
      csi:
        driver: ossplugin.csi.alibabacloud.com
        # 与PV名称(metadata.name)一致
        volumeHandle: pv-oss  
        volumeAttributes:
          # 替换为实际Bucket名称
          bucket: "your-bucket-name"  
          # 挂载Bucket的根目录或指定子目录
          path: /  
          # Bucket所在地域的Endpoint
          url: "http://oss-cn-hangzhou-internal.aliyuncs.com"  
          otherOpts: "-o umask=022 -o max_stat_cache_size=100000 -o allow_other"
          authType: "rrsa"
          # 此前创建或修改的RAM角色
          roleName: "demo-role-for-rrsa"
          # OSS请求签名版本
          sigVersion: "v4"  

    参数

    描述

    storage

    定义OSS存储卷容量。此值仅用于匹配PVC。

    accessModes

    配置访问模式,支持ReadOnlyManyReadWriteMany

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

    persistentVolumeReclaimPolicy

    PV回收策略。当前OSS存储卷仅支持Retain,即删除PVC时,PVOSS Bucket中的数据不会随之删除。

    driver

    定义驱动类型。使用阿里云OSS CSI插件固定为ossplugin.csi.alibabacloud.com

    volumeHandle

    需与PV名称(metadata.name)保持一致。

    bucket

    待挂载的OSS Bucket。

    path

    CSI组件版本需为v1.14.8.32-c77e277b-aliyun及以上。

    指定挂载点相对于 Bucket 根目录的路径。默认为 /,即挂载整个 Bucket。

    ossfs版本小于1.91时,指定的 path 必须在 OSS Bucket 中预先存在。详见ossfs 1.91及以上版本新增功能说明

    url

    待挂载OSS访问域名(Endpoint)。

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

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

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

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

      内网访问端口格式vpc100-oss-{{regionName}}.aliyuncs.com已废弃,请及时切换。
    • 外网格式:http://oss-{{regionName}}.aliyuncs.comhttps://oss-{{regionName}}.aliyuncs.com

    otherOpts

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

    展开查看说明

    • umask:更改ossfs读文件的权限。

      例如,umask=022可将ossfs文件的权限变更为755,解决通过SDK、OSS控制台等其他方式上传的文件(默认权限为640)在挂载点内权限不足的问题。推荐在读写分离或多用户访问时配置。

    • max_stat_cache_size:设置元数据缓存的条目上限(例如100000),在内存中缓存文件元信息来提升 lsstat 等操作的性能。

      但该缓存无法及时感知通过OSS控制台、SDK、ossutil等方式对文件的修改,可能导致应用读取数据不一致。在对数据一致性有强要求时可将其设为0(禁用缓存),或通过stat_cache_expire参数调低缓存的失效时间,但会牺牲读取性能。

    • allow_other:允许除挂载用户外的其他用户访问挂载点中的文件和目录,适用于需要让非挂载用户也能访问数据的多用户共享环境。

    更多可选参数,请参见挂载选项说明ossfs 1.0配置最佳实践

    authType

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

    roleName

    配置为此前创建或修改的RAM角色。

    如需为不同PV配置不同权限,可创建不同的RAM角色,并在PV中配置不同的roleName

    sigVersion

    请求OSS服务端的请求签名版本。

    若默认的RRSA鉴权不满足需求(如使用非默认ServiceAccount或第三方OIDC),可通过修改PV配置来指定具体的ARNServiceAccount,详见如何在RRSA鉴权方式中使用指定的ARNsServiceAccount?
  2. 创建PV。

    kubectl create -f pv-oss-rrsa.yaml

AccessKey方式

kubectl

  1. 创建oss-secret.yaml,将步骤一获取的AccessKey存储为Secret,供PV使用。

    apiVersion: v1
    kind: Secret
    metadata:
      name: oss-secret
      # 需与应用所在的命令空间保持一致
      namespace: default
    stringData:
      # 替换为此前获取的AccessKey ID
      akId: <your AccessKey ID>
      # 替换为此前获取的AccessKey Secret
      akSecret: <your AccessKey Secret>
  2. 创建Secret。

    kubectl create -f  oss-secret.yaml
  3. 创建pv-oss-ram.yaml

    apiVersion: v1
    kind: PersistentVolume
    metadata:
      # PV 名称
      name: pv-oss
      # PV 标签
      labels:
        alicloud-pvname: pv-oss
    spec:
      capacity:
        storage: 10Gi
      accessModes:
        - ReadOnlyMany
      persistentVolumeReclaimPolicy: Retain
      csi:
        driver: ossplugin.csi.alibabacloud.com
        # 需与PV名称(metadata.name)保持一致
        volumeHandle: pv-oss  
        # 指定通过Secret对象来获取AccessKey信息
        nodePublishSecretRef:
          name: oss-secret
          namespace: default
        volumeAttributes:
          # 替换为实际Bucket名称
          bucket: "your-bucket-name"  
          url: "http://oss-cn-hangzhou-internal.aliyuncs.com"
          otherOpts: "-o umask=022 -o max_stat_cache_size=100000 -o allow_other"
          path: "/"

    参数

    描述

    storage

    定义OSS存储卷容量。此值仅用于匹配PVC。

    accessModes

    配置访问模式,支持ReadOnlyManyReadWriteMany

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

    persistentVolumeReclaimPolicy

    PV回收策略。当前OSS存储卷仅支持Retain,即删除PVC时,PVOSS Bucket中的数据不会随之删除。

    driver

    定义驱动类型。使用阿里云OSS CSI插件固定为ossplugin.csi.alibabacloud.com

    nodePublishSecretRef

    指定Secret,以在挂载PV时提供AccessKey信息。

    volumeHandle

    需与PV名称(metadata.name)保持一致。

    bucket

    待挂载的OSS Bucket。

    url

    待挂载OSS访问域名(Endpoint)。

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

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

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

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

      内网访问端口格式vpc100-oss-{{regionName}}.aliyuncs.com已废弃,请及时切换。
    • 外网格式:http://oss-{{regionName}}.aliyuncs.comhttps://oss-{{regionName}}.aliyuncs.com

    otherOpts

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

    展开查看说明

    • umask:更改ossfs读文件的权限。

      例如,umask=022可将ossfs文件的权限变更为755,解决通过SDK、OSS控制台等其他方式上传的文件(默认权限为640)在挂载点内权限不足的问题。推荐在读写分离或多用户访问时配置。

    • max_stat_cache_size:设置元数据缓存的条目上限(例如100000),在内存中缓存文件元信息来提升 lsstat 等操作的性能。

      但该缓存无法及时感知通过OSS控制台、SDK、ossutil等方式对文件的修改,可能导致应用读取数据不一致。在对数据一致性有强要求时可将其设为0(禁用缓存),或通过stat_cache_expire参数调低缓存的失效时间,但会牺牲读取性能。

    • allow_other:允许除挂载用户外的其他用户访问挂载点中的文件和目录,适用于需要让非挂载用户也能访问数据的多用户共享环境。

    更多可选参数,请参见挂载选项说明ossfs 1.0配置最佳实践

    path

    CSI组件版本需为v1.14.8.32-c77e277b-aliyun及以上。

    指定挂载点相对于 Bucket 根目录的路径。默认为 /,即挂载整个 Bucket。

    ossfs版本小于1.91时,指定的 path 必须在 OSS Bucket 中预先存在。详见ossfs 1.91及以上版本新增功能说明

    sigVersion

    请求OSS服务端的请求签名版本。

  4. 创建PV。

    kubectl create -f pv-oss-ram.yaml

控制台

  1. 步骤一获取的AccessKey存储为Secret,供PV使用。

    1. ACK集群列表页面,单击目标集群名称,在集群详情页左侧导航栏,选择配置管理 > 保密字典

    2. 单击使用YAML创建资源,按照页面提示,完成Secret的创建。

      apiVersion: v1
      kind: Secret
      metadata:
        name: oss-secret
        # 需与应用所在的命令空间保持一致
        namespace: default
      stringData:
        # 替换为此前获取的AccessKey ID
        akId: <your AccessKey ID>
        # 替换为此前获取的AccessKey Secret
        akSecret: <your AccessKey Secret>
  2. ACK集群列表页面,单击目标集群名称,在集群详情页左侧导航栏,选择存储 > 存储卷

  3. 存储卷页面,单击创建,选择存储卷类型OSS,按照页面配置并提交参数。

    关键参数如下。

    配置项

    说明

    总量

    所创建存储卷的容量。

    访问模式

    配置访问模式,支持ReadOnlyManyReadWriteMany

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

    访问证书

    配置访问OSS所需的保密字典,即步骤一获取的AccessKey IDAccessKey Secret。

    可选参数

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

    展开查看说明

    • umask:更改ossfs读文件的权限。

      例如,umask=022可将ossfs文件的权限变更为755,解决通过SDK、OSS控制台等其他方式上传的文件(默认权限为640)在挂载点内权限不足的问题。推荐在读写分离或多用户访问时配置。

    • max_stat_cache_size:设置元数据缓存的条目上限(例如100000),在内存中缓存文件元信息来提升 lsstat 等操作的性能。

      但该缓存无法及时感知通过OSS控制台、SDK、ossutil等方式对文件的修改,可能导致应用读取数据不一致。在对数据一致性有强要求时可将其设为0(禁用缓存),或通过stat_cache_expire参数调低缓存的失效时间,但会牺牲读取性能。

    • allow_other:允许除挂载用户外的其他用户访问挂载点中的文件和目录,适用于需要让非挂载用户也能访问数据的多用户共享环境。

    更多可选参数,请参见挂载选项说明ossfs 1.0配置最佳实践

    Bucket ID

    待使用的OSS Bucket。

    此处仅展示配置AccessKey后可获取到的Bucket。

    OSS Path

    CSI组件版本需为v1.14.8.32-c77e277b-aliyun及以上。

    指定挂载点相对于 Bucket 根目录的路径。默认为 /,即挂载整个 Bucket。

    ossfs版本小于1.91时,指定的 path 必须在 OSS Bucket 中预先存在。详见ossfs 1.91及以上版本新增功能说明

    访问域名

    待挂载OSS访问域名(Endpoint)。

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

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

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

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

      内网访问端口格式vpc100-oss-{{regionName}}.aliyuncs.com已废弃,请及时切换。
    • 外网格式:http://oss-{{regionName}}.aliyuncs.comhttps://oss-{{regionName}}.aliyuncs.com

    通过私网访问时默认使用HTTP协议。如需使用HTTPS,请使用kubectl方式。

步骤三:创建PVC

创建PVC,为应用声明其所需的持久化存储容量。

kubectl

  1. 创建pvc-oss.yaml

    apiVersion: v1
    kind: PersistentVolumeClaim
    metadata:
      # PVC 名称
      name: pvc-oss
      namespace: default
    spec:
      # 配置访问模式。ReadOnlyMany表明ossfs将以只读模式挂载OSS Bucket
      accessModes:
        - ReadOnlyMany
      resources:
        requests:
          # 声明存储容量,不能大于存储卷总量
          storage: 10Gi
      selector:
        matchLabels:
          # 通过PV标签精确匹配PV
          alicloud-pvname: pv-oss
  2. 创建PVC。

    kubectl create -f pvc-oss.yaml
  3. 确认PVC状态。

    kubectl get pvc pvc-oss

    输出中,PVC已绑定(Bound)PV。

    NAME      STATUS   VOLUME   CAPACITY   ACCESS MODES   STORAGECLASS   VOLUMEATTRIBUTESCLASS   AGE
    pvc-oss   Bound    pv-oss   10Gi       ROX                           <unset>                 6s

控制台

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

  2. 存储声明页面,单击创建,选择存储声明类型OSS,按照页面提示完成参数的配置和提交。

    关键参数如下。

    配置项

    说明

    分配模式

    选择已有存储卷。

    若未创建存储卷,可设置分配模式创建存储卷,配置创建存储卷参数。

    总量

    所创建存储卷的容量,不超过存储卷容量。

步骤四:创建应用并挂载存储卷

在应用中引用PVC,完成挂载。

kubectl

  1. 创建oss-static.yaml

    apiVersion: apps/v1
    kind: Deployment
    metadata:
      name: oss-static
      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"
            # 配置健康检查
            livenessProbe:
              exec:
                command:
                - ls
                - /data
              initialDelaySeconds: 30
              periodSeconds: 30
          volumes:
            - name: pvc-oss
              persistentVolumeClaim:
                # 引用此前创建的PVC
                claimName: pvc-oss
  2. 创建应用。

    kubectl create -f oss-static.yaml
  3. 验证挂载结果。

    • 确认Pod处于Running状态。

      kubectl get pod -l app=nginx
    • 进入Pod,查看挂载点。

      kubectl exec -it <pod-name> -- ls /data

      输出中,可查看OSS挂载路径下的数据。

控制台

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

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

  3. 单击使用镜像创建,按照页面提示配置应用参数。

    关键参数如下,其他参数保持默认即可。详见创建无状态工作负载Deployment

    配置页

    参数

    说明

    应用基本信息

    副本数量

    Deployment副本数量。

    容器配置

    镜像名称

    用于部署应用的镜像地址,如anolis-registry.cn-zhangjiakou.cr.aliyuncs.com/openanolis/nginx:1.14.1-8.6

    所需资源

    所需的vCPU和内存资源。

    数据卷

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

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

    • 容器路径:输入OSS要挂载到的容器路径,如/data

    标签和注解

    Pod标签

    如名称为app,值为nginx。

  4. 查看应用部署状态。

    无状态页面,单击应用名称,在容器组页签下,确认Pod已正常运行(状态为Running)。

步骤五:验证共享存储和持久化存储

验证共享存储

在一个Pod中创建文件,然后在另一个Pod中查看,以验证共享存储特性。

  1. 查看Pod信息,在输出中获取Pod名称。

    kubectl get pod -l app=nginx
  2. 在一个Pod中创建tmpfile文件。 以名为 oss-static-66fbb85b67-d**** 的Pod为例:

    • ReadWriteMany:在/data路径下创建tmpfile文件。

      kubectl exec oss-static-66fbb85b67-d**** -- touch /data/tmpfile
    • ReadOnlyMany:通过OSS控制台cp(上传文件)等方式上传tmpfile文件至OSS Bucket对应的路径。

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

    以名为oss-static-66fbb85b67-l****、挂载路径为dataPod为例。

    kubectl exec oss-static-66fbb85b67-l**** -- ls /data | grep tmpfile

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

    tmpfile
    若无预期输出,请确认CSI组件版本是否为v1.20.7及以上版本。

验证持久化存储

删除并重建Pod,在新建的Pod中查看文件是否存在,验证数据的持久化存储。

  1. 删除一个应用Pod以触发重建。

    kubectl delete pod oss-static-66fbb85b67-d****
  2. 查看Pod,等待新Pod启动并进入Running状态。

    kubectl get pod -l app=nginx
  3. 查看/data路径下的文件。

    以名为oss-static-66fbb85b67-z****、挂载路径为dataPod为例。

    kubectl exec oss-static-66fbb85b67-z**** -- ls /data | grep tmpfile

    预期输出如下,tmpfile文件仍存在,表明数据可持久化存储。

    tmpfile

功能已知影响

  • 数据完整性风险

    • 并发写一致性风险:为提升写操作稳定性,建议升级CSI组件v1.28及以上版本。但对于单文件并发写场景,OSS的“覆盖上传”特性仍可能导致数据覆盖,需在应用层保障数据一致性。

    • 数据同步与误删风险:挂载状态下,在应用Pod或宿主机上对挂载路径下的文件删除或变更操作会直接同步到OSS Bucket源文件。为避免数据误删除,建议为OSS Bucket开启版本控制

  • 应用稳定性风险

    • OOM风险:初次对大量文件(如超10万,具体取决于节点内存)进行readdir操作时(如Shell脚本中的ls命令),ossfs会因一次性加载全部元信息而消耗大量内存,可能导致进程OOM Killed,并引发挂载点不可用。

      建议挂载OSS Bucket子目录或优化目录层级来规避此风险。

    • 挂载时间延长:在应用中配置securityContext.fsgroup会导致kubelet在挂载存储卷时递归修改文件权限(chmod/chown)。若文件数量庞大,将显著延长挂载时间,可能导致 Pod 启动严重延迟。

      配置此参数时,如需减少挂载时间,请参见OSS存储卷挂载时间延长

    • 密钥失效风险(AccessKey鉴权方式):若PV引用的AccessKey失效或权限变更,关联应用会立即失去访问权限。

      恢复访问需更新Secret中的凭证,并重启应用Pod以强制重新挂载(将导致业务中断),请在维护窗口期执行。详见解决方案

  • 成本风险

相关文档

  • 可通过CNFS托管OSS存储卷,以提升其性能和QoS控制,请参见管理OSS生命周期

  • 为保护OSS中的静态敏感数据,建议开启服务端加密,请参见加密ossfs 1.0存储卷

  • 关于ossfsOSS的常见问题,请参见ossfs 1.0ossfs 1.0存储卷FAQ

  • 启用容器存储监控配置告警,及时发现存储卷的异常或性能瓶颈。

  • ossfs 2.0相比,ossfs 1.0在随机写和并发写场景下能提供更可靠的数据一致性保障。但对于顺序读写场景,ossfs 2.0性能更优。