Todos los productos
Search
Centro de documentos

Container Service for Kubernetes:Use a statically provisioned cloud disk volume

Última actualización: Sep 17, 2026

Si crea manualmente un PV y un PVC, puede montar un disco en la nube en un Pod como un volumen aprovisionado de forma estática. Este método proporciona almacenamiento persistente, ideal para cargas de trabajo que requieren un alto rendimiento de E/S de disco y baja latencia sin compartir datos.

Los discos son adecuados para los siguientes escenarios:

  • Aplicaciones que necesitan un alto rendimiento de E/S de disco sin compartir datos, como MySQL y Redis.

  • Escritura de registros a alta velocidad.

  • Persistencia de datos independiente del ciclo de vida del Pod.

Flujo de trabajo

image
  1. Cree un PV
    Registre un disco en la nube existente en su clúster al especificar su ID, capacidad, modo de acceso y afinidad de zona. Esto garantiza que el Pod se programe en el nodo correcto.

  2. Cree un PVC
    Su aplicación solicita recursos de almacenamiento mediante un PVC, el cual se vincula después a un PV compatible.

  3. Monte el PVC en su aplicación
    Monte el PVC vinculado en el Pod de su aplicación para que esté disponible como un directorio persistente dentro del contenedor.

Requisitos previos

  • Requisitos de los componentes CSI: deben estar instalados los componentes csi-plugin y csi-provisioner.

    Los componentes CSI se instalan de forma predeterminada. Consulte la Add-ons página para asegurarse de que sigan instalados. Se recomienda actualizar CSI components a la versión más reciente.
  • El disco en la nube debe estar en estado Available y cumplir con los siguientes requisitos:

    • Restricciones de zona de disponibilidad: excepto los discos en la nube ESSD con redundancia de zona, los demás tipos solo se pueden adjuntar a Pods en la misma zona de disponibilidad.

    • Restricciones por familia de tipo de instancia: algunos tipos de disco en la nube solo se pueden adjuntar a instance type families específicos.

  • Restricciones de nodos virtuales: para usar un disco en la nube en un nodo virtual, su clúster y kube-scheduler deben cumplir con los siguientes requisitos de versión.

    Requisitos de versión

    Versión del clúster

    Versión de kube-scheduler

    1.28 o posterior

    6.9.3 o posterior

    1.26

    6.8.7

    1.24

    6.4.7

    1.22

    6.4.5

  • Restricciones de nodos Lingjun: para usar discos en la nube en nodos Lingjun, se deben cumplir los siguientes requisitos.

    Detalles

Paso 1: Cree un PV

Cree un PV para declarar un disco en la nube existente como un recurso de almacenamiento disponible en el clúster.

kubectl

  1. Cree un archivo llamado disk-pv.yaml con el siguiente contenido.

    Obtenga el ID del disco, su tamaño, el ID de zona y la categoría. Después, reemplace las variables del archivo YAML con los valores reales.
    apiVersion: v1
    kind: PersistentVolume
    metadata:
      # The ID of your existing cloud disk, such as d-uf628m33r5rsbi******
      name: "<YOUR-DISK-ID>"
      annotations:
        # Recommended. Ensures the Pod is scheduled to a node that supports this disk type.
        # <YOUR-DISK-CATEGORY> is the category of your existing cloud disk. Supported values include cloud_essd_entry, cloud_auto, cloud_essd, cloud_ssd, cloud_efficiency, and cloud_regional_disk_auto.
        csi.alibabacloud.com/volume-topology: '{"nodeSelectorTerms":[{"matchExpressions":[{"key":"node.csi.alibabacloud.com/disktype.<YOUR-DISK-CATEGORY>","operator":"In","values":["available"]}]}]}'
    spec:
      capacity:
        # The size of your existing cloud disk, such as 20Gi.
        storage: "<YOUR-DISK-SIZE>"
      claimRef:
        apiVersion: v1
        kind: PersistentVolumeClaim
        namespace: default
        name: disk-pvc
      accessModes:
        - ReadWriteOnce
      persistentVolumeReclaimPolicy: Retain
      csi:
        driver: diskplugin.csi.alibabacloud.com
        # The ID of your existing cloud disk, such as d-uf628m33r5rsbi******
        volumeHandle: "<YOUR-DISK-ID>"
      nodeAffinity:
        required:
          nodeSelectorTerms:
          - matchExpressions:
            - key: topology.diskplugin.csi.alibabacloud.com/zone
              operator: In
              values:
              # The zone where the cloud disk is located, such as cn-shanghai-f.
              - "<YOUR-DISK-ZONE-ID>"
      storageClassName: alicloud-disk-topology-alltype
      volumeMode: Filesystem

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

    Parámetro

    Descripción

    csi.alibabacloud.com/volume-topology

    Esta anotación establece la afinidad de nodo para el disco en la nube. Así se garantiza que los Pods que usan este disco se programen en nodos compatibles con el tipo de disco correspondiente, lo que evita errores de montaje por incompatibilidad.

    Para asegurar una programación precisa, se recomienda especificar la categoría del disco. Los tipos compatibles son los siguientes:

    • Disco ESSD Entry: cloud_essd_entry

    • Disco ESSD AutoPL: cloud_auto

    • Disco ESSD: cloud_essd

    • SSD estándar: cloud_ssd

    • Disco Ultra: cloud_efficiency

    • Disco con redundancia de zona: cloud_regional_disk_auto (requiere ajustes en nodeAffinity parameter)

    claimRef

    Especifica el PVC que se puede vincular a este PV. Para permitir que cualquier PVC se vincule a este PV, elimine este parámetro.

    accessModes

    Modo de acceso. El modo compatible depende de si multi-attach feature for cloud disks está habilitado.

    • Multi-attach deshabilitado: solo se admite ReadWriteOnce (RWO). El disco en la nube se puede montar en un solo nodo en modo de lectura y escritura.

    • Multi-attach habilitado:

      • Como sistema de archivos estándar (formateado): admite ReadWriteOnce (RWO) y ReadOnlyMany (ROX).

        Para evitar la corrupción de datos por escrituras simultáneas en sistemas de archivos como ext4 en varios nodos, no se admite el modo ReadWriteMany (RWX).
      • Como dispositivo de bloques sin procesar (sin formatear): admite ReadWriteOnce (RWO), ReadOnlyMany (ROX) y ReadWriteMany (RWX).

    persistentVolumeReclaimPolicy

    Política de recuperación del PV. Determina qué sucede con el PV y con el disco en la nube subyacente cuando se elimina el PVC vinculado.

    • Delete: cuando se elimina el PVC, también se eliminan el PV y el disco en la nube. Use esta configuración con precaución.

      Para evitar la pérdida accidental de datos, puede create an automatic snapshot policy para respaldar el disco en la nube antes de eliminarlo.
    • Retain: cuando se elimina el PVC, no se eliminan el PV ni el disco en la nube. Debe liberarlos manualmente.

    driver

    Establézcalo en diskplugin.csi.alibabacloud.com cuando use discos de Alibaba Cloud.

    nodeAffinity

    Configuración de afinidad de nodo. Excepto los discos ESSD con redundancia de zona, los demás tipos de disco en la nube solo se pueden adjuntar a Pods dentro de la misma zona. Esta configuración garantiza que los Pods se programen en nodos ECS de la misma zona que el disco.

    En el caso de discos con redundancia de zona, cambie la configuración a la siguiente para permitir que el disco se monte en cualquier zona de la región.

    En esta configuración, <YOUR-DISK-REGION-ID> es la región donde se encuentra el disco en la nube, como cn-shanghai.
    nodeAffinity:
          required:
            nodeSelectorTerms:
            - matchExpressions:
              - key: topology.kubernetes.io/region
                operator: In
                values:
                - "<YOUR-DISK-REGION-ID>"

    storageClassName

    Esta configuración no tiene efecto en los volúmenes aprovisionados de forma estática y no necesita crear una StorageClass correspondiente. Sin embargo, debe asegurarse de que el valor sea el mismo tanto en el PV como en el PVC.

  2. Cree el PV.

    kubectl create -f disk-pv.yaml
  3. Compruebe el estado del PV y asegúrese de que sea Available.

    kubectl get pv

    Salida esperada:

    NAME                     CAPACITY   ACCESS MODES   RECLAIM POLICY   STATUS      CLAIM              STORAGECLASS                             VOLUMEATTRIBUTESCLASS   REASON   AGE
    d-uf628m33r5rsbi******   20Gi       RWO            Retain           Available   default/disk-pvc   alicloud-disk-topology-alltype           <unset>                          1m36s

Console

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

  2. En la Persistent Volumes página, haga clic en Create, establezca PV Type en Cloud Disk y configure los parámetros del PV según las indicaciones.

    Parámetro

    Descripción

    Access Mode

    Solo se admite ReadWriteOnce.

    Disk ID:

    Haga clic en Select Disk y seleccione un disco en la nube no montado que esté en la misma región y zona que el nodo.

    File System Type:

    Seleccione el tipo de sistema de archivos para almacenar datos en el disco en la nube. Los tipos de File System Type: admitidos incluyen ext4, ext3, xfs y vfat.

Paso 2: Cree un PVC

Cree un PVC para vincularlo al PV que creó en el paso anterior.

kubectl

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

    apiVersion: v1
    kind: PersistentVolumeClaim
    metadata:
      name: disk-pvc
    spec:
      accessModes:
      - ReadWriteOnce
      resources:
        requests:
          # The requested storage capacity, which must match the PV capacity.
          storage: "<YOUR-DISK-SIZE>"
      # Must match the storageClassName defined in the PV.
      storageClassName: alicloud-disk-topology-alltype
      # Specify the PV to bind to.
      volumeName: "<YOUR-DISK-ID>"

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

    Parámetro

    Descripción

    accessModes

    Modo de acceso. Debe coincidir con la configuración del PV.

    storage

    Capacidad de almacenamiento asignada al Pod. Debe coincidir con la capacidad del PV.

    storageClassName

    Esta configuración no tiene efecto en los volúmenes aprovisionados de forma estática y no necesita crear una StorageClass correspondiente. Sin embargo, debe asegurarse de que el valor sea el mismo tanto en el PV como en el PVC.

    volumeName

    Especifica el PV al que se vinculará. Para permitir que el PVC se vincule a cualquier PV coincidente, elimine este parámetro.

  2. Cree el PVC.

    kubectl create -f disk-pvc.yaml
  3. Compruebe el estado del PVC y asegúrese de que sea Bound.

    kubectl get pvc

    Salida esperada, que indica que el PVC está vinculado al PV del disco en la nube:

    NAME                       STATUS   VOLUME                                     CAPACITY   ACCESS MODES   STORAGECLASS                     VOLUMEATTRIBUTESCLASS   AGE
    disk-pvc                   Bound    d-bp1ff1mn65jk8s******                     20Gi       RWO            alicloud-disk-topology-alltype   <unset>                 6s

Console

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

  2. En la Persistent Volume Claims página, haga clic en Create, establezca PVC Type en Disk y cree un PVC según las indicaciones.

    Parámetro

    Descripción

    Allocation Mode

    Seleccione Existing Volumes.

    Existing Volumes

    Seleccione el PV que creó anteriormente.

    Capacity

    Capacidad de almacenamiento asignada al Pod. No puede superar la capacidad del disco en la nube.

Paso 3: Cree una aplicación y monte el disco en la nube

Cree una carga de trabajo y utilice el disco en la nube al montar el PVC.

Importante

Un disco en la nube proporciona almacenamiento no compartido. A menos que multi-attach esté habilitado, solo se puede montar en un Pod a la vez. Compartir un PVC en un Deployment con varias réplicas puede impedir que se inicien nuevos Pods si otro Pod ya está usando el disco.

Si aun así necesita usar un disco en la nube con un Deployment, considere using a Cloud Disk as an ephemeral volume. Para habilitar multi-attach, consulte Use NVMe-based Cloud Disks with multi-attach and reservation.

kubectl

  1. Cree un archivo llamado disk-test.yaml con el siguiente contenido.

    En el siguiente ejemplo se crea un StatefulSet con una réplica. El Pod solicita recursos de almacenamiento mediante un PVC llamado disk-pvc y monta el volumen en la ruta /data .
    apiVersion: apps/v1
    kind: StatefulSet
    metadata:
      name: disk-test
    spec:
      replicas: 1
      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-disk
              mountPath: /data
          volumes:
            - name: pvc-disk
              persistentVolumeClaim:
                claimName: disk-pvc
    Importante
    • Cuando configura securityContext.fsgroup, kubelet cambia de forma recursiva los permisos de los archivos (chmod/chown) al montar un volumen. Esto puede aumentar significativamente el tiempo de montaje en volúmenes con muchos archivos.

      Para clústeres de la versión 1.20 o posterior, se recomienda establecer fsGroupChangePolicy en OnRootMismatch. Esto optimiza el rendimiento de montaje porque solo aplica el cambio recursivo de permisos cuando el volumen se monta por primera vez y los permisos del directorio raíz no coinciden. Si el rendimiento sigue siendo un problema o necesita un control de permisos más detallado, use un initContainer para gestionar los permisos antes de que se inicie el contenedor de la aplicación.

    • Cuando se reconstruye un Pod, vuelve a montar el disco en la nube original. Si otras restricciones impiden que el Pod se programe en la zona original, permanecerá en estado Pending porque no podrá montar el disco.

  2. Cree el StatefulSet y monte el disco en la nube.

    kubectl create -f disk-test.yaml
  3. Compruebe el estado del Pod y asegúrese de que esté ejecutándose (Running).

    kubectl get pod -l app=nginx

    Salida esperada:

    NAME          READY   STATUS    RESTARTS   AGE
    disk-test-0   1/1     Running   0          14s
  4. Revise la ruta de montaje para confirmar que el disco en la nube está montado.

    kubectl exec disk-test-0 -- df -h /data

    Salida esperada:

    Filesystem      Size  Used Avail Use% Mounted on
    /dev/vdb         20G   24K   20G   1% /data

Console

  1. En el panel de navegación izquierdo de la página de administración del clúster, elija Workload > StatefulSets.

  2. En la StatefulSets página, haga clic en Create from Image y siga las indicaciones de la página para configurar los parámetros del StatefulSet.

    A continuación se describen los elementos principales de configuración. Para obtener instrucciones detalladas, consulte Create a StatefulSet.

    Página de configuración

    Parámetro

    Descripción

    Basic Information

    Replicas:

    Configure el número de réplicas del StatefulSet.

    Container

    Image Name

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

    Required Resources

    Establezca los recursos obligatorios de vCPU, memoria y almacenamiento efímero.

    En este ejemplo, la CPU se establece en 0.25 Core y la memoria en 512 MiB.

    Volume

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

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

    • Container Path: introduzca la ruta del contenedor donde se montará el disco en la nube, como /data.

  3. Compruebe el estado de despliegue de la aplicación.

    1. En la StatefulSets página, haga clic en el nombre de la aplicación.

    2. En la pestaña Pods, asegúrese de que el Pod esté en estado Running.

Compruebe la persistencia de los datos

Siga el proceso "escribir datos > eliminar el Pod > comprobar los datos" para verificar que la información almacenada en el disco en la nube persiste después de reconstruir el Pod.

  1. Escriba datos de prueba en el Pod.

    1. Revise la ruta de montaje para ver los datos del disco en la nube.

      kubectl exec disk-test-0 -- ls /data

      Salida esperada:

      lost+found
    2. Escriba datos de prueba en el Pod.

      Tome como ejemplo el Pod disk-test-0. Cree un archivo de prueba en el directorio /data, que es la ruta de montaje del disco en la nube.

      kubectl exec disk-test-0 -- touch /data/test
  2. Simule un error del Pod al eliminarlo.

    kubectl delete pod disk-test-0

    Ejecute de nuevo el comando kubectl get pod -l app=nginx. Se creará automáticamente un Pod con el mismo nombre.

  3. Verifique los datos en el nuevo Pod.

    Revise de nuevo el directorio /data en el nuevo Pod disk-test-0.

    kubectl exec disk-test-0 -- ls /data

    En la salida esperada, el archivo de prueba creado anteriormente sigue existiendo. Esto indica que los datos persisten incluso después de eliminar y reconstruir el Pod.

    lost+found  
    test

Consideraciones para producción

  • Alta disponibilidad

    • Política de programación de Pods

      Configure correctamente nodeAffinity y csi.alibabacloud.com/volume-topology en el PV. Así garantizará que el Pod se programe correctamente y que el disco en la nube se vuelva a montar después de reconstruir el Pod.

    • Selección del disco en la nube

      Evalúe factores como performance, facturación, zonas de disponibilidad y instance type families para asegurar que sus Pods se programen en nodos compatibles.

      Cuando seleccione un cloud disk type, tenga en cuenta que los discos SSD en la nube y los discos Ultra están en proceso de retiro. Se recomienda usar discos ESSD PL0 o ESSD Entry en lugar de discos Ultra, y discos ESSD AutoPL en lugar de discos SSD.

    • Recuperación ante desastres entre zonas de disponibilidad

      • Recuperación ante desastres a nivel de aplicación: para cargas de trabajo críticas como bases de datos, despliegue instancias de la aplicación en varias zonas de disponibilidad y utilice el mecanismo nativo de sincronización de datos de la aplicación para lograr alta disponibilidad.

      • Recuperación ante desastres a nivel de almacenamiento: elija un tipo de disco en la nube que admita recuperación ante desastres en múltiples zonas. Esta función escribe datos de forma síncrona en distintas zonas de disponibilidad dentro de la misma región, lo que permite la conmutación por error entre zonas. Para obtener más información, consulte Use ESSD Co-located Redundant Disks.

  • Seguridad de los datos

    • Copias de seguridad rutinarias: use automatic snapshot policy para crear instantáneas de sus discos en la nube y así respaldar y recuperar datos.

  • Optimización de rendimiento y costos

Limpieza de recursos

Para evitar cargos inesperados y garantizar la seguridad de los datos, siga este proceso para liberar los recursos que no utilice.

  1. Elimine la carga de trabajo

    • Acción: elimine todas las aplicaciones que usen el PVC correspondiente, como Deployments y StatefulSets. Esta acción detiene los Pods en ejecución y desmonta los volúmenes.

      Comando de ejemplo: kubectl delete deployment <YOUR-DEPLOYMENT-NAME>

  2. Elimine el PVC

    • Acción: elimine el PVC asociado a la aplicación. Después de eliminarlo, lo que ocurra con el PV vinculado dependerá de su persistentVolumeReclaimPolicy.

    • Detalles de la política de recuperación:

      • Retain: después de eliminar el PVC, el estado de su PV vinculado cambia a Released, pero el objeto PV y el disco en la nube del backend se conservan. Si confirma que ya no necesita el disco ni sus datos, consulte Release a cloud disk para eliminarlo. Esta acción es irreversible, así que proceda con precaución.

      • Delete: después de eliminar el PVC, se eliminan tanto el objeto PV como el disco en la nube del backend. Los datos del disco se perderán permanentemente y no se podrán recuperar. Use esta política con precaución.

        Para evitar la pérdida accidental de datos, puede create an automatic snapshot policy para respaldar el disco en la nube antes de eliminarlo.
    • Comando de ejemplo: kubectl delete pvc <YOUR-PVC-NAME>

  3. Elimine el objeto PV: esta acción solo quita la definición del recurso del clúster y no elimina el disco en la nube del backend.

    • Acción: elimine manualmente el PV que esté en estado Released.

    • Comando de ejemplo: kubectl delete pv <YOUR-PV-NAME>

Documentos relacionados