Todos los productos
Search
Centro de documentos

Container Service for Kubernetes:Use NAS dynamic volumes

Última actualización: Sep 07, 2026

Con el aprovisionamiento dinámico de File Storage NAS, puede aprovisionar automáticamente almacenamiento para las cargas de trabajo bajo demanda. Esto elimina la necesidad de crear PV por adelantado. Esta función proporciona persistencia y uso compartido de datos, lo que permite que varios Pods lean y escriban de forma simultánea. Además, simplifica la gestión del almacenamiento en escenarios como aplicaciones web y retención de registros.

Cómo funciona

Con los volúmenes dinámicos, cuando una aplicación crea un PVC, el sistema genera automáticamente un nuevo volumen de almacenamiento y su PV correspondiente bajo demanda. Este aprovisionamiento se determina mediante el StorageClass especificado en el PVC. Este modo ofrece mayor flexibilidad y admite la expansión automática de los volúmenes de almacenamiento.

Modo de montaje

Puede especificar el modo de montaje con el parámetro volumeAs dentro de un StorageClass. Este parámetro define la relación entre un PV y el sistema de archivos NAS.

Modo de montaje

Descripción

Escenario

subpath

En el modo subpath, cada PV se asigna a un subdirectorio único dentro de un sistema de archivos NAS. Este modo facilita el aislamiento de datos.

  • Varios Pods montan el mismo subdirectorio de un sistema de archivos NAS.

  • Varios Pods montan distintos subdirectorios del mismo sistema de archivos NAS para aislar los datos.

sharepath

En el modo sharepath, todos los PV se asignan al mismo directorio NAS definido en el StorageClass. Por lo tanto, todos los PVC que usan este StorageClass acceden al mismo directorio compartido.

Varios Pods en distintos namespaces necesitan montar el mismo subdirectorio NAS.

filesystem (no recomendado)

En el modo de sistema de archivos, se crea dinámicamente una nueva instancia dedicada de sistema de archivos NAS para cada PV.

Este método es adecuado para aplicaciones que requieren un aislamiento estricto en términos de rendimiento y seguridad. Permite crear y eliminar dinámicamente sistemas de archivos NAS independientes y destinos de montaje para cada aplicación, aunque implica costos más altos.

Flujo de trabajo

A continuación se describe el flujo de trabajo para montar un volumen dinámico de NAS.

  1. Cree un StorageClass: defina una plantilla de almacenamiento, declare el destino de montaje de NAS y elija un modo de montaje (como subpath o sharepath) según sus requisitos de negocio.

  2. Cree un PVC: una aplicación usa un PVC para solicitar recursos de almacenamiento. El sistema crea automáticamente un PV y lo vincula al PVC con base en el StorageClass especificado.

  3. Monte el volumen en su aplicación: monte el PVC vinculado en un Pod de la aplicación. Después, el volumen estará disponible como un directorio persistente dentro del contenedor.

Requisitos previos

  • Los componentes csi-plugin y csi-provisioner están instalados.

    Los componentes CSI se instalan de forma predeterminada. Compruebe que sigan instalados. Puede consultar el estado de instalación en la página Add-ons . Se recomienda upgrading the CSI components a la versión más reciente.
  • Para usar subpath y sharepath, necesita un sistema de archivos Apsara File Storage NAS que cumpla con los siguientes requisitos. De lo contrario, create a file system.

    NAS tiene limitations sobre la conectividad de montaje, la cantidad de sistemas de archivos y los tipos de protocolo.
    • Protocol: solo se admite NFS.

    • VPC: el sistema de archivos Apsara File Storage NAS debe estar en la misma VPC que su clúster. Apsara File Storage NAS admite el montaje entre zonas, pero no entre distintas VPC.

    • Mount Target: agregue un destino de montaje que esté en la misma VPC que su clúster y que se encuentre activo. Para obtener más información, consulte Manage mount targets. Tome nota de la dirección del destino de montaje.

    • (Opcional) Encryption Type: para cifrar los datos de un volumen, configure el tipo de cifrado cuando cree el sistema de archivos Apsara File Storage NAS.

Notas de uso

  • No elimine los destinos de montaje: para evitar errores de E/S en los nodos, no elimine un destino de montaje en la consola de NAS mientras su volumen correspondiente esté en uso.

  • Escrituras simultáneas: NAS proporciona almacenamiento compartido. Cuando varios Pods montan el mismo volumen, su aplicación debe manejar los posibles problemas de consistencia de datos derivados de las escrituras simultáneas.

    Para obtener más información sobre las limitaciones de las escrituras simultáneas en NAS, consulte Multiple processes writing to the same log file y Latency in reading updated file content across ECS instances .
  • Rendimiento de montaje: si configura el parámetro securityContext.fsgroup en su aplicación, kubelet ejecuta de forma recursiva chmod o chown después de montar el volumen. Esto aumenta significativamente el tiempo de inicio del Pod.

    Para optimizar el rendimiento de montaje, consulte NAS volume FAQ .

Método 1: montar un volumen mediante subpath

Con este método, el aprovisionador CSI crea automáticamente una subruta dedicada en el sistema de archivos NAS para cada PersistentVolumeClaim (PVC). Dicha subruta funciona como el PersistentVolume (PV).

  • La versión del plugin de CSI debe ser 1.31.4 o posterior. Para actualizar el plugin, consulte Upgrade the CSI plug-in.

  • Ya creó un sistema de archivos NAS y cuenta con su mount target.

1. Crear un StorageClass

Un StorageClass actúa como plantilla para aprovisionar volúmenes dinámicos y define el origen y el comportamiento de los recursos de almacenamiento.

kubectl

  1. Cree un archivo llamado alicloud-nas-subpath.yaml con el siguiente contenido:

    apiVersion: storage.k8s.io/v1
    kind: StorageClass
    metadata:
      # The name of the StorageClass, which must be unique within the cluster.
      name: alicloud-nas-subpath  
    mountOptions:
    - nolock,tcp,noresvport
    - vers=3
    parameters:
      # Set to subpath.
      volumeAs: subpath
      # The format of the server field is <nas-server-address>:/<path>.
      server: "0cd8b4a576-g****.cn-hangzhou.nas.aliyuncs.com:/k8s"
      archiveOnDelete: "true"
    provisioner: nasplugin.csi.alibabacloud.com
    reclaimPolicy: Retain
    allowVolumeExpansion: true

    Parámetro

    Descripción

    mountOptions

    Las opciones de montaje para NAS, incluida la versión del protocolo NFS. De forma predeterminada, los volúmenes se montan con NFSv3. Puede especificar una versión distinta con una opción como vers=4.0. Para obtener información sobre los protocolos NFS compatibles con los distintos tipos de NAS, consulte NFS protocols.

    parameters.volumeAs

    El modo de aprovisionamiento del volumen. Establézcalo en subpath.

    parameters.server

    El destino de montaje de NAS y la subruta que se va a montar, con el formato <nas-server-address>:/<path>.

    • <nas-server-address>: el destino de montaje del sistema de archivos NAS. Para obtener más información, consulte Manage mount targets.

    • :/<path>: la subruta de NAS que se va a montar. Si no se establece este parámetro o la subruta especificada no existe, se monta el directorio raíz de forma predeterminada.

      • NAS de propósito general: el directorio raíz es /.

      • Extreme NAS: el directorio raíz es /share. Cuando monte una subruta, el valor de path debe comenzar con /share, por ejemplo, /share/data.

    parameters.archiveOnDelete

    Indica si se eliminan los datos del almacenamiento del backend cuando se elimina un PVC y su reclaimPolicy está establecido en Delete.

    Esta opción actúa como medida de protección para evitar la pérdida accidental de datos en el almacenamiento NAS compartido.
    • true (predeterminado): el directorio y sus archivos no se eliminan. En su lugar, se archivan y se les cambia el nombre con el formato archived-{pvName}.{timestamp}.

    • false: el directorio correspondiente y sus datos se eliminan de forma permanente.

      Esta operación elimina la subruta de NAS y sus archivos, no el sistema de archivos NAS en sí.

      Para eliminar un sistema de archivos NAS, consulte Delete a file system.

    En escenarios donde los PV se crean y eliminan con frecuencia, establecer este parámetro en false puede bloquear la cola de tareas del controlador CSI, lo que impide crear nuevos PV. Para obtener más información, consulte The controller's task queue is full and new PVs cannot be created when you use a dynamic NAS volume.

    provisioner

    El controlador. Establezca este parámetro en nasplugin.csi.alibabacloud.com cuando use el plugin de CSI de NAS de Alibaba Cloud.

    reclaimPolicy

    La directiva de recuperación del PV.

    • Delete (predeterminado): cuando se elimina el PVC, los datos del almacenamiento del backend se procesan según la configuración de archiveOnDelete.

    • Retain: cuando se elimina el PVC, el PV y los datos del sistema de archivos NAS no se eliminan, por lo que deben eliminarse manualmente. Se recomienda esta directiva para escenarios que requieren alta seguridad de datos y así evitar pérdidas accidentales.

    allowVolumeExpansion

    Compatible únicamente con NAS de propósito general.

    Permite expandir dinámicamente los PV creados por este StorageClass al modificar la capacidad del PVC.

    Este StorageClass utiliza la función directory quota de NAS para gestionar la capacidad del PV, lo que permite un control preciso del tamaño. Puede expandir el volumen en línea si edita el campo spec.resources.requests.storage del PVC. Para obtener más información, consulte Set directory quotas for dynamic NAS volumes.

    Las cuotas de directorio de NAS se aplican de forma asíncrona. Si ejecuta escrituras de datos rápidas y de gran volumen inmediatamente después de crear o expandir un PV, podría superar la capacidad especificada porque la cuota aún no se aplica por completo. Para obtener más información, consulte Usage limits.
  2. Cree el StorageClass.

    kubectl create -f alicloud-nas-subpath.yaml

Console

  1. Inicie sesión en la consola de ACK. En el panel de navegación izquierdo, haga clic en Clusters.

  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. Haga clic en Create, especifique un nombre único para el StorageClass dentro del clúster, seleccione NAS como PV Type y siga las instrucciones en pantalla para crear el StorageClass.

    A continuación se describen los parámetros clave.

    Parámetro

    Descripción

    Select Mount Target

    El destino de montaje del sistema de archivos NAS.

    Volume Mode

    El modo de aprovisionamiento del volumen. Seleccione Subdirectory. Se crea automáticamente una subruta bajo la ruta de montaje especificada. Los datos se almacenan en <NAS mount target>:<mount path>/<pv-name>/.

    Mount Path

    El subdirectorio de NAS que se va a montar. Si no se especifica este parámetro, se monta el directorio raíz de forma predeterminada.

    Si el directorio no existe en el sistema de archivos NAS, se crea automáticamente y luego se monta.
    • NAS de propósito general: el directorio raíz es /.

    • Extreme NAS: el directorio raíz es /share. Cuando monte un subdirectorio, el valor de path debe comenzar con /share, por ejemplo, /share/data.

    Reclaim Policy

    La directiva de recuperación del PV.

    • Delete (predeterminado): cuando se elimina el PVC, los datos del almacenamiento del backend se procesan según la configuración de archiveOnDelete.

    • Retain: cuando se elimina el PVC, el PV y los datos del sistema de archivos NAS no se eliminan, por lo que deben eliminarse manualmente. Se recomienda esta directiva para escenarios que requieren alta seguridad de datos y así evitar pérdidas accidentales.

    Mount Options

    Las opciones de montaje para NAS, incluida la versión del protocolo NFS. De forma predeterminada, los volúmenes se montan con NFSv3. Puede especificar una versión distinta con una opción como vers=4.0. Para obtener información sobre los protocolos NFS compatibles con los distintos tipos de NAS, consulte NFS protocols.

    Una vez creado el StorageClass, podrá consultarlo en la lista StorageClasses.

2. Crear un PVC

Un PersistentVolumeClaim (PVC) es la solicitud de almacenamiento de una aplicación que activa un StorageClass asociado para aprovisionar y vincular dinámicamente un PersistentVolume (PV) coincidente.

kubectl

  1. Cree un archivo llamado nas-pvc.yaml con el siguiente contenido:

    kind: PersistentVolumeClaim
    apiVersion: v1
    metadata: 
      name: nas-csi-pvc
    spec:
      accessModes:
      - ReadWriteMany 
      # Specify the StorageClass to use.
      storageClassName: alicloud-nas-subpath  
      resources: 
        requests:
          # Declare the required capacity of the storage volume.
          storage: 20Gi  

    Parámetro

    Descripción

    accessModes

    El modo de acceso. Valores válidos:

    • ReadWriteMany (predeterminado): varios nodos pueden montar el volumen con permisos de lectura y escritura.

    • ReadWriteOnce: un solo nodo puede montar el volumen con permisos de lectura y escritura.

    • ReadOnlyMany: varios nodos pueden montar el volumen con permisos de solo lectura.

    storageClassName

    El nombre del StorageClass que se va a usar.

    storage

    La capacidad requerida del volumen de almacenamiento. De forma predeterminada, esta declaración actúa como una solicitud de recursos y no limita el espacio de almacenamiento real disponible para el pod.

    El límite de capacidad de un sistema de archivos NAS se determina según sus especificaciones. Para obtener más información, consulte General-purpose NAS y Extreme NAS.

    Sin embargo, cuando allowVolumeExpansion en el StorageClass se establece en true, este valor se convierte en un límite estricto. El plugin de CSI establece la cuota del directorio NAS con base en esta configuración para limitar la capacidad disponible del PV.

  2. Cree el PVC.

    kubectl create -f nas-pvc.yaml
  3. Compruebe el PV.

    kubectl get pv

    El resultado esperado es similar al siguiente, lo que indica que el StorageClass aprovisionó automáticamente un PersistentVolume (PV) y lo vinculó al PVC.

    NAME                                       CAPACITY   ACCESS MODES   RECLAIM POLICY   STATUS   CLAIM                 STORAGECLASS             VOLUMEATTRIBUTESCLASS   REASON   AGE
    nas-a7540d97-0f53-4e05-b7d9-557309******   20Gi       RWX            Retain           Bound    default/nas-csi-pvc   alicloud-nas-subpath     <unset>                          5m

Console

  1. En el panel de navegación izquierdo de la página de gestión del clúster, elija Storage > PVCs.

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

    Parámetro

    Descripción

    PVC Type

    Seleccione NAS.

    Name

    El nombre del PVC. Debe ser único dentro del namespace.

    Allocation Mode

    Seleccione Use StorageClass.

    Existing Storage Class

    Haga clic en Select Storage Class y elija el StorageClass que creó.

    Total Capacity

    La capacidad requerida del volumen de almacenamiento. De forma predeterminada, esta declaración actúa como una solicitud de recursos y no limita el espacio de almacenamiento real disponible para el pod.

    El límite de capacidad de un sistema de archivos NAS se determina según sus especificaciones. Para obtener más información, consulte General-purpose NAS y Extreme NAS.

    Sin embargo, cuando allowVolumeExpansion en el StorageClass se establece en true, este valor se convierte en un límite estricto. El plugin de CSI establece la cuota del directorio NAS con base en esta configuración para limitar la capacidad disponible del PV.

    Access Mode

    El modo de acceso. Valores válidos:

    • ReadWriteMany (predeterminado): varios nodos pueden montar el volumen con permisos de lectura y escritura.

    • ReadWriteOnce: un solo nodo puede montar el volumen con permisos de lectura y escritura.

    • ReadOnlyMany: varios nodos pueden montar el volumen con permisos de solo lectura.

3. Cree una aplicación y monte NAS

Una vez creado el PVC, puede montar el volumen en una aplicación. En esta sección se muestra cómo crear dos Deployments que hacen referencia al mismo PVC. Esto permite que varios pods compartan la misma subruta de NAS.

kubectl

Cree dos Deployments que hagan referencia al mismo PVC para permitirles compartir la misma subruta del sistema de archivos NAS.

Para montar distintas subrutas del mismo sistema de archivos NAS en diferentes pods, debe crear un StorageClass único y su PVC correspondiente para cada subruta.
  1. Cree dos archivos llamados nginx-1.yaml y nginx-2.yaml con a continuación contenido.

    Las configuraciones de ambas aplicaciones son casi idénticas. Ambas hacen referencia al mismo PVC.
    • nginx-1.yaml

      apiVersion: apps/v1
      kind: Deployment
      metadata:
        name: nas-test-1     
        labels:
          app: nginx
      spec:
        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: nas-pvc
                  # The mount path for the NAS volume inside the container.
                  mountPath: "/data"          
            volumes:
              - name: nas-pvc                 
                persistentVolumeClaim:
                  # Reference the previously created PVC.
                  claimName: nas-csi-pvc      
    • nginx-2.yaml

      apiVersion: apps/v1
      kind: Deployment
      metadata:
        name: nas-test-2     
        labels:
          app: nginx
      spec:
        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: nas-pvc
                  # The mount path for the NAS volume inside the container.
                  mountPath: "/data"           
            volumes:
              - name: nas-pvc                 
                persistentVolumeClaim:
                  # Reference the previously created PVC.
                  claimName: nas-csi-pvc       
  2. Cree los dos Deployments.

    kubectl create -f nginx-1.yaml -f nginx-2.yaml
  3. Compruebe el estado de los pods.

    kubectl get pod -l app=nginx

    Salida esperada:

    NAME                         READY   STATUS    RESTARTS   AGE
    nas-test-1-b75d5b6bc-*****   1/1     Running   0          51s
    nas-test-2-b75d5b6bc-*****   1/1     Running   0          44s
  4. Inspeccione cada pod para comprobar que utiliza el PersistentVolumeClaim (PVC) correcto.

    Reemplace <podName> por el nombre real de cada pod.
    kubectl describe pod <podName> | grep "ClaimName:"

    En la salida esperada, ambos pods utilizan el mismo PVC. Esto confirma que comparten la misma subruta del sistema de archivos NAS.

Console

Repita a continuación pasos para crear dos Deployments que utilicen el mismo PVC. De este modo, podrán compartir la misma subruta del sistema de archivos NAS.

  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 Workloads > Deployments.

  2. Haga clic en y siga las instrucciones en pantalla para configurar y crear la aplicación.

    A continuación se describen los parámetros clave. Puede conservar los valores predeterminados para el resto de los parámetros. Para obtener más información, consulte Create a stateless application (Deployment).

    Sección

    Parámetro

    Descripción

    Basic Information

    Replicas:

    El número de réplicas del Deployment.

    Container

    Image

    La dirección de la imagen utilizada para desplegar la aplicación.

    Required Resources

    Los recursos de vCPU y memoria que requiere el contenedor.

    Volumes

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

    • Mount Source: seleccione el PVC que creó.

    • Container Path: introduzca la ruta dentro del contenedor donde se montará el sistema de archivos NAS.

    Cuando finalice el despliegue, haga clic en el nombre de la aplicación en la página Deployments y compruebe la pestaña Pods para confirmar que los pods se ejecutan correctamente (su estado es Running).

Para comprobar que el almacenamiento se comparte y es persistente, consulte Verify shared and persistent storage.

Método 2: montaje mediante el modo sharepath

En este modo, cuando se crean PV para los PVC que utilizan este StorageClass, el aprovisionador no crea directorios nuevos. En su lugar, todos los PV usan la ruta definida en el StorageClass, lo que asigna cada PV al mismo directorio de NAS.

1. Cree un StorageClass

Un StorageClass actúa como plantilla para aprovisionar volúmenes dinámicos y define el origen y el comportamiento de los recursos de almacenamiento.

kubectl

  1. Cree un archivo llamado alicloud-nas-sharepath.yaml con a continuación contenido.

    apiVersion: storage.k8s.io/v1
    kind: StorageClass
    metadata:
      name: alicloud-nas-sharepath
    mountOptions:
    - nolock,tcp,noresvport
    - vers=3
    parameters:
      volumeAs: sharepath
      # The format of the server field is <nas-server-address>:/<path>
      server: "0cd8b4a576-g****.cn-hangzhou.nas.aliyuncs.com:/k8s"
    provisioner: nasplugin.csi.alibabacloud.com
    reclaimPolicy: Retain

    Parámetro

    Descripción

    mountOptions

    Las opciones de montaje para NAS, incluida la versión del protocolo NFS. De forma predeterminada, los volúmenes se montan con NFSv3. Puede especificar una versión distinta con una opción como vers=4.0. Para obtener información sobre los protocolos NFS compatibles con los distintos tipos de NAS, consulte NFS protocols.

    parameters.volumeAs

    El modo de aprovisionamiento del volumen. Establézcalo en sharepath.

    parameters.server

    El destino de montaje de NAS y la subruta que se va a montar, con el formato <nas-server-address>:/<path>.

    • <nas-server-address>: el destino de montaje del sistema de archivos NAS. Para obtener más información, consulte Manage mount targets.

    • :/<path>: la subruta de NAS que se va a montar. Si no se establece este parámetro o la subruta especificada no existe, se monta el directorio raíz de forma predeterminada.

      • NAS de uso general: el directorio raíz es /.

      • Extreme NAS: el directorio raíz es /share. Al montar una subruta, el valor de path debe comenzar con /share, por ejemplo, /share/data.

    provisioner

    El controlador. Establezca este parámetro en nasplugin.csi.alibabacloud.com cuando utilice el complemento CSI de NAS de Alibaba Cloud.

    reclaimPolicy

    La directiva de recuperación del PV. Para el modo sharepath, debe ser Retain.

  2. Cree el StorageClass.

    kubectl create -f alicloud-nas-sharepath.yaml

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 > StorageClasses.

  2. Haga clic en Create, especifique un nombre único para el StorageClass y seleccione NAS como PV Type.

    Parámetro

    Descripción

    Select Mount Target

    El destino de montaje del sistema de archivos NAS.

    Volume Mode

    El modo de aprovisionamiento del volumen. En este ejemplo, seleccione Shared Directory, que habilita el modo sharepath.

    Mount Path

    El subdirectorio de NAS que se va a montar. Si no se especifica este parámetro, se monta el directorio raíz de forma predeterminada.

    Si el directorio no existe en el sistema de archivos NAS, se crea automáticamente y luego se monta.
    • NAS de uso general: el directorio raíz es /.

    • Extreme NAS: el directorio raíz es /share. Al montar un subdirectorio, el valor de path debe comenzar con /share, por ejemplo, /share/data.

    Reclaim policy

    Para el modo sharepath, debe ser Retain.

    Mount options

    Las opciones de montaje para NAS, incluida la versión del protocolo NFS. De forma predeterminada, los volúmenes se montan con NFSv3. Puede especificar una versión distinta con una opción como vers=4.0. Para obtener información sobre los protocolos NFS compatibles con los distintos tipos de NAS, consulte NFS protocols.

2. Cree un PVC

Un PersistentVolumeClaim (PVC) es una solicitud de almacenamiento de una aplicación que activa un StorageClass asociado para aprovisionar y vincular dinámicamente un PersistentVolume (PV) coincidente.

Para habilitar el uso compartido de datos entre namespaces, cree un PVC con el mismo nombre en dos namespaces distintos. Aunque los PVC comparten nombre, son recursos independientes porque están en namespaces diferentes. El StorageClass aprovisiona un PV independiente para cada PVC, y ambos PV apuntan al mismo directorio compartido en el sistema de archivos NAS.

kubectl

  1. Cree dos namespaces, ns1 y ns2.

    kubectl create ns ns1
    kubectl create ns ns2
  2. Cree un archivo llamado pvc.yaml con a continuación contenido para crear un PVC con el mismo nombre en los namespaces ns1 y ns2.

    kind: PersistentVolumeClaim
    apiVersion: v1
    metadata: 
      name: nas-csi-pvc
      namespace: ns1
    spec:
      accessModes:
      - ReadWriteMany 
      storageClassName: alicloud-nas-sharepath
      resources: 
        requests:
          storage: 20Gi
    ---
    kind: PersistentVolumeClaim
    apiVersion: v1
    metadata: 
      name: nas-csi-pvc
      namespace: ns2
    spec:
      accessModes:
      - ReadWriteMany 
      storageClassName: alicloud-nas-sharepath
      resources: 
        requests:
          storage: 20Gi

    Parámetro

    Descripción

    accessModes

    El modo de acceso. Valores válidos:

    • ReadWriteMany (predeterminado): varios nodos pueden montar el volumen con permisos de lectura y escritura.

    • ReadWriteOnce: un solo nodo puede montar el volumen con permisos de lectura y escritura.

    • ReadOnlyMany: varios nodos pueden montar el volumen con permisos de solo lectura.

    storageClassName

    El nombre del StorageClass que se va a utilizar.

    storage

    La capacidad requerida del volumen de almacenamiento. De forma predeterminada, esta declaración actúa como una solicitud de recursos y no limita el espacio de almacenamiento real disponible para el pod.

    El límite de capacidad de un sistema de archivos NAS depende de sus especificaciones. Para obtener más información, consulte General-purpose NAS y Extreme NAS.

    Sin embargo, cuando allowVolumeExpansion en el StorageClass se establece en true, este valor se convierte en un límite estricto. El complemento CSI establece la cuota del directorio de NAS según esta configuración para limitar la capacidad disponible del PV.

  3. Cree los PVC.

    kubectl create -f pvc.yaml
  4. Compruebe el estado de los PV para confirmar que se crearon automáticamente y se vincularon a los PVC.

    kubectl get pv

    La salida esperada es similar a la siguiente. El estado de ambos PV es Bound, y la columna CLAIM muestra que cada PV está vinculado a un PVC en un namespace distinto (ns1/nas-csi-pvc y ns2/nas-csi-pvc).

    NAME                                       CAPACITY   ACCESS MODES   RECLAIM POLICY   STATUS   CLAIM                 STORAGECLASS             VOLUMEATTRIBUTESCLASS   REASON   AGE
    nas-0b448885-6226-4d22-8a5b-d0768c******   20Gi       RWX            Retain           Bound    ns1/nas-csi-pvc       alicloud-nas-sharepath   <unset>                          74s
    nas-bcd21c93-8219-4a11-986b-fd934a******   20Gi       RWX            Retain           Bound    ns2/nas-csi-pvc       alicloud-nas-sharepath   <unset>                          74s

Console

  1. Cree los namespaces.

    • En la página Clusters, haga clic en el nombre de su clúster. En el panel de navegación izquierdo, haga clic en Namespaces and Quotas.

    • Haga clic en Launch y siga las instrucciones en pantalla para crear los namespaces ns1 y ns2.

  2. En el panel de navegación izquierdo de la página de gestión del clúster, elija Storage > PVCs.

  3. En el namespace ns1, cree una solicitud de almacenamiento.

    En la página Persistent Volume Claims, seleccione ns1 en la lista desplegable Namespace y siga las instrucciones en pantalla para crear el PVC.

    Parámetro

    Descripción

    PVC Type

    Seleccione NAS.

    Name

    El nombre del PVC. El nombre debe ser único dentro del namespace.

    Allocation Mode

    Seleccione Use StorageClass.

    Existing Storage Class

    Haga clic en Select Storage Class y elija el StorageClass que creó.

    Capacity

    La capacidad requerida del volumen de almacenamiento. De forma predeterminada, esta declaración actúa como una solicitud de recursos y no limita el espacio de almacenamiento real disponible para el pod.

    El límite de capacidad de un sistema de archivos NAS depende de sus especificaciones. Para obtener más información, consulte General-purpose NAS y Extreme NAS.

    Sin embargo, cuando allowVolumeExpansion en el StorageClass se establece en true, este valor se convierte en un límite estricto. El complemento CSI establece la cuota del directorio de NAS según esta configuración para limitar la capacidad disponible del PV.

    Access Mode

    El modo de acceso. Valores válidos:

    • ReadWriteMany (predeterminado): varios nodos pueden montar el volumen con permisos de lectura y escritura.

    • ReadWriteOnce: un solo nodo puede montar el volumen con permisos de lectura y escritura.

    • ReadOnlyMany: varios nodos pueden montar el volumen con permisos de solo lectura.

  4. Siga el paso anterior para crear otro PVC en el namespace ns2.

    Después de la creación, vuelva a la página Persistent Volume Claims. En los namespaces ns1 y ns2, confirme que ambos PVC están vinculados a sus PV creados automáticamente.

3. Cree una aplicación y monte NAS

Una vez creados los PVC, puede montar sus PV vinculados en las aplicaciones. En esta sección, creará una aplicación en cada uno de los dos namespaces y montará el PVC correspondiente. Esta configuración permite que ambas aplicaciones compartan el subdirectorio de NAS definido en el StorageClass.

kubectl

  1. Cree dos archivos llamados nginx-ns1.yaml y nginx-ns2.yaml con a continuación contenido.

    Las configuraciones de ambas aplicaciones son casi idénticas. Cada una se vincula al PVC de su respectivo namespace.
    • nginx-ns1.yaml

      apiVersion: apps/v1
      kind: Deployment
      metadata:
        name: nas-test
        namespace: ns1   
      spec:
        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: nas-pvc
                  mountPath: "/data"
            volumes:
              - name: nas-pvc
                persistentVolumeClaim:
                  claimName: nas-csi-pvc
    • nginx-ns2.yaml

      apiVersion: apps/v1
      kind: Deployment
      metadata:
        name: nas-test
        namespace: ns2   
      spec:
        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: nas-pvc
                  mountPath: "/data"
            volumes:
              - name: nas-pvc
                persistentVolumeClaim:
                  claimName: nas-csi-pvc
  2. Cree los dos Deployments.

    kubectl create -f nginx-ns1.yaml -f nginx-ns2.yaml
  3. Compruebe el estado de los pods.

    kubectl get pod -A -l app=nginx

    Salida esperada:

    NAMESPACE   NAME                         READY   STATUS    RESTARTS   AGE
    ns1         nas-test-b75d5b6bc-*****     1/1     Running   0          2m19s
    ns2         nas-test-b75d5b6bc-*****     1/1     Running   0          2m11s
  4. Revise la configuración detallada de un pod para confirmar el montaje del PVC.

    Reemplace <namespace-name> y <pod-name> por el namespace y el nombre reales del pod.
    kubectl describe pod -n <namespace-name> <pod-name> | grep "ClaimName:"

    En la salida esperada, los dos pods montan ns1/nas-csi-pvc y ns2/nas-csi-pvc, respectivamente.

Console

  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 Workloads > Deployments.

  2. En el namespace ns1, cree un Deployment y monte el PVC correspondiente.

    1. Seleccione Namespace en la lista desplegable Namespace y haga clic en Create from Image.

    2. Siga las instrucciones en pantalla para crear la aplicación.

      A continuación se describen los parámetros clave. Conserve los valores predeterminados para el resto de los parámetros. Para obtener más información, consulte Create a stateless workload (Deployment).

      Sección

      Parámetro

      Descripción

      Basic Information

      Replicas:

      El número de réplicas del Deployment.

      Container

      Image

      La dirección de la imagen utilizada para desplegar la aplicación.

      Required Resources

      Los recursos de vCPU y memoria necesarios.

      Volumes

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

      • Mount Source: seleccione el PVC que creó.

      • Container Path: introduzca la ruta dentro del contenedor donde se montará el sistema de archivos NAS, por ejemplo, /data.

  3. Siga el paso anterior para crear otro Deployment en el namespace ns2 y monte el PVC correspondiente.

    Vuelva a la página Deployments . En los namespaces ns1 y ns2 , compruebe el estado de cada Deployment para confirmar que los pods se están ejecutando y que han montado los PVC correctos.

Para comprobar los resultados, consulte Verify shared and persistent storage.

Método 3: Montar un volumen en modo filesystem

El modo filesystem permite crear y gestionar de forma dinámica un sistema de archivos NAS dedicado y un destino de montaje para una aplicación. A diferencia del modo sharepath, cada PV creado en este modo corresponde a una instancia independiente del sistema de archivos NAS.

Cada PV de tipo filesystem corresponde a un sistema de archivos NAS dedicado y a un único destino de montaje.
  • De manera predeterminada, cuando se elimina un PV de tipo filesystem, se conservan el sistema de archivos NAS y el destino de montaje correspondientes. Para eliminar automáticamente el sistema de archivos NAS y el destino de montaje al borrar el PV, agregue los siguientes parámetros a la StorageClass:

    • reclaimPolicy: Delete

    • parameters.deleteVolume: "true"

  • Si utiliza un clúster dedicado de ACK, otorgue los permisos necesarios al componente csi-provisioner.

    Proceso de autorización

    El uso de volúmenes NAS de tipo filesystem implica la creación y eliminación dinámicas de sistemas de archivos NAS y destinos de montaje. Por lo tanto, el componente csi-provisioner de su clúster dedicado de ACK requiere los permisos correspondientes.

    A continuación se muestra el conjunto mínimo de permisos obligatorios para la directiva de RAM.

    {
        "Action": [
            "nas:DescribeMountTargets",
            "nas:CreateMountTarget",
            "nas:DeleteFileSystem",
            "nas:DeleteMountTarget",
            "nas:CreateFileSystem"
        ],
        "Resource": [
            "*"
        ],
        "Effect": "Allow"
    }

    Puede otorgar los permisos mediante uno de los siguientes métodos:

    • Agregue los permisos de NAS anteriores a la directiva personalizada del rol de RAM maestro de su clúster dedicado de ACK. Para obtener más información, consulte Modify the content and description of a custom policy. En la página de detalles del clúster, haga clic en la pestaña Cluster Resources, busque el elemento Master RAM Role (por ejemplo, KubernetesMasterRole-xxx) y asocie la directiva a este rol.

    • Cree un usuario de RAM, asocie la directiva de RAM anterior y genere una clave de acceso. Después, configure la clave de acceso en las variables env del componente csi-provisioner.

      env:
      - name: CSI_ENDPOINT
        value: unix://socketDir/csi.sock
      - name: ACCESS_KEY_ID
        value: ""
      - name: ACCESS_KEY_SECRET
        value: ""

1. Crear una StorageClass

Una StorageClass es la plantilla de aprovisionamiento de un volumen dinámico. Define el origen y el comportamiento de los recursos de almacenamiento.

  1. Cree un archivo llamado alicloud-nas-fs.yaml con el siguiente contenido para definir una StorageClass en modo filesystem:

    apiVersion: storage.k8s.io/v1
    kind: StorageClass
    metadata:
      name: alicloud-nas-fs
    mountOptions:
    - nolock,tcp,noresvport
    - vers=3
    parameters:
      volumeAs: filesystem
      fileSystemType: standard
      storageType: Performance
      regionId: cn-beijing
      zoneId: cn-beijing-e
      vpcId: "vpc-2ze2fxn6popm8c2mzm****"
      vSwitchId: "vsw-2zwdg25a2b4y5juy****"
      accessGroupName: DEFAULT_VPC_GROUP_NAME
      deleteVolume: "false"
    provisioner: nasplugin.csi.alibabacloud.com
    reclaimPolicy: Retain

    Parámetro

    Descripción

    mountOptions

    Las opciones de montaje para NAS, incluida la versión del protocolo NFS. De manera predeterminada, los volúmenes se montan con NFSv3. Puede especificar una versión distinta con una opción como vers=4.0. Para obtener información sobre los protocolos NFS compatibles con los distintos tipos de NAS, consulte NFS protocols.

    parameters.volumeAs

    Establezca el tipo de montaje en filesystem.

    parameters.fileSystemType

    El tipo de sistema de archivos NAS. Valores válidos:

    • standard (predeterminado): NAS de propósito general.

    • extreme: Extreme NAS.

    parameters.storageType

    La clase de almacenamiento del sistema de archivos NAS.

    • Valores válidos para NAS de propósito general:

      • Performance (predeterminado): Rendimiento

      • Capacity: Capacidad

    • Valores válidos para Extreme NAS:

      • standard (predeterminado): Estándar

      • advance: Avanzado

    parameters.regionId

    La región del sistema de archivos NAS. Debe ser la misma región que la del clúster.

    parameters.zoneId

    La zona de disponibilidad del sistema de archivos NAS. Dentro de la misma VPC, NAS admite montajes entre zonas.

    parameters.vpcId

    La VPC del destino de montaje del sistema de archivos. Debe ser la misma VPC que la del clúster.

    parameters.vSwitchId

    El identificador del vSwitch del destino de montaje del sistema de archivos.

    parameters.accessGroupName

    El grupo de acceso del destino de montaje del sistema de archivos NAS. El valor predeterminado es DEFAULT_VPC_GROUP_NAME.

    parameters.deleteVolume

    Indica si se eliminan el PV, junto con su sistema de archivos NAS y su destino de montaje, cuando se borra la PVC. Dado que NAS es un sistema de archivos compartido, debe configurar tanto deleteVolume como reclaimPolicy por motivos de seguridad.

    provisioner

    El controlador. Establezca este parámetro en nasplugin.csi.alibabacloud.com cuando utilice el complemento CSI de NAS de Alibaba Cloud.

    reclaimPolicy

    El PV, el sistema de archivos NAS correspondiente y el destino de montaje se eliminan junto con la PVC únicamente si la directiva de recuperación del PV se establece en Delete y el parámetro deleteVolume se configura en true.

  2. Ejecute el siguiente comando para crear la StorageClass.

    kubectl create -f alicloud-nas-fs.yaml

2. Crear una PVC

  1. Cree un archivo llamado nas-pvc-fs.yaml con el siguiente contenido para solicitar recursos de almacenamiento:

    kind: PersistentVolumeClaim
    apiVersion: v1
    metadata:
      name: nas-csi-pvc-fs
    spec:
      accessModes:
        - ReadWriteMany
      storageClassName: alicloud-nas-fs
      resources:
        requests:
          storage: 20Gi

    A continuación se describen los parámetros:

    Parámetro

    Descripción

    accessModes

    El modo de acceso. Valores válidos:

    • ReadWriteMany (predeterminado): Varios nodos pueden montar el volumen con permisos de lectura y escritura.

    • ReadWriteOnce: Un solo nodo puede montar el volumen con permisos de lectura y escritura.

    • ReadOnlyMany: Varios nodos pueden montar el volumen con permisos de solo lectura.

    storage

    La capacidad del volumen NAS que se va a crear.

    La capacidad mínima para Extreme NAS es de 100 GiB. Si la StorageClass define Extreme NAS, el valor de storage debe ser ≥ 100 GiB.

    storageClassName

    El nombre de la StorageClass que solicita esta petición.

  2. Cree la PVC.

    kubectl create -f nas-pvc-fs.yaml

3. Crear la aplicación y montar NAS

  1. Consulte el siguiente contenido para crear nas-fs.yaml.

    apiVersion: apps/v1
    kind: Deployment
    metadata:
      name: deployment-nas-fs
      labels:
        app: nginx-test
    spec:
      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: nas-pvc
                mountPath: "/data"
          volumes:
            - name: nas-pvc
              persistentVolumeClaim:
                claimName: nas-csi-pvc-fs
  2. Cree el Deployment.

    kubectl create -f nas-fs.yaml
  3. Compruebe el estado de la PVC.

    kubectl get pvc nas-csi-pvc-fs

    El siguiente resultado muestra que la PVC se vinculó correctamente al PV:

    NAME             STATUS   VOLUME                                     CAPACITY   ACCESS MODES   STORAGECLASS      VOLUMEATTRIBUTESCLASS   AGE
    nas-csi-pvc-fs   Bound    nas-8338540d-34a1-4796-89cf-be2a7*******   20Gi       RWX            alicloud-nas-fs   <unset>                 13m
  4. Consulte el identificador del nuevo sistema de archivos NAS en los detalles del PV.

    Sustituya nas-8338540d-34a1-4796-89cf-be2a7******* por el nombre real del PV.
    kubectl describe pv nas-8338540d-34a1-4796-89cf-be2a7******* | grep "fileSystemId"

    El resultado muestra el identificador del nuevo sistema de archivos NAS. Puede consultar este sistema de archivos en la página File System List de la consola de NAS.

Comprobar el almacenamiento compartido y persistente

Después de desplegar la aplicación correctamente, compruebe que el volumen de almacenamiento funciona según lo esperado. En esta sección se usa el modo subpath para crear nas-test-1 y nas-test-2 como ejemplo de comprobación.

Almacenamiento compartido

Almacenamiento persistente

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

  1. Enumere los Pods para obtener sus nombres.

    kubectl get pod | grep nas-test

    Resultado esperado:

    nas-test-1-b75d5b6bc-*****           1/1     Running   0          50s
    nas-test-2-b75d5b6bc-*****           1/1     Running   0          60s
  2. Cree un archivo en uno de los Pods.

    Tome como ejemplo el Pod llamado nas-test-1-b75d5b6bc-*:

    kubectl exec nas-test-1-b75d5b6bc-***** -- touch /data/test.txt
  3. Compruebe si el archivo existe en el otro Pod.

    Tome como ejemplo el Pod llamado nas-test-2-b75d5b6bc-*.

    kubectl exec nas-test-2-b75d5b6bc-***** -- ls /data

    Resultado esperado:

    test.txt

    El resultado muestra el nuevo archivo, lo cual confirma que los datos se pueden compartir entre los Pods.

Para comprobar el almacenamiento persistente, reinicie el Deployment y verifique si los datos siguen presentes en el sistema de archivos del nuevo Pod.

  1. Reinicie el Deployment para desencadenar la recreación del Pod.

    kubectl rollout restart deploy nas-test-1
  2. Consulte los Pods y espere a que el estado del nuevo Pod cambie a Running.

    kubectl get pod | grep nas-test

    Resultado esperado:

    nas-test-1-5bb845b795-*****           1/1     Running   0          115m
    nas-test-2-5b6bccb75d-*****           1/1     Running   0          103m
  3. Compruebe si el archivo creado anteriormente existe en el nuevo Pod.

    Tome como ejemplo el Pod llamado nas-test-1-5bb845b795-*.

    kubectl exec nas-test-1-5bb845b795-***** -- ls /data

    Resultado esperado:

    test.txt

    El resultado muestra el archivo escrito previamente, lo cual confirma que los datos son persistentes.

Para entornos de producción

  • Seguridad y protección de datos

    • Use la directiva de recuperación Retain: Establezca el parámetro reclaimPolicy de su StorageClass en Retain. Esto evita la pérdida de datos si se elimina una PVC por accidente.

    • Utilice grupos de permisos para el control de acceso: NAS emplea permission groups para gestionar el acceso de red. Aplique el principio de privilegio mínimo: agregue al grupo de permisos únicamente las direcciones IP privadas de los nodos del clúster o sus bloques CIDR de vSwitch. Evite permisos demasiado amplios, como 0.0.0.0/0.

  • Optimización de rendimiento y costos

    • Seleccione un tipo de NAS adecuado: Consulte File system selection para elegir un tipo de NAS que cumpla con los requisitos de IOPS y throughput de su aplicación.

    • Optimice las opciones de montaje (mountOptions): Ajuste los parámetros de montaje NFS según las características de su carga de trabajo. Por ejemplo, usar versiones de protocolo como vers=4.0 o vers=4.1 mejora el rendimiento y las capacidades de bloqueo de archivos en ciertos escenarios. En cargas de trabajo con operaciones de E/S de archivos a gran escala, pruebe distintos valores de rsize y wsize para optimizar el throughput de lectura y escritura.

  • Operaciones y confiabilidad

    • Configure comprobaciones de estado: Defina una sonda de actividad (liveness probe) para los Pods de su aplicación y compruebe así que el punto de montaje funciona correctamente. Si un punto de montaje deja de responder, ACK reinicia automáticamente el Pod y vuelve a montar el volumen de almacenamiento.

    • Configure el monitoreo y las alertas: Utilice container storage monitoring para establecer alertas que detecten oportunamente problemas en los volúmenes de almacenamiento o cuellos de botella de rendimiento.

Liberación de recursos

Para evitar cargos inesperados, libere los recursos asociados en el siguiente orden cuando ya no necesite el volumen de almacenamiento NAS.

  1. Elimine la carga de trabajo

    • Acción: Elimine todas las cargas de trabajo (como Deployments y StatefulSets) que usen el volumen de almacenamiento NAS. Esto impide que los Pods de la aplicación remonten el volumen o lean y escriban datos en él.

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

  2. Elimine la PVC

    • Acción: Elimine la PVC asociada a la carga de trabajo. Una vez eliminada la PVC, el comportamiento del PV vinculado y del backend NAS depende del parámetro reclaimPolicy definido en la StorageClass correspondiente.

      • Modo subpath

        • Si reclaimPolicy es Retain: Tras eliminar la PVC, su PV vinculado pasa al estado Released. Se conservan el objeto PV, el subdirectorio correspondiente y los datos en el backend NAS, por lo que deben eliminarse manualmente.

        • Si reclaimPolicy es Delete: Tras eliminar la PVC, su PV vinculado se borra automáticamente. El tratamiento del subdirectorio en el backend NAS depende del parámetro archiveOnDelete:

          • Si archiveOnDelete es "true": Los datos del backend no se eliminan, sino que se renombran y archivan como archived-{pvName}.{timestamp}.

          • Si archiveOnDelete es "false": El subdirectorio correspondiente al PV en el backend NAS y todos sus datos se eliminan de forma permanente. Proceda con precaución.

          En un clúster serverless de ACK, debido a restricciones de permisos, aunque se configure reclaimPolicy: Delete , el directorio y los datos del backend NAS no se eliminan ni se archivan. Solo se elimina el objeto PV.
      • Modo sharepath

        Este modo solo admite un valor de reclaimPolicy igual a Retain. Tras eliminar la PVC, su PV vinculado pasa al estado Released. Se conservan el objeto PV, el directorio compartido del backend y todos los datos.

      • Modo filesystem

        • Si reclaimPolicy es Retain: Tras eliminar la PVC, su PV vinculado pasa al estado Released. Se conservan el objeto PV, el sistema de archivos NAS del backend creado de forma dinámica y el punto de montaje.

        • Si reclaimPolicy es Delete: Tras eliminar la PVC, su PV vinculado se borra automáticamente. El tratamiento del sistema de archivos NAS del backend depende del parámetro deleteVolume:

          • Si deleteVolume es "false": Se conservan el sistema de archivos NAS del backend y el punto de montaje, por lo que deben eliminarse manualmente.

          • Si deleteVolume es "true": El sistema de archivos NAS del backend y el punto de montaje se eliminan automáticamente. Proceda con precaución.

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

  3. Elimine el PV

    • Acción: Puede eliminar un PV cuando se encuentra en estado Available o Released. Esta acción solo quita la definición del PV del clúster de Kubernetes, pero no elimina ningún dato del sistema de archivos NAS del backend.

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

  4. Elimine el sistema de archivos NAS del backend (opcional)

    • Modos subpath y sharepath: Consulte Delete a file system. Esta operación elimina de forma permanente todos los datos de NAS y no se pueden recuperar. Proceda con precaución. Antes de ejecutarla, confirme que NAS no tiene dependencias de negocio.

    • Modo filesystem: Si el sistema de archivos NAS del backend no se eliminó automáticamente al borrar la PVC, consulte Delete a file system para localizar y eliminar manualmente el sistema de archivos correspondiente.

Documentos relacionados