Todos los productos
Search
Centro de documentos

Container Service for Kubernetes:Mount OSS buckets using ossfs 1.0 dynamic volumes

Última actualización: Sep 20, 2026

ossfs 1.0 es compatible con dynamic provisioning. Esta función crea automáticamente un volumen persistente (PV) y monta un OSS Bucket a partir de una StorageClass y un PersistentVolumeClaim (PVC). Así se elimina la configuración manual del PV y se simplifica considerablemente la gestión del almacenamiento. Es ideal para entornos multiinquilino o escenarios que requieren aprovisionamiento frecuente y bajo demanda.

Requisitos

Su clúster y los componentes CSI (csi-plugin y csi-provisioner) deben cumplir los siguientes requisitos:

  • Para la autenticación mediante RAM Roles for Service Accounts (RRSA): el clúster debe tener la versión 1.26 o posterior, y la versión de CSI debe ser v1.30.4 o posterior.

    Si utilizó la función RRSA en una versión anterior a la v1.30.4, consulte [[Product Change] CSI ossfs version upgrade and mount process optimization](t2763435.xdita#) para agregar la configuración de autorización del rol de RAM obligatoria.
  • Para la autenticación mediante AccessKey: se recomienda usar la versión v1.18.8.45 o posterior de CSI para garantizar la estabilidad del montaje.

Para actualizar su clúster, consulte Manually upgrade a cluster. Para actualizar los componentes CSI, consulte Upgrade CSI components.

A partir de CSI v1.30.4-*, mounting OSS static volumes depends on the csi-provisioner component .

Paso 1: Elija un método de autenticación

Para garantizar que su clúster acceda a los recursos del bucket de OSS de forma segura y conforme a las normativas, primero debe configurar un método de autenticación.

  • RRSA authentication: otorga de forma dinámica roles de RAM temporales y con rotación automática a los pods. Esto permite aislar los permisos a nivel de aplicación con gran precisión. Este método es más seguro.

  • AccessKey authentication: almacena claves estáticas de larga duración en un Secret. Este método es más sencillo de configurar, pero menos seguro.

Importante
  • En clústeres con la versión 1.26 o posterior, se recomienda la autenticación RRSA. De este modo se evitan los reinicios de cargas de trabajo y los remontajes de ossfs causados por la rotación del AccessKey.

  • Este ejemplo asume que el clúster y OSS Bucket pertenecen a la misma cuenta de Alibaba Cloud. Para mount an OSS Bucket that belongs to another account, se recomienda utilizar la autenticación RRSA.

RRSA

1. Habilite RRSA en su clúster

  1. En la página ACK Clusters, haga clic en el nombre de su clúster. En el panel de navegación izquierdo, haga clic en Cluster Information.

  2. En la pestaña Basic Information, dentro de la sección Security and Auditing, haga clic en Enabled junto a RRSA OIDC. Siga las instrucciones en pantalla para habilitar RRSA durante las horas de menor actividad.

    Cuando el estado del clúster cambie de Updating a Running, RRSA estará habilitado.

    Importante

    Después de habilitar RRSA, el periodo máximo de validez de los nuevos tokens de ServiceAccount creados en el clúster se limita a 12 horas.

2. Cree y autorice un rol de RAM

Cree un rol de RAM que sus pods puedan asumir para acceder al volumen de almacenamiento de OSS con autenticación RRSA.

Consulte los pasos

  1. Cree un rol de RAM.

    1. Vaya a la página Create Role en la consola de RAM. En Principal Type, seleccione IdP. Luego, haga clic en Switch to Policy Editor para abrir el Visual Editor.

    2. En Principal, seleccione IdP. Haga clic en Edit y configure los parámetros como se describe en la siguiente tabla.

      Configure los parámetros principales y mantenga los valores predeterminados para el resto. Para obtener más información, consulte Create a RAM role for an OIDC identity provider .

      Parámetro

      Descripción

      IdP Type

      OIDC.

      IdP

      Seleccione ack-rrsa-<cluster_id>, donde <cluster_id> es el identificador de su clúster.

      Condition

      Agregue oidc:sub manualmente.

      • Clave de condición: seleccione oidc:sub.

      • Operador: seleccione StringEquals.

      • Valor de condición: introduzca system:serviceaccount:ack-csi-fuse:csi-fuse-ossfs.

      Role Name

      Por ejemplo, introduzca demo-role-for-rrsa.

  2. Cree una directiva de acceso.

    Este ejemplo sigue el principio de privilegio mínimo. Consulte Create a custom policy para otorgar acceso al bucket de OSS de destino. Puede conceder permisos de solo lectura o de lectura y escritura.

    1. Vaya a la página Create Policy en la consola de RAM, cambie al JSON Editor y configure el script de la directiva.

      Si ya tiene un rol de RAM con permisos de OSS, puede reutilizarlo si modifica su directiva de confianza. Para obtener más información, consulte Use an existing RAM role and grant permissions .

      Directiva de solo lectura

      Reemplace por el nombre real del bucket.
      {
          "Statement": [
              {
                  "Action": [
                      "oss:Get*",
                      "oss:List*"
                  ],
                  "Effect": "Allow",
                  "Resource": [
                      "acs:oss:*:*:<myBucketName>",
                      "acs:oss:*:*:<myBucketName>/*"
                  ]
              }
          ],
          "Version": "1"
      }

      Directiva de lectura y escritura de OSS

      Reemplace <myBucketName> por el nombre real del bucket.
      {
          "Statement": [
              {
                  "Action": "oss:*",
                  "Effect": "Allow",
                  "Resource": [
                      "acs:oss:*:*:<myBucketName>",
                      "acs:oss:*:*:<myBucketName>/*"
                  ]
              }
          ],
          "Version": "1"
      }
    2. (Opcional) Si utiliza un identificador de CMK específico administrado por KMS para cifrar los objetos de OSS, también debe otorgar permisos de KMS al rol. Para obtener más información, consulte Use a specific CMK ID managed by KMS to encrypt data.

  3. Adjunte la directiva de acceso al rol de RAM.

    1. Vaya a la página Roles en la consola de RAM, busque el rol que creó y, en la columna Actions, haga clic en Attach Policy.

    2. En la sección Policies, busque y seleccione la directiva de acceso que creó.

AccessKey

Cree un usuario de RAM con permisos para acceder al bucket de OSS de destino y luego obtenga un AccessKey para ese usuario.

  1. Cree un usuario de RAM. Puede omitir este paso si ya cuenta con uno.

    Vaya a la página Create User en la consola de RAM y siga las instrucciones en pantalla para crear un usuario de RAM. Debe especificar parámetros como el nombre de inicio de sesión y la contraseña.

  2. Cree una directiva de acceso.

    Este ejemplo sigue el principio de privilegio mínimo. Consulte Create a custom policy para otorgar acceso al bucket de OSS de destino. Puede conceder permisos de solo lectura o de lectura y escritura.

    1. Vaya a la página Create Policy en la consola de RAM, cambie al JSON Editor y configure el script de la directiva.

      Directiva de solo lectura

      Reemplace <myBucketName> por el nombre real del bucket.
      {
          "Statement": [
              {
                  "Action": [
                      "oss:Get*",
                      "oss:List*"
                  ],
                  "Effect": "Allow",
                  "Resource": [
                      "acs:oss:*:*:<myBucketName>",
                      "acs:oss:*:*:<myBucketName>/*"
                  ]
              }
          ],
          "Version": "1"
      }

      Directiva de lectura y escritura de OSS

      Reemplace <myBucketName> por el nombre real del bucket.
      {
          "Statement": [
              {
                  "Action": "oss:*",
                  "Effect": "Allow",
                  "Resource": [
                      "acs:oss:*:*:<myBucketName>",
                      "acs:oss:*:*:<myBucketName>/*"
                  ]
              }
          ],
          "Version": "1"
      }

      Si desea crear un PV en la consola, también necesita el permiso oss:ListBuckets.

      {
        "Effect": "Allow",
        "Action": "oss:ListBuckets",
        "Resource": "*"
      }
    2. (Opcional) Si utiliza un identificador de CMK específico administrado por KMS para cifrar los objetos de OSS, también debe otorgar permisos de KMS al usuario de RAM. Para obtener más información, consulte Use a specific CMK ID managed by KMS to encrypt data.

  3. Adjunte la directiva de acceso al usuario de RAM.

    1. Vaya a la página Users en la consola de RAM, busque el usuario que creó y, en la columna Actions, haga clic en Add Permissions.

    2. En la sección Policies, busque y seleccione la directiva de acceso que creó.

  4. El AccessKey que cree se almacenará como un Secret para el PV.

    1. Vaya a la página Users en la consola de RAM, haga clic en el nombre de su usuario de RAM y, en la sección AccessKey, haga clic en Create AccessKey.

    2. Siga las instrucciones en pantalla para crear un AccessKey. Copie y guarde de forma segura el AccessKey ID y el AccessKey Secret.

Paso 2: Cree una StorageClass

Cree una StorageClass para definir una plantilla de aprovisionamiento de volúmenes persistentes.

Método RRSA

  1. Cree un archivo llamado sc-oss.yaml.

    apiVersion: storage.k8s.io/v1
    kind: StorageClass
    metadata:
      name: sc-oss
    parameters:
      # Replace with the name of your OSS bucket.
      bucket: bucket  
      # Replace with the region of your OSS bucket.
      region: cn-hangzhou
      # The mount path relative to the bucket's root directory. You can specify a subdirectory.
      path: /
      # The endpoint of the region where the bucket is located.
      url: "https://oss-cn-hangzhou-internal.aliyuncs.com"  
      # Use the RRSA method for authentication.
      authType: rrsa
      # The RAM role that you created or modified.
      roleName: demo-role-for-rrsa
      # Custom parameters.
      otherOpts: "-o umask=022 -o max_stat_cache_size=100000 -o allow_other"
      # The volume access mode.
      volumeAs: sharepath
      # The signature version for requests sent to the OSS server.
      sigVersion: "v4" 
    # Fixed value for the Alibaba Cloud OSS CSI plug-in.
    provisioner: ossplugin.csi.alibabacloud.com
    # The reclaim policy for the dynamically provisioned persistent volume.

    Parámetro

    Descripción

    bucket

    El bucket de OSS que se va a montar.

    region

    Cuando utilice la firma v4 de OSS, establezca este valor en la región de OSS donde se encuentra el bucket. Para consultar la región de OSS, consulte Query the region of a bucket.

    Cuando se configura este parámetro, se usa automáticamente v4 como versión de la firma de OSS.

    path

    La versión del componente CSI debe ser v1.14.8.32-c77e277b-aliyun o posterior.

    La ruta de montaje relativa al directorio raíz del bucket. El valor predeterminado es /, lo que monta todo el bucket.

    Si la ossfs version es anterior a la 1.91, la path especificada debe existir en el bucket de OSS. Para obtener más información, consulte New features in ossfs 1.91 and later.

    url

    El endpoint del bucket de OSS que se va a montar.

    • Utilice un endpoint interno si el nodo de montaje y el bucket están en la misma región, o si se estableció una conexión VPC.

    • Utilice un endpoint público si el nodo de montaje y el bucket están en regiones distintas.

    A continuación se muestran los formatos comunes para los distintos puertos de acceso:

    • Formato de red interna: https://oss-{{regionName}}-internal.aliyuncs.com.

      El formato de endpoint interno vpc100-oss-{{regionName}}.aliyuncs.com está obsoleto. Cambie al nuevo formato lo antes posible.
    • Formato de red pública: https://oss-{{regionName}}.aliyuncs.com.

    Por motivos de seguridad, se recomienda accessing OSS over HTTPS. Si prefiere usar HTTP, reemplace el prefijo https:// del formato anterior por http://.

    authType

    Establezca este parámetro en rrsa para usar RRSA en la autenticación.

    roleName

    El rol de RAM que creó o modificó.

    Para configurar permisos distintos en cada StorageClass, puede crear varios roles de RAM y especificar diferentes valores de roleName en cada StorageClass.

    otherOpts

    Parámetros personalizados para el volumen persistente de OSS, con el formato -o -o . Por ejemplo: -o umask=022 -o max_stat_cache_size=100000 -o allow_other.

    Expandir para ver detalles

    • umask: establece la máscara de permisos para archivos y directorios.

      Por ejemplo, umask=022 cambia los permisos del archivo a 755. Esto resuelve el problema de permisos en los archivos cargados mediante otros métodos, como SDK o la consola de OSS, que tienen un permiso predeterminado de 640. Se recomienda configurar este parámetro para la separación de lectura y escritura o el acceso multiusuario.

    • max_stat_cache_size: establece el límite superior de entradas en la caché de metadatos, por ejemplo, 100000. Los metadatos se almacenan en la caché de memoria para mejorar el rendimiento de operaciones como ls y stat.

      Sin embargo, esta caché no detecta de inmediato las modificaciones de archivos realizadas desde la consola de OSS, los SDK o ossutil. Esto puede provocar que las aplicaciones lean datos inconsistentes. Si tiene requisitos estrictos de coherencia de datos, establezca este parámetro en 0 para deshabilitar la caché, o reduzca el tiempo de expiración mediante el parámetro stat_cache_expire. No obstante, esto podría reducir el rendimiento de lectura.

    • allow_other: permite que usuarios distintos al que montó el volumen accedan a los archivos y directorios de la ruta de montaje. Resulta útil en entornos compartidos multiusuario donde quienes no realizaron el montaje también necesitan acceder a los datos.

    Para obtener más información sobre los parámetros opcionales, consulte Mount options y Best practices for configuring ossfs 1.0.

    provisioner

    El tipo de controlador. Este valor se fija en ossplugin.csi.alibabacloud.com cuando se utiliza el plugin CSI de OSS de Alibaba Cloud.

    reclaimPolicy

    La directiva de recuperación para los volúmenes persistentes aprovisionados dinámicamente. Los volúmenes persistentes de OSS solo admiten Retain. Esto significa que, al eliminar un PVC, no se eliminan el volumen persistente correspondiente ni los datos del bucket de OSS.

    volumeBindingMode

    El modo de vinculación del volumen.

    Los volúmenes persistentes de OSS no requieren afinidad de nodos basada en zonas de disponibilidad. Puede usar el valor predeterminado Immediate.

    volumeAs

    El modo de acceso al volumen. El valor predeterminado es sharepath. Valores válidos:

    • sharepath: todos los volúmenes persistentes comparten la misma ruta de montaje. Los datos se almacenan en <bucket>:<path>/.

    • subpath: crea un subdirectorio dedicado para cada volumen persistente con el fin de aislar los datos. Estos se almacenan en <bucket>:<path>/<pv-name>/.

      Este parámetro solo surte efecto cuando la versión del componente CSI es 1.31.3 o posterior.

    sigVersion

    La versión de firma para las solicitudes enviadas al servidor de OSS.

  2. Cree la StorageClass.

    kubectl apply -f sc-oss.yaml

Método AccessKey

kubectl

1. Crear una StorageClass

  1. Cree un Secret en el mismo namespace que su aplicación.

    Reemplace akId y akSecret con su AccessKey ID y AccessKey Secret.

    kubectl create secret generic oss-secret --from-literal='akId=<yourAccessKey ID>' --from-literal='akSecret=<yourAccessKey Secret>'
  2. Cree la StorageClass.

    1. Cree un archivo llamado sc-oss.yaml.

      apiVersion: storage.k8s.io/v1
      kind: StorageClass
      metadata:
        name: sc-oss
      parameters:
        # Replace with the name of your OSS bucket.
        bucket: bucket
        # Replace with the region of your OSS bucket.
        region: cn-hangzhou
        # The mount path relative to the bucket's root directory. You can specify a subdirectory.
        path: /
        # The endpoint of the region where the bucket is located.
        url: "https://oss-cn-hangzhou-internal.aliyuncs.com" 
        # The name of the Secret that stores the AccessKey information.
        csi.storage.k8s.io/node-publish-secret-name: oss-secret
        # The namespace where the Secret that stores the AccessKey information is located.
        csi.storage.k8s.io/node-publish-secret-namespace: default
        # Custom parameters.
        otherOpts: "-o umask=022 -o max_stat_cache_size=100000 -o allow_other"
        # The signature version for requests sent to the OSS server.
        sigVersion: "v4"
      # Fixed value for the Alibaba Cloud OSS CSI plug-in.
      provisioner: ossplugin.csi.alibabacloud.com
      # The reclaim policy for the dynamically provisioned persistent volume.
      reclaimPolicy: Retain
      # The volume binding mode.
      volumeBindingMode: Immediate
      

      Parámetro

      Descripción

      name

      El nombre de la StorageClass.

      bucket

      El bucket de OSS que se va a montar.

      region

      Si utiliza la firma v4 de OSS, establezca este valor en la región de OSS donde se encuentra el bucket. Para consultar la región de OSS, consulte Query the region of a bucket.

      Cuando se configura este parámetro, se usa automáticamente v4 como versión de firma de OSS.

      path

      La versión del componente CSI debe ser v1.14.8.32-c77e277b-aliyun o posterior.

      La ruta de montaje relativa al directorio raíz del bucket. El valor predeterminado es /, que monta todo el bucket.

      Si la ossfs version es anterior a 1.91, el path especificado debe existir en el bucket de OSS. Para obtener más información, consulte New features in ossfs 1.91 and later.

      url

      El endpoint del bucket de OSS que se va a montar.

      • Utilice un endpoint interno si el nodo de montaje y el bucket están en la misma región, o si ya se estableció una conexión VPC.

      • Utilice un endpoint público si el nodo de montaje y el bucket están en regiones distintas.

      A continuación se muestran los formatos comunes para distintos puertos de acceso:

      • Formato de red interna: https://oss-{{regionName}}-internal.aliyuncs.com.

        El formato de endpoint interno vpc100-oss-{{regionName}}.aliyuncs.com está obsoleto. Cambie al nuevo formato lo antes posible.
      • Formato de red pública: https://oss-{{regionName}}.aliyuncs.com.

      Por motivos de seguridad, se recomienda accessing OSS over HTTPS. Si necesita usar HTTP, reemplace el prefijo https:// del formato anterior por http://.

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

      El nombre del Secret que almacena la información de AccessKey.

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

      El namespace donde se encuentra el Secret que almacena la información de AccessKey.

      otherOpts

      Parámetros personalizados del volumen persistente de OSS, con el formato -o -o . Por ejemplo: -o umask=022 -o max_stat_cache_size=100000 -o allow_other.

      Expandir para ver detalles

      • umask: establece la máscara de permisos para archivos y directorios.

        Por ejemplo, umask=022 cambia los permisos de los archivos a 755. Esto resuelve el problema de permisos en los archivos subidos mediante otros métodos, como SDK o la consola de OSS, cuyo permiso predeterminado es 640. Se recomienda configurar este parámetro cuando se divide la lectura y escritura, o cuando acceden varios usuarios.

      • max_stat_cache_size: define el límite máximo de entradas en la caché de metadatos; por ejemplo, 100000. Los metadatos se almacenan en memoria para mejorar el rendimiento de operaciones como ls y stat.

        Sin embargo, esta caché no detecta de inmediato las modificaciones de archivos hechas desde la consola de OSS, los SDK o ossutil. Esto puede provocar que las aplicaciones lean datos inconsistentes. Si tiene requisitos estrictos de consistencia de datos, establezca este parámetro en 0 para deshabilitar la caché, o reduzca el tiempo de expiración con el parámetro stat_cache_expire. Tenga en cuenta que esto podría reducir el rendimiento de lectura.

      • allow_other: permite que usuarios distintos al que montó el volumen accedan a los archivos y directorios de la ruta de montaje. Resulta útil en entornos compartidos con múltiples usuarios donde quienes no realizaron el montaje también necesitan acceder a los datos.

      Para obtener más información sobre los parámetros opcionales, consulte Mount options y Best practices for configuring ossfs 1.0.

      provisioner

      El tipo de controlador. Este valor se fija en ossplugin.csi.alibabacloud.com cuando se utiliza el complemento CSI de OSS de Alibaba Cloud.

      reclaimPolicy

      La directiva de recuperación de los volúmenes persistentes aprovisionados dinámicamente. Los volúmenes persistentes de OSS solo admiten Retain. Esto significa que, al eliminar un PVC, no se borran ni el volumen persistente correspondiente ni los datos del bucket de OSS.

      volumeBindingMode

      El modo de vinculación del volumen.

      Los volúmenes persistentes de OSS no requieren afinidad de nodos basada en zonas de disponibilidad. Puede utilizar el valor predeterminado Immediate.

      volumeAs

      El modo de acceso al volumen. El valor predeterminado es sharepath. Valores válidos:

      • sharepath: todos los volúmenes persistentes comparten la misma ruta de montaje. Los datos se almacenan en <bucket>:<path>/.

      • subpath: crea un subdirectorio exclusivo para cada volumen persistente con el fin de aislar los datos. Estos se almacenan en <bucket>:<path>/<pv-name>/.

        Este parámetro solo surte efecto cuando la versión del componente CSI es 1.31.3 o posterior.

      sigVersion

      La versión de firma de las solicitudes enviadas al servidor de OSS.

    2. Cree la StorageClass.

      kubectl apply -f sc-oss.yaml

Console

  1. Guarde la AccessKey de Step 1 como un Secret para el volumen persistente.

    1. En la página Clústeres de ACK, haga clic en el nombre de su clúster. En el panel de navegación izquierdo, haga clic en Configurations > Secrets.

    2. Haga clic en Create from YAML y siga las instrucciones en pantalla para crear el Secret.

      apiVersion: v1
      kind: Secret
      metadata:
        name: oss-secret
        # Must match the namespace of the application.
        namespace: default
      stringData:
        # Replace with your AccessKey ID.
        akId: <your AccessKey ID>
        # Replace with your AccessKey secret.
        akSecret: <your AccessKey Secret>
  2. En la página Clusters, haga clic en el nombre de su clúster. En el panel de navegación izquierdo, haga clic en Volumes > StorageClasses.

  3. En la página StorageClasses, haga clic en Create, establezca PV Type en OSS y siga las instrucciones en pantalla para configurar la StorageClass.

    Parámetro

    Descripción

    Certificado de acceso

    El Secret que se utiliza para acceder a OSS. Contiene el AccessKey ID y el AccessKey Secret.

    Bucket ID:

    El bucket de OSS que se va a utilizar.

    La consola solo muestra los buckets a los que puede acceder la AccessKey configurada.

    Ruta de OSS

    La versión del componente CSI debe ser v1.14.8.32-c77e277b-aliyun o posterior.

    La ruta de montaje relativa al directorio raíz del bucket. El valor predeterminado es /, que monta todo el bucket.

    Si la ossfs version es anterior a 1.91, el path especificado debe existir en el bucket de OSS. Para obtener más información, consulte New features in ossfs 1.91 and later.

    Volume Mode

    El modo de acceso al volumen. El valor predeterminado es Shared Directory. Valores válidos:

    El modo Subdirectory solo surte efecto cuando la versión del componente CSI es 1.31.3 o posterior. De lo contrario, se utiliza el modo Shared Directory.
    • Shared Directory (sharepath): todos los volúmenes persistentes comparten la misma ruta de montaje. Los datos se almacenan en <bucket>:<path>/.

    • Subdirectory (subpath): crea un subdirectorio exclusivo para cada volumen persistente con el fin de aislar los datos. Estos se almacenan en <bucket>:<path>/<pv-name>/.

    Endpoint

    El endpoint de acceso del bucket de OSS.

    • Utilice un endpoint interno si los nodos del clúster y el bucket están en la misma región, o si ya se estableció una conexión Virtual Private Cloud (VPC).

    • Utilice un endpoint público si el nodo de montaje y el bucket están en regiones distintas.

    A continuación se muestran los formatos comunes para distintos endpoints de acceso:

    • Interno: http://oss-{{regionName}}-internal.aliyuncs.com o https://oss-{{regionName}}-internal.aliyuncs.com.

      Nota

      El formato de endpoint de acceso interno vpc100-oss-{{regionName}}.aliyuncs.com está obsoleto. Cambie al nuevo formato lo antes posible.

    • Público: http://oss-{{regionName}}.aliyuncs.com o https://oss-{{regionName}}.aliyuncs.com.

    De forma predeterminada, la consola utiliza HTTP para acceder a OSS a través de una red interna. Si necesita HTTPS, debe crear el PV mediante kubectl.

    Directiva de recuperación

    La directiva de recuperación de los volúmenes persistentes aprovisionados dinámicamente. Los volúmenes persistentes de OSS solo admiten Retain. Esto significa que, al eliminar un PVC, no se borran ni el volumen persistente correspondiente ni los datos del bucket de OSS.

    Optional Parameters:

    Parámetros personalizados del volumen persistente de OSS, con el formato -o -o . Por ejemplo: -o umask=022 -o max_stat_cache_size=100000 -o allow_other.

    Expandir para ver detalles

    • umask: establece la máscara de permisos para archivos y directorios.

      Por ejemplo, umask=022 cambia los permisos de los archivos a 755. Esto resuelve el problema de permisos en los archivos subidos mediante otros métodos, como SDK o la consola de OSS, cuyo permiso predeterminado es 640. Se recomienda configurar este parámetro cuando se divide la lectura y escritura, o cuando acceden varios usuarios.

    • max_stat_cache_size: define el límite máximo de entradas en la caché de metadatos; por ejemplo, 100000. Los metadatos se almacenan en memoria para mejorar el rendimiento de operaciones como ls y stat.

      Sin embargo, esta caché no detecta de inmediato las modificaciones de archivos hechas desde la consola de OSS, los SDK o ossutil. Esto puede provocar que las aplicaciones lean datos inconsistentes. Si tiene requisitos estrictos de consistencia de datos, establezca este parámetro en 0 para deshabilitar la caché, o reduzca el tiempo de expiración con el parámetro stat_cache_expire. Tenga en cuenta que esto podría reducir el rendimiento de lectura.

    • allow_other: permite que usuarios distintos al que montó el volumen accedan a los archivos y directorios de la ruta de montaje. Resulta útil en entornos compartidos con múltiples usuarios donde quienes no realizaron el montaje también necesitan acceder a los datos.

    Para obtener más información sobre los parámetros opcionales, consulte Mount options y Best practices for configuring ossfs 1.0.

Paso 3: Crear un PVC

Cree un PVC para solicitar recursos de almacenamiento de forma dinámica. El complemento CSI crea automáticamente un PV con base en la StorageClass.

kubectl

  1. Cree un archivo llamado pvc-oss.yaml:

    apiVersion: v1
    kind: PersistentVolumeClaim
    metadata:
      # PVC name
      name: pvc-oss
    spec:
      # Configure the access mode. ReadOnlyMany means that ossfs mounts the OSS bucket in read-only mode.
      accessModes:
      - ReadOnlyMany
      volumeMode: Filesystem
      resources:
        requests:
          # Declare the requested storage capacity. This value does not limit the actual capacity of the OSS volume.
          storage: 20Gi
      # Specify the StorageClass to use.
      storageClassName: sc-oss

    Parámetro

    Descripción

    accessModes

    Especifica el modo de acceso. Los valores compatibles son ReadOnlyMany y ReadWriteMany.

    Si se establece en ReadOnlyMany, ossfs monta el bucket de OSS en modo de solo lectura.

    storage

    La capacidad solicitada para el volumen. Este valor no limita la capacidad real del volumen de OSS.

    storageClassName

    El nombre de la StorageClass.

  2. Cree el PVC:

    kubectl apply -f pvc-oss.yaml
  3. Compruebe que el PVC se haya creado y que se encuentre en estado Bound:

    kubectl get pvc pvc-oss

    Resultado esperado:

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

Console

  1. En la página Clusters, haga clic en el nombre de su clúster. En el panel de navegación izquierdo, haga clic en Volumes > Persistent Volume Claims.

  2. En la página Persistent Volume Claims, haga clic en Create. Establezca PVC Type en OSS y configure los parámetros.

    Parámetro

    Descripción

    Allocation Mode

    Seleccione Use StorageClass.

    Existing Storage Class

    Haga clic en Select Storage Class y elija la StorageClass creada anteriormente.

    Capacidad

    La capacidad solicitada para el volumen. Este valor no limita la capacidad real del volumen de OSS.

    Access Mode

    Especifica el modo de acceso. Los valores compatibles son ReadOnlyMany y ReadWriteMany.

    Si se establece en ReadOnlyMany, ossfs monta el bucket de OSS en modo de solo lectura.

Paso 4: Crear una aplicación y montar un volumen

Para montar el volumen, haga referencia al PVC en su aplicación.

kubectl

  1. Cree un archivo oss-workload.yaml.

    apiVersion: apps/v1
    kind: Deployment
    metadata:
      name: oss-workload
      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:
              # The mount path in the container.
              - name: pvc-oss
                mountPath: "/data"
            # Configure a health check.
            livenessProbe:
              exec:
                command:
                - ls
                - /data
              initialDelaySeconds: 30
              periodSeconds: 30
          volumes:
            - name: pvc-oss
              persistentVolumeClaim:
                # Reference the PVC that you created.
                claimName: pvc-oss
  2. Cree la aplicación.

    kubectl create -f oss-workload.yaml
  3. Compruebe el montaje.

    • Confirme que los Pods estén ejecutándose.

      kubectl get pod -l app=nginx
    • Acceda a un Pod y compruebe el punto de montaje.

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

      El resultado debe mostrar los archivos de la ruta de montaje de OSS.

Console

  1. En la página Clústeres de ACK, haga clic en el nombre de su clúster. En el panel de navegación izquierdo, haga clic en Workloads > Deployments.

  2. En la esquina superior derecha de la página Deployments, haga clic en Create from Image.

  3. Haga clic en Create from Image y siga las instrucciones en pantalla para configurar los parámetros de la aplicación.

    La siguiente tabla describe los parámetros principales. Para el resto, puede dejar los valores predeterminados. Para obtener más información, consulte Create a Deployment.

    Página de configuración

    Parámetro

    Descripción

    Basic Information

    Replicas:

    El número de réplicas de Pod para el Deployment.

    Container

    Nombre de la imagen

    La dirección de la imagen de contenedor de la aplicación, como anolis-registry.cn-zhangjiakou.cr.aliyuncs.com/openanolis/nginx:1.14.1-8.6.

    Required Resources

    La cantidad de vCPU y memoria que se asignará a cada contenedor.

    Volumes

    Haga clic en Add PVC y configure los parámetros.

    • Mount Source: seleccione el PVC que creó anteriormente.

    • Container Path: la ruta dentro del contenedor donde se montará el volumen, como /data.

    Labels and Annotations

    Etiqueta del Pod

    Por ejemplo, establezca la clave en 'app' y el valor en 'nginx'.

  4. Compruebe el estado del despliegue de la aplicación.

    En la página Deployments, haga clic en el nombre de su aplicación. En la pestaña Pods, compruebe que los Pods tengan el estado Running.

Paso 5: Comprobar el almacenamiento compartido y persistente

Comprobar el almacenamiento compartido

Para comprobar el almacenamiento compartido, cree un archivo en un Pod y luego consúltelo en otro.

  1. Obtenga los nombres de los Pods de la aplicación.

    kubectl get pod -l app=nginx
  2. Este ejemplo utiliza el Pod oss-workload-66fbb85b67-d****:

    • ReadWriteMany: Cree el archivo tmpfile en la ruta /data.

      kubectl exec oss-workload-66fbb85b67-d**** -- touch /data/tmpfile
    • ReadOnlyMany: Cargue el archivo tmpfile a la ruta correspondiente del bucket de OSS mediante la consola de OSS o por medio de uploading a file with cp.

  3. Compruebe si el archivo existe en la ruta de montaje de otro Pod.

    Por ejemplo, tome un Pod llamado oss-workload-66fbb85b67-l**** con la ruta de montaje data.

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

    Si el archivo aparece en el resultado, se confirma que los Pods pueden compartir datos.

    tmpfile
    Si no ve el resultado esperado, asegúrese de que la versión de CSI component sea v1.20.7 o posterior.

Comprobar el almacenamiento persistente

Para comprobar el almacenamiento persistente, elimine un Pod y verifique que el archivo permanezca después de que el Pod se vuelva a crear automáticamente.

  1. Elimine un Pod de la aplicación. El controlador de Deployment lo vuelve a crear automáticamente.

    kubectl delete pod oss-workload-66fbb85b67-d****
  2. Consulte el estado de los Pods. Espere a que el nuevo Pod se inicie y pase al estado Running.

    kubectl get pod -l app=nginx
  3. Consulte los archivos de la ruta /data.

    Este ejemplo utiliza un Pod llamado oss-workload-66fbb85b67-z**** con la ruta de montaje data.

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

    El resultado muestra que el archivo tmpfile sigue existiendo. Esto confirma que los datos persisten incluso después de volver a crear el Pod.

    tmpfile

Impactos conocidos

  • Riesgos para la integridad de los datos

    • Riesgo de consistencia en escrituras simultáneas: Para mejorar la estabilidad de las escrituras, se recomienda actualizar CSI component a la versión v1.28 o posterior. Sin embargo, en escenarios de escritura simultánea sobre un mismo archivo, la función de carga por sobrescritura de OSS puede sobrescribir los datos. Debe garantizar la consistencia de los datos en la capa de aplicación.

    • Riesgo de sincronización de datos y eliminación accidental: Cuando se monta un volumen, cualquier eliminación o modificación de archivos en la ruta de montaje de un Pod de aplicación o de un nodo host sincroniza esos cambios directamente con los archivos de origen del bucket de OSS. Para evitar la eliminación accidental de datos, se recomienda habilitar versioning en su bucket de OSS.

  • Riesgos para la estabilidad de la aplicación

    • Riesgo de OOM: Al ejecutar una operación readdir (como el comando ls en un script de shell) por primera vez sobre una gran cantidad de archivos (por ejemplo, más de 100 000, según la memoria del nodo), ossfs carga todos los metadatos de golpe y consume mucha memoria. Esto puede provocar que el proceso finalice por OOM y que el punto de montaje quede no disponible.

      Para mitigar este riesgo, se recomienda montar un subdirectorio del bucket de OSS u optimizar la estructura de directorios.

    • Tiempo de montaje prolongado: Configurar securityContext.fsgroup en una aplicación hace que kubelet modifique de forma recursiva los permisos de los archivos (chmod/chown) al montar un volumen. Si el volumen contiene muchos archivos, el tiempo de montaje aumenta considerablemente, lo que puede causar retrasos graves en el inicio de los Pods.

      Si necesita configurar este parámetro pero desea reducir el tiempo de montaje, consulte Increased mount time for OSS volumes.

    • Riesgo de invalidación de claves (autenticación con AccessKey): Si un AccessKey referenciado por un PV deja de ser válido o cambian sus permisos, la aplicación asociada pierde el acceso de inmediato.

      Para restaurar el acceso, debe actualizar las credenciales en el Secret y reiniciar el Pod de la aplicación para forzar un nuevo montaje. Esta acción interrumpe el servicio, por lo que conviene ejecutarla durante una ventana de mantenimiento. Para obtener más información, consulte Solutions.

  • Riesgos de costos

    • Costos por partes: Al cargar archivos mayores a 10 MB, ossfs ejecuta una carga multiparte y divide el archivo en varias partes. Si la carga se interrumpe de forma inesperada, por ejemplo, debido al reinicio de una aplicación, debe manually delete the parts o delete them by using lifecycle rules para evitar costos de almacenamiento generados por partes incompletas.

Liberación de recursos

  1. Eliminar cargas de trabajo

    • Acción: Elimine todas las cargas de trabajo que usen el PVC, como Deployments y StatefulSets. Esto detiene los Pods y desmonta el volumen.

    • Comando de ejemplo: kubectl delete deployment <your-deployment-name>

  2. Eliminar el PVC

    • Acción: Elimine el PVC. La directiva de recuperación (reclaimPolicy) de los volúmenes de OSS aprovisionados dinámicamente solo admite Retain. Al eliminar el PVC, el PV vinculado pasa al estado Released, y el bucket de OSS del backend conserva íntegramente el subdirectorio y los datos correspondientes.

    • Comando de ejemplo: kubectl delete pvc <your-pvc-name>

  3. Eliminar el PV

    • Acción: Elimine el PV que se encuentre en estado Released. Esta operación solo quita el objeto de recurso PV de Kubernetes y no elimina ningún dato del bucket de OSS del backend.

    • Comando de ejemplo: kubectl delete pv <your-pv-name>

  4. Eliminar StorageClass y Secret (opcional)

    • Acción: Elimine StorageClass y el Secret asociado si ya no los necesita. Esta operación solo quita los objetos de recurso de Kubernetes y no afecta al bucket de OSS del backend.

    • Comandos de ejemplo: kubectl delete sc <your-storageclass-name>, kubectl delete secret <your-secret-name>

Documentos relacionados

  • Gestione los volúmenes de OSS mediante CNFS para mejorar su rendimiento y QoS. Para obtener más información, consulte Manage the lifecycle of OSS volumes.

  • Habilite el cifrado del lado del servidor para proteger los datos sensibles en reposo dentro de OSS. Para obtener más información, consulte Encrypt ossfs 1.0 volumes.

  • Para consultar las preguntas frecuentes sobre ossfs y OSS, revise ossfs 1.0 (default) y ossfs 1.0 volume FAQ.

  • Habilite container storage monitoring y configure alertas para detectar oportunamente anomalías en los volúmenes o cuellos de botella de rendimiento.

  • ossfs 1.0 ofrece mayor consistencia de datos que ossfs 2.0 en escrituras aleatorias y simultáneas. Sin embargo, ossfs 2.0 proporciona mejor rendimiento en lecturas y escrituras secuenciales.