Compartir a través de


Creación y administración de volúmenes persistentes (PVs) con Azure Disks en Azure Kubernetes Service (AKS)

En este artículo se muestra cómo crear volúmenes persistentes (PVs) de forma dinámica y estática con Discos de Azure para usarlos mediante un único pod en un clúster de Azure Kubernetes Service (AKS).

Prerrequisitos

  • La CLI de Azure, versión 2.0.59 o posterior, instalada y configurada. Busque la versión con el comando az --version. Para la instalación o la actualización, consulte Instalación de la CLI de Azure.

  • El controlador CSI de Azure Disks habilitado en el clúster de AKS.

  • El controlador CSI de Azure Disks tiene un límite de volumen por nodo. El número de volúmenes cambia en función del tamaño del nodo o grupo de nodos. Puede determinar el número de volúmenes que se pueden asignar por nodo mediante el kubectl get comando . Por ejemplo:

    kubectl get CSINode <node-name> -o yaml
    

    Si el límite de volúmenes por nodo es un problema para la carga de trabajo, considere la posibilidad de usar el Almacenamiento de contenedores de Azure para los volúmenes persistentes, en lugar de controladores CSI.

Clases de almacenamiento integradas para PVs dinámicos con Azure Disks

Las clases de almacenamiento se usan para definir cómo se crea dinámicamente una unidad de almacenamiento con un volumen persistente.

Cada clúster de AKS incluye cuatro clases de almacenamiento integradas, con dos de ellas configuradas para trabajar con Azure Disks:

  • La clase de almacenamiento predeterminada aprovisiona un disco de Azure SSD estándar.
    • Los SSD estándar respaldan el almacenamiento estándar y proporcionan almacenamiento rentable, a la vez que ofrecen un rendimiento confiable.
  • La clase de almacenamiento managed-csi-premium aprovisiona un disco prémium de Azure.
    • Los discos de baja latencia, de alto rendimiento y basados en SSD respaldan los discos Premium. Son ideales para máquinas virtuales (VM) que ejecutan cargas de trabajo de producción. Cuando usa el controlador CSI para disco de Azure en AKS, también puede usar la clase de almacenamiento managed-csi, respaldada por el almacenamiento en disco SSD estándar con redundancia local (LRS).
  • Efectivo a partir de la versión 1.29 de Kubernetes: al implementar clústeres de AKS en varias zonas de disponibilidad, AKS usa ahora almacenamiento con redundancia de zona (ZRS) para crear discos administrados en clases de almacenamiento integradas.
    • ZRS garantiza la replicación sincrónica de Azure Managed Disks en varias zonas de disponibilidad de Azure en la región elegida. Esta estrategia de redundancia mejora la resistencia de las aplicaciones y protege los datos frente a errores del centro de datos.
      • Sin embargo, es importante tener en cuenta que ZRS tiene un costo mayor en comparación con el almacenamiento con redundancia local (LRS). Si la optimización de costos es una prioridad, puede crear una nueva clase de almacenamiento con el parámetro de nombre de SKU de LRS y usarlo en la PVC.

No se admite la reducción del tamaño de una PVC debido al riesgo de pérdida de datos. Puede editar una clase de almacenamiento existente mediante el kubectl edit sc comando o puede crear su propia clase de almacenamiento personalizada.

Nota:

Las solicitudes de volúmenes persistentes se especifican en GiB, pero los Azure Managed Disks se facturan según el SKU por un tamaño específico. Estas SKU van de 32 GiB para discos S4 o P4 a 32 TiB para discos S80 o P80 (en versión preliminar). El rendimiento e IOPS de un SSD Premium depende de la SKU y del tamaño de instancia de los nodos del clúster de AKS. Para obtener más información, consulte Precios de Managed Disks.

Vea las clases de almacenamiento precreadas mediante el kubectl get sc comando . El ejemplo siguiente, muestra las clases de almacenamiento creadas previamente disponibles dentro de un clúster de AKS:

kubectl get sc

La salida debe ser similar a la siguiente salida de ejemplo, que incluye las default clases de almacenamiento y managed-csi que se crean previamente para Azure Disks:

NAME                PROVISIONER                AGE
default (default)   disk.csi.azure.com         1h
managed-csi         disk.csi.azure.com         1h

Creación de clases de almacenamiento personalizadas para volúmenes persistentes dinámicos con Azure Disks

Las clases de almacenamiento predeterminadas son adecuadas para la mayoría de los escenarios. En algunos casos, es posible que quiera tener su propia clase de almacenamiento personalizada con sus propios parámetros. Por ejemplo, es posible que quiera cambiar la volumeBindingMode clase .

Puede usar una volumeBindingMode: Immediate clase que garantice que ocurre inmediatamente una vez creado el PVC. En los casos en los que los grupos de nodos tienen restricciones de topología (por ejemplo, cuando se usan zonas de disponibilidad), los PV se enlazarían o aprovisionarían sin conocimiento de los requisitos de programación del pod.

Para resolver este escenario, puede usar volumeBindingMode: WaitForFirstConsumer, que retrasa el enlace y el aprovisionamiento de un PV hasta que se crea un pod que usa la PVC. De esta manera, el PV se ajusta y se aprovisiona en la zona de disponibilidad (u otra topología) especificada mediante las restricciones de programación del pod. Las clases de almacenamiento predeterminadas usan volumeBindingMode: WaitForFirstConsumer la clase .

  1. Cree un archivo denominado sc-azuredisk-csi-waitforfirstconsumer.yaml y pegue el siguiente manifiesto YAML. La clase de almacenamiento es la misma que la managed-csi clase de almacenamiento, pero con una clase diferente volumeBindingMode .

    kind: StorageClass
    apiVersion: storage.k8s.io/v1
    metadata:
      name: azuredisk-csi-waitforfirstconsumer
    provisioner: disk.csi.azure.com
    parameters:
      skuname: StandardSSD_LRS
    allowVolumeExpansion: true
    reclaimPolicy: Delete
    volumeBindingMode: WaitForFirstConsumer
    
  2. Cree la clase de almacenamiento mediante el comando kubectl apply y especifique su archivo sc-azuredisk-csi-waitforfirstconsumer.yaml.

    kubectl apply -f sc-azuredisk-csi-waitforfirstconsumer.yaml
    

    La salida debería ser similar a la salida de ejemplo siguiente:

    storageclass.storage.k8s.io/azuredisk-csi-waitforfirstconsumer created
    

Parámetros de clase de almacenamiento para PVs dinámicos con Azure Disks

En la tabla siguiente se incluyen parámetros que puede usar para definir una clase de almacenamiento personalizada para las solicitudes de volúmenes persistentes dinámicos (PVC) con Azure Disks.

Nombre Meaning Valores disponibles Obligatorio Valor predeterminado
skuName Tipo de cuenta de almacenamiento de Azure Disks (alias: storageAccountType). PremiumV2_LRS y UltraSSD_LRS admiten el acceso instantáneo para las restauraciones incrementales de instantáneas. Standard_LRS, Premium_LRS, StandardSSD_LRS, PremiumV2_LRS, UltraSSD_LRS, , Premium_ZRSStandardSSD_ZRS No StandardSSD_LRS
fsType Tipo de sistema de archivos ext4, ext3, ext2, xfs, btrfs para Linux
ntfs para Windows
No ext4 para Linux
ntfs para Windows
cachingMode Configuración de caché del host de disco de datos de Azure (PremiumV2_LRS y UltraSSD_LRS solo admiten None el modo de almacenamiento en caché) None, , ReadOnly, ReadWrite No ReadOnly
resourceGroup Especifique el grupo de recursos para los discos de Azure Nombre del grupo de recursos existente No Si está vacío, el controlador usará el mismo nombre de grupo de recursos que el clúster de AKS actual
DiskIOPSReadWrite Funcionalidad de IOPS de Disco Ultra o SSD Premium v2 (mínimo: 2 IOPS/GiB) 100~160000 No 500
DiskMBpsReadWrite Capacidad de rendimiento de Disco Ultra o SSD Prémium v2 (mínimo: 0,032/GiB) 1~2000 No 100
LogicalSectorSize Tamaño de sector lógico en bytes para Disco Ultra. 512, 4096 No 4096
tags Etiquetas del disco de Azure Formato de etiqueta: key1=val1,key2=val2 No ""
diskEncryptionSetID Identificador de recurso del conjunto de cifrado de disco que se va a usar para habilitar el cifrado en reposo Formato: /subscriptions/{subs-id}/resourceGroups/{rg-name}/providers/Microsoft.Compute/diskEncryptionSets/{diskEncryptionSet-name} No ""
diskEncryptionType Tipo de cifrado del conjunto de cifrado de disco. EncryptionAtRestWithCustomerKey (de forma predeterminada), EncryptionAtRestWithPlatformAndCustomerKeys No ""
writeAcceleratorEnabled Acelerador de escritura en Azure Disks true, false No ""
networkAccessPolicy NetworkAccessPolicy propiedad para evitar que se genere el URI de SAS para un disco o una instantánea. AllowAll, , DenyAll, AllowPrivate No AllowAll
diskAccessID Id. de recurso de Azure del recurso DiskAccess para usar puntos de conexión privados en discos No ``
enableBursting Habilite la ráfaga a demanda más allá del objetivo de rendimiento aprovisionado del disco. La expansión a petición solo se debe aplicar a discos Premium y cuando el tamaño del disco sea de > 512 GB. No se admiten discos Ultra y compartidos. La expansión está deshabilitada de manera predeterminada. true, false No false
useragent Agente de usuario utilizado para la atribución de uso del cliente No Formato del agente de usuario generado: driverName/driverVersion compiler/version (OS-ARCH)
subscriptionID Especifique el id. de suscripción de Azure donde se van a crear los discos de Azure. Identificador de suscripción de Azure No Si no está vacío, se debe proporcionar resourceGroup.
--- Los parámetros siguientes solo son para v2. --- --- ---
maxShares Número total de montajes de disco compartido permitidos para el disco. Si se establece el valor en 2 o más, se habilitan las réplicas de datos adjuntos. Los valores admitidos dependen del tamaño del disco. Consulte Uso compartido de un disco administrado de Azure para conocer los valores admitidos. No 1
maxMountReplicaCount Número de datos adjuntos de réplicas que se van a mantener. Este valor debe estar en el intervalo de [0..(maxShares - 1)]. No Si accessMode es ReadWriteMany, el valor predeterminado es 0. De lo contrario, el valor predeterminado es maxShares - 1.

Creación de una PVC con Azure Disks

Una PVC aprovisiona automáticamente el almacenamiento en función de una clase de almacenamiento. En este caso, una PVC puede usar una de las clases de almacenamiento precreadas para crear un disco administrado de Azure Estándar o Premium.

  1. Cree un archivo denominado Azure-pvc.yaml y pegue el siguiente manifiesto. La notificación solicita un disco llamado Azure-managed-disk que tiene un tamaño de 5 GB con acceso ReadWriteOnce. La clase de almacenamiento managed-csi se especifica como la clase de almacenamiento.

    apiVersion: v1
    kind: PersistentVolumeClaim
    metadata:
        name: azure-managed-disk
    spec:
    accessModes:
    - ReadWriteOnce
    storageClassName: managed-csi
    resources:
        requests:
        storage: 5Gi
    

    Sugerencia

    Para crear un disco que usa almacenamiento prémium, use storageClassName: managed-csi-premium en lugar de managed-csi.

  2. Cree el PVC usando el comando kubectl apply y especifique su archivo Azure-pvc.yaml :

    kubectl apply -f azure-pvc.yaml
    

    La salida debería ser similar a la salida de ejemplo siguiente:

    persistentvolumeclaim/azure-managed-disk created
    
  3. Verifique que el PV esté listo para que lo utilice un pod mediante el comando kubectl describe pvc.

    kubectl describe pvc azure-managed-disk
    

    La salida debe ser similar a la siguiente salida de ejemplo, que muestra que el PV está en estado Pendiente :

    Name:            azure-managed-disk
    Namespace:       default
    StorageClass:    managed-csi
    Status:          Pending
    [...]
    

Crea un pod que use un PVC con Azure Disks

  1. Cree un archivo denominado Azure-pvc-disk.yaml y pegue el siguiente manifiesto. El manifiesto crea un pod NGINX básico que utiliza la notificación de volumen persistente llamado Azure-managed-disk para montar el disco de Azure en la ruta de acceso /mnt/Azure. (Para los contenedores de Windows Server, especifique un mountPath mediante la convención de ruta de acceso de Windows, como "D:").

    kind: Pod
    apiVersion: v1
    metadata:
      name: mypod
    spec:
      containers:
        - name: mypod
          image: mcr.microsoft.com/oss/nginx/nginx:1.15.5-alpine
          resources:
            requests:
              cpu: 100m
              memory: 128Mi
            limits:
              cpu: 250m
              memory: 256Mi
          volumeMounts:
            - mountPath: "/mnt/azure"
              name: volume
              readOnly: false
      volumes:
        - name: volume
          persistentVolumeClaim:
            claimName: azure-managed-disk
    
  2. Cree el pod mediante el comando kubectl apply.

    kubectl apply -f azure-pvc-disk.yaml
    

    La salida debería ser similar a la salida de ejemplo siguiente:

    pod/mypod created
    
  3. Ahora tiene un pod en ejecución con el disco de Azure montado en el directorio /mnt/azure. Verifique la configuración del pod usando el comando kubectl describe.

    kubectl describe pod mypod
    

    La salida debe ser similar al siguiente ejemplo, que muestra que el volumen llamado volumen está utilizando el PVC denominado Azure-managed-disk:

    [...]
    Volumes:
    volume:
        Type:       PersistentVolumeClaim (a reference to a PersistentVolumeClaim in the same namespace)
        ClaimName:  azure-managed-disk
        ReadOnly:   false
        default-token-smm2n:
        Type:        Secret (a volume populated by a Secret)
        SecretName:  default-token-smm2n
        Optional:    false
    [...]
    Events:
    Type    Reason                 Age   From                               Message
    ----    ------                 ----  ----                               -------
    Normal  Scheduled              2m    default-scheduler                  Successfully assigned mypod to aks-nodepool1-12345678-9
    Normal  SuccessfulMountVolume  2m    kubelet, aks-nodepool1-12345678-9  MountVolume.SetUp succeeded for volume "default-token-smm2n"
    Normal  SuccessfulMountVolume  1m    kubelet, aks-nodepool1-12345678-9  MountVolume.SetUp succeeded for volume "pvc-abc0d123-4e5f-67g8-901h-ijk23l45m678"
    [...]
    

Parámetros de clase de instantánea de volumen para Azure Disks

El controlador CSI de Azure Disks admite la creación de instantáneas de volúmenes persistentes. Como parte de esta funcionalidad, el controlador puede realizar instantáneas completas o incrementales en función del valor establecido en el incremental parámetro .

En la tabla siguiente se proporcionan detalles sobre los parámetros que puede usar para definir una clase de instantánea de volumen personalizada para sus instantáneas de volumen con discos de Azure.

Nombre Meaning Valores disponibles Obligatorio Valor predeterminado
resourceGroup Grupo de recursos para almacenar capturas de instantánea GRUPO DE RECURSOS EXISTENTE No Si no se especifica, la instantánea se almacenará en el mismo grupo de recursos que los discos de Azure de origen.
incremental Tomar instantánea completa o incremental true, false No true
tags Etiquetas de Azure Disks Formato de etiqueta: 'key1=val1,key2=val2' No ""
userAgent Agente de usuario utilizado para la atribución de uso del cliente No Agente de usuario generado con formato driverName/driverVersion compiler/version (OS-ARCH)
subscriptionID Especificación del identificador de suscripción de Azure en el que se creará Azure Disks Identificador de suscripción de Azure No Si no está vacío, resourceGroup debe proporcionarse, incremental debe establecerse como false

Creación de una instantánea de volumen a partir de una PVC con Azure Disks

Nota:

Antes de continuar, asegúrese de que la aplicación no está escribiendo datos en el disco de origen.

  1. Cree una clase de instantánea de volumen con el comando kubectl apply:

    kubectl apply -f https://raw.githubusercontent.com/kubernetes-sigs/azuredisk-csi-driver/master/deploy/example/snapshot/storageclass-azuredisk-snapshot.yaml
    

    La salida debería ser similar a la salida de ejemplo siguiente:

    volumesnapshotclass.snapshot.storage.k8s.io/csi-azuredisk-vsc created
    
  2. Cree una instantánea de volumen a partir de la PVC dinámica que creó anteriormente en este tutorial mediante el comando kubectl apply:

    kubectl apply -f https://raw.githubusercontent.com/kubernetes-sigs/azuredisk-csi-driver/master/deploy/example/snapshot/azuredisk-volume-snapshot.yaml
    

    La salida debería ser similar a la salida de ejemplo siguiente:

    volumesnapshot.snapshot.storage.k8s.io/azuredisk-volume-snapshot created
    
  3. Compruebe que la instantánea de volumen se creó correctamente mediante el kubectl describe comando :

    kubectl describe volumesnapshot azuredisk-volume-snapshot
    

    La salida debe ser similar a la siguiente salida de ejemplo, que muestra que la instantánea de volumen está lista para usarse:

    Name:         azuredisk-volume-snapshot
    Namespace:    default
    Labels:       <none>
    Annotations:  API Version:  snapshot.storage.k8s.io/v1
    Kind:         VolumeSnapshot
    Metadata:
      Creation Timestamp:  2020-08-27T05:27:58Z
      Finalizers:
        snapshot.storage.kubernetes.io/volumesnapshot-as-source-protection
        snapshot.storage.kubernetes.io/volumesnapshot-bound-protection
      Generation:        1
      Resource Version:  714582
      Self Link:         /apis/snapshot.storage.k8s.io/v1/namespaces/default/volumesnapshots/azuredisk-volume-snapshot
      UID:               00aa00aa-bb11-cc22-dd33-44ee44ee44ee
    Spec:
      Source:
        Persistent Volume Claim Name:  pvc-azuredisk
      Volume Snapshot Class Name:      csi-azuredisk-vsc
    Status:
      Bound Volume Snapshot Content Name:  snapcontent-00aa00aa-bb11-cc22-dd33-44ee44ee44ee
      Creation Time:                       2020-08-31T05:27:59Z
      Ready To Use:                        true
      Restore Size:                        10Gi
    Events:                                <none>
    

Creación de una nueva PVC basada en una instantánea de volumen con Azure Disks

Puede crear una nueva PVC basada en una instantánea de volumen. En esta sección, utilizaremos la instantánea de la sección Creación de una instantánea de volumen a partir de una PVC con Azure Disks y crearemos una nueva PVC y un nuevo pod para consumirla.

  1. Cree la PVC y el pod mediante los siguientes comandos kubectl apply:

    kubectl apply -f https://raw.githubusercontent.com/kubernetes-sigs/azuredisk-csi-driver/master/deploy/example/snapshot/pvc-azuredisk-snapshot-restored.yaml
    kubectl apply -f https://raw.githubusercontent.com/kubernetes-sigs/azuredisk-csi-driver/master/deploy/example/snapshot/nginx-pod-restored-snapshot.yaml
    

    La salida debería ser similar a la salida de ejemplo siguiente:

    persistentvolumeclaim/pvc-azuredisk-snapshot-restored created
    pod/nginx-restored created
    
  2. Asegúrese de que es la misma PVC creada antes; para ello, compruebe el volumen mediante el comando kubectl exec para ejecutar el comando ls dentro del pod.

    kubectl exec nginx-restored -- ls /mnt/azuredisk
    

    La salida debe ser similar a la siguiente salida de ejemplo, que muestra el mismo contenido que el PVC original, incluido el test.txt archivo que se creó en el PVC original:

    lost+found
    outfile
    test.txt
    

Clonación de volúmenes con Azure Disks

Un volumen clonado se define como un duplicado de un volumen de Kubernetes existente. Para más información sobre la clonación de volúmenes en Kubernetes, consulte la documentación conceptual para la clonación de volúmenes.

El controlador CSI para Azure Disks admite la clonación de volúmenes. Para demostrarlo, cree un volumen clonado de la PVC dinámica que creó anteriormente en este tutorial y un nuevo pod para consumirla.

  1. Cree la PVC clonada y el pod mediante los siguientes comandos kubectl apply:

    kubectl apply -f https://raw.githubusercontent.com/kubernetes-sigs/azuredisk-csi-driver/master/deploy/example/cloning/pvc-azuredisk-cloning.yaml
    kubectl apply -f https://raw.githubusercontent.com/kubernetes-sigs/azuredisk-csi-driver/master/deploy/example/cloning/nginx-pod-restored-cloning.yaml
    

    La salida debería ser similar a la salida de ejemplo siguiente:

    persistentvolumeclaim/pvc-azuredisk-cloning created
    pod/nginx-restored-cloning created
    
  2. Compruebe que el volumen clonado tiene el mismo contenido que el volumen original comprobando el contenido del volumen mediante el kubectl exec comando para ejecutar el ls comando en el pod:

    kubectl exec nginx-restored-cloning -- ls /mnt/azuredisk
    

    La salida debe ser similar a la siguiente salida de ejemplo, que muestra el mismo contenido que el PVC original, incluido el test.txt archivo que se creó en el PVC original:

    lost+found
    outfile
    test.txt
    

Cambio del tamaño de un volumen persistente sin tiempo de inactividad con Azure Disks

Nota:

Actualmente no se admite la reducción de volúmenes persistentes. Al intentar aplicar revisiones a un PVC existente con un tamaño menor que el actual, se producirá el siguiente mensaje de error:

The persistentVolumeClaim "pvc-azuredisk" is invalid: spec.resources.requests.storage: Forbidden: field can not be less than previous value.

Puede solicitar un volumen mayor para una PVC editando el objeto de la PVC para especificar un tamaño mayor. Este cambio desencadena la expansión del volumen subyacente que respalda el PV. Nunca se crea un PV para satisfacer la notificación, sino que se cambia el tamaño de un volumen existente.

En AKS, la clase de almacenamiento integrada managed-csi ya admite la expansión, por lo que puede usar el PVC dinámico que creó anteriormente en este tutorial. La PVC ha solicitado un volumen persistente de 10 GB.

  1. Compruebe el tamaño actual del volumen utilizando el comando kubectl exec para ejecutar el comando df -h dentro del pod.

    kubectl exec -it nginx-azuredisk -- df -h /mnt/azuredisk
    

    La salida debe ser similar a la siguiente salida de ejemplo, que muestra que el tamaño actual del volumen es de 10 Gi:

    Filesystem      Size  Used Avail Use% Mounted on
    /dev/sdc        9.8G   42M  9.8G   1% /mnt/azuredisk
    
  2. Expanda la PVC aumentando el campo spec.resources.requests.storage mediante el comando kubectl patch. En este ejemplo, aumentamos el tamaño del PVC a 15 Gi:

    kubectl patch pvc pvc-azuredisk --type merge --patch '{"spec": {"resources": {"requests": {"storage": "15Gi"}}}}'
    

    La salida debería ser similar a la salida de ejemplo siguiente:

    persistentvolumeclaim/pvc-azuredisk patched
    
  3. Compruebe el PV para confirmar que el nuevo tamaño se refleja en el PV mediante el kubectl get pv comando :

    kubectl get pv
    

    La salida debe ser similar a la siguiente salida de ejemplo, que muestra que el PV se ha redimensionado a 15 Gi.

    NAME                                       CAPACITY   ACCESS MODES   RECLAIM POLICY   STATUS   CLAIM                                     STORAGECLASS   REASON   AGE
    pvc-a0a0a0a0-bbbb-cccc-dddd-e1e1e1e1e1e1   15Gi       RWO            Delete           Bound    default/pvc-azuredisk                     managed-csi             2d2h
    (...)
    
  4. Después de unos minutos, compruebe el PVC para confirmar que el nuevo tamaño se refleja en el PVC mediante el kubectl get pvc comando :

    kubectl get pvc pvc-azuredisk
    

    La salida debe ser similar a la siguiente salida de ejemplo, que muestra que el PVC se ha redimensionado a 15 Gi:

    NAME            STATUS   VOLUME                                     CAPACITY   ACCESS MODES   STORAGECLASS   AGE
    pvc-azuredisk   Bound    pvc-a0a0a0a0-bbbb-cccc-dddd-e1e1e1e1e1e1   15Gi       RWO            managed-csi    2d2h
    
  5. Confirme que el tamaño del disco del pod se ha actualizado al nuevo tamaño mediante el kubectl exec comando para ejecutar el df -h comando dentro del pod:

    kubectl exec -it nginx-azuredisk -- df -h /mnt/azuredisk
    

    La salida debe ser similar al siguiente ejemplo, que muestra que el tamaño del volumen se ha actualizado a 15 Gi.

    Filesystem      Size  Used Avail Use% Mounted on
    /dev/sdc         15G   46M   15G   1% /mnt/azuredisk
    

Expansión a petición para SSD Premium con Azure Disks

El modelo de expansión de disco a petición permite ráfagas de disco siempre que sus necesidades superen su capacidad actual. Este modelo genera cargos adicionales cada vez que el disco se expande. La expansión bajo demanda solo está disponible para los SSD prémium de más de 512 GiB. Para obtener más información sobre las IOPS y el rendimiento aprovisionados de SSD Premium por disco, consulte Tamaño de SSD Premium. Como alternativa, está la expansión basada en crédito, en la que el disco solo se expandirá si tiene créditos de expansión acumulados en su cubo de crédito. La expansión basada en crédito no genera cargos adicionales cuando el disco se expande. La funcionalidad de bursteo basada en crédito solo está disponible para SSD Premium de 512 GiB y tamaños menores, y SSD estándar de 1024 GiB y menores. Para más información sobre la expansión a petición, consulte Expansión a petición.

Importante

La clase de almacenamiento predeterminada managed-csi-premium tiene deshabilitado la expansión a petición y usa la expansión basada en crédito. Cualquier SSD Premium creado dinámicamente por una notificación de volumen persistente basada en la clase de almacenamiento predeterminada managed-csi-premium también tiene deshabilitada la expansión a petición.

Para crear un volumen persistente SSD Premium con la expansión a petición habilitada, puede crear una nueva clase de almacenamiento con el parámetro enableBursting establecido en true, tal como se muestra en la siguiente plantilla de YAML. Para obtener más información sobre cómo habilitar la expansión a petición, consulte Expansión a petición. Para más información sobre cómo crear su propia clase de almacenamiento con la expansión a petición habilitada, consulte Creación de una clase de almacenamiento Premium CSI administrada ampliable.

apiVersion: storage.k8s.io/v1
kind: StorageClass
metadata:
  name: burstable-managed-csi-premium
provisioner: disk.csi.azure.com
parameters:
  skuname: Premium_LRS
  enableBursting: "true"
reclaimPolicy: Delete
volumeBindingMode: WaitForFirstConsumer
allowVolumeExpansion: true

Uso de Azure Disks con contenedores de Windows

El controlador CSI de disco de Azure admite nodos y contenedores de Windows. Si quiere usar contenedores de Windows, siga el inicio rápido de contenedores de Windows para agregar un grupo de nodos de Windows. Después de tener un grupo de nodos de Windows, puede usar las clases de almacenamiento integradas, como managed-csi.

  1. Implemente un conjunto con estado basado en Windows de ejemplo que guarde las marcas de tiempo en el archivo data.txt mediante el siguiente kubectl apply comando:

    kubectl apply -f https://raw.githubusercontent.com/kubernetes-sigs/azuredisk-csi-driver/master/deploy/example/windows/statefulset.yaml
    

    La salida debería ser similar a la salida de ejemplo siguiente:

    statefulset.apps/busybox-azuredisk created
    
  2. Valide el contenido del archivo data.txt en el pod utilizando el comando kubectl exec y ejecutar el comando type dentro del pod:

    kubectl exec -it statefulset-azuredisk-win-0 -- powershell -c "type c:/mnt/azuredisk/data.txt"
    

    La salida debe ser similar a la salida de ejemplo siguiente, que muestra las marcas de tiempo que se guardan en el archivo data.txt:

    2020-08-27 08:13:41Z
    2020-08-27 08:13:42Z
    2020-08-27 08:13:44Z
    (...)
    

Creación de un PV estático con Azure Disks

En las secciones siguientes se proporcionan instrucciones para crear un PV estático con Azure Disks. Un PV estático es un volumen persistente que un administrador crea manualmente. Este PV está disponible para su uso por parte de los pods del clúster. Para usar un PV estático, cree un PVC que haga referencia al PV y, a continuación, cree un pod que haga referencia al PVC.

Parámetros de clase de almacenamiento para PVs estáticos con Azure Disks

En la tabla siguiente se incluyen parámetros que puede usar para definir una clase de almacenamiento personalizada para los PVC estáticos con Azure Disks:

Nombre Meaning Valores disponibles Obligatorio Valor predeterminado
volumeHandle URI de disco de Azure /subscriptions/{sub-id}/resourcegroups/{group-name}/providers/microsoft.compute/disks/{disk-id} N/A
volumeAttributes.fsType Tipo de sistema de archivos ext4, ext3, ext2, xfs, btrfs para Linux
ntfs para Windows
No ext4 para Linux
ntfs para Windows
volumeAttributes.partition Número de partición del disco existente (solo se admite en Linux) 1, , 2, 3 No Vacío (sin partición) Asegúrese de que el formato de partición es: -part1
volumeAttributes.cachingMode Configuración de caché del host de disco None, , ReadOnly, ReadWrite No ReadOnly

Creación de un disco de Azure

Al crear un disco de Azure para usarlo con AKS, puede crear el recurso de disco en el grupo de recursos del nodo. Este enfoque permite que el clúster AKS acceda y administre el recurso de disco. Si en cambio crea el disco en un grupo de recursos distinto, debe conceder a la identidad administrada de AKS del clúster el rol de Contributor en el grupo de recursos del disco.

  1. Identifique el nombre del grupo de recursos del nodo mediante el az aks show comando con el --query nodeResourceGroup parámetro .

    az aks show --resource-group myResourceGroup --name myAKSCluster --query nodeResourceGroup -o tsv
    

    La salida debe ser similar a la siguiente salida de ejemplo, que muestra el nombre del grupo de recursos de nodo para el clúster de AKS:

    MC_myResourceGroup_myAKSCluster_eastus
    
  2. Cree un disco mediante el comando az disk create. Especifique el nombre del grupo de recursos del nodo y un nombre para el recurso de disco, como miDiscoAKS. En el ejemplo siguiente se crea un disco de 20 GiB y se genera el identificador del disco después de crearlo. Si tiene que crear un disco para su uso con contenedores de Windows Server, agregue el parámetro --os-type windows para formatear correctamente el disco.

    az disk create \
      --resource-group MC_myResourceGroup_myAKSCluster_eastus \
      --name myAKSDisk \
      --size-gb 20 \
      --query id --output tsv
    

    Nota:

    La facturación de los discos de Azure se realiza por SKU y según un tamaño específico. Estas SKU van de 32 GiB para discos S4 o P4 a 32 TiB para discos S80 o P80 (en versión preliminar). El rendimiento de transferencia de datos de red y el rendimiento IOPS de un disco administrado Premium depende de la SKU y del tamaño de instancia de los nodos en el clúster de AKS. Consulte Precios y rendimiento de Managed Disks.

    La salida debe ser similar a la siguiente salida de ejemplo, que muestra el identificador de recurso del disco que se creó:

    /subscriptions/<subscriptionID>/resourceGroups/MC_myAKSCluster_myAKSCluster_eastus/providers/Microsoft.Compute/disks/myAKSDisk
    

Cree un PV y un PVC que hagan referencia al disco de Azure

  1. Cree un archivo pv-azuredisk.yaml con un PV mediante el siguiente manifiesto de ejemplo. Actualice volumeHandle con el identificador de recurso de disco del paso anterior. Para los contenedores de Windows Server, especifique ntfs para el parámetro fsType.

    apiVersion: v1
    kind: PersistentVolume
    metadata:
      annotations:
        pv.kubernetes.io/provisioned-by: disk.csi.azure.com
      name: pv-azuredisk
    spec:
      capacity:
        storage: 20Gi
      accessModes:
        - ReadWriteOnce
      persistentVolumeReclaimPolicy: Retain
      storageClassName: managed-csi
      csi:
        driver: disk.csi.azure.com
        volumeHandle: /subscriptions/<subscriptionID>/resourceGroups/MC_myAKSCluster_myAKSCluster_eastus/providers/Microsoft.Compute/disks/myAKSDisk
        volumeAttributes:
          fsType: ext4
    

    Como se indicó en Crear un disco de Azure, si el disco para el volumeHandle se creó en un grupo de recursos distinto, debe conceder a la identidad administrada del clúster de AKS el rol Contributor al grupo de recursos del disco.

  2. Cree un archivo pvc-azuredisk.yaml con una PVC que utilice el PV mediante el siguiente manifiesto de ejemplo:

    apiVersion: v1
    kind: PersistentVolumeClaim
    metadata:
      name: pvc-azuredisk
    spec:
      accessModes:
        - ReadWriteOnce
      resources:
        requests:
          storage: 20Gi
      volumeName: pv-azuredisk
      storageClassName: managed-csi
    
  3. Cree el PV y PVC mediante los siguientes kubectl apply comandos:

    kubectl apply -f pv-azuredisk.yaml
    kubectl apply -f pvc-azuredisk.yaml
    
  4. Compruebe que la PVC se ha creado correctamente y vinculado al PV mediante el comando kubectl get pvc:

    kubectl get pvc pvc-azuredisk
    

    La salida debe ser similar al siguiente ejemplo, que muestra que la PVC está en estado Vinculado:

    NAME            STATUS   VOLUME         CAPACITY    ACCESS MODES   STORAGECLASS   AGE
    pvc-azuredisk   Bound    pv-azuredisk   20Gi        RWO                           5s
    

Crear un pod que utilice el PVC con Azure Disks

  1. Cree un archivo Azure-disk-pod.yaml para hacer referencia a su PVC usando el siguiente manifiesto de ejemplo. (Para los contenedores de Windows Server, especifique un mountPath mediante la convención de ruta de acceso de Windows, como "D:").

    apiVersion: v1
    kind: Pod
    metadata:
      name: mypod
    spec:
      nodeSelector:
        kubernetes.io/os: linux
      containers:
      - image: mcr.microsoft.com/oss/nginx/nginx:1.15.5-alpine
        name: mypod
        resources:
          requests:
            cpu: 100m
            memory: 128Mi
          limits:
            cpu: 250m
            memory: 256Mi
        volumeMounts:
          - name: azure
            mountPath: /mnt/azure
      volumes:
        - name: azure
          persistentVolumeClaim:
            claimName: pvc-azuredisk
    
  2. Aplique la configuración y monte el volumen mediante el comando kubectl apply.

    kubectl apply -f azure-disk-pod.yaml
    

Limpieza de recursos

  • Quite los recursos que creó en este tutorial mediante los siguientes comandos [kubectl delete][kubectl-delete]:

    # Remove the pod
    kubectl delete -f azure-pvc-disk.yaml
    
    # Remove the persistent volume claim
    kubectl delete -f azure-pvc.yaml