Creación manual y uso de un volumen con discos de Azure en Azure Kubernetes Service (AKS)

Las aplicaciones que usan contenedores a menudo necesitan acceder a un volumen de datos externo y conservar datos en él. Si un solo pod necesita acceso al almacenamiento, puede utilizar discos de Azure para presentar un volumen nativo y usarlo en la aplicación. Este artículo muestra cómo crear manualmente un disco de Azure y asociarlo a un pod en AKS.

Nota

Un disco de Azure solo se puede montar en un solo pod a la vez. Si tiene que compartir un volumen persistente en varios pods, use Azure Files.

Para más información sobre los volúmenes de Kubernetes, consulte Opciones de almacenamiento para aplicaciones en AKS.

Antes de empezar

En este artículo se presupone que ya tiene un clúster de AKS con la versión 1.21 o una posterior. Si necesita un clúster de AKS, consulte el inicio rápido de AKS mediante la CLI de Azure, Azure PowerShell o Azure Portal.

Si quiere interactuar con discos de Azure en un clúster de AKS con la versión 1.20 o una anterior, consulte el complemento de Kubernetes para discos de Azure.

Aprovisionamiento estático de la clase de almacenamiento

En la tabla siguiente se describen los parámetros de la clase de almacenamiento para el aprovisionamiento estático del controlador CSI de disco de Azure:

Nombre Significado Valor disponible Mandatory Valor predeterminado
volumeHandle URI de disco de Azure /subscriptions/{sub-id}/resourcegroups/{group-name}/providers/microsoft.compute/disks/{disk-id} N/D
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 similar a -part1
volumeAttributes.cachingMode Configuración de caché del host de disco None, ReadOnly, ReadWrite No ReadOnly

Creación de un disco de Azure

Cuando crea 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 Azure Kubernetes Service (AKS) del clúster el rol Contributor en el grupo de recursos del disco. En este ejercicio, va a crear el disco en el mismo grupo de recursos que el clúster.

  1. Identifique el nombre del grupo de recursos con el comando az aks show y agregue el parámetro de consulta --query nodeResourceGroup. En este ejemplo se obtiene el grupo de recursos del nodo para el nombre de clúster de AKS myAKSCluster en el grupo de recursos denominado myResourceGroup:

    $ az aks show --resource-group myResourceGroup --name myAKSCluster --query nodeResourceGroup -o tsv
    
    MC_myResourceGroup_myAKSCluster_eastus
    
  2. Cree un disco mediante el comando az disk create. Especifique el nombre del grupo de recursos del nodo que obtuvo en el comando anterior y, después, un nombre para el recurso de disco, como miDiscoAKS. En el ejemplo siguiente, se crea un disco de 20 GiB y se obtiene como salida el identificador del disco una vez creado. 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

    Los discos de Azure se facturan por SKU de un tamaño específico. Estas SKU varían 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.

    El identificador de recurso de disco se muestra una vez que se ha completado correctamente el comando, como se muestra en la siguiente salida de ejemplo. Este identificador de disco se utiliza para montar el disco en el paso siguiente.

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

Montaje del disco como un volumen

  1. Cree un archivo pv-azuredisk.yaml con un elemento PersistentVolume. Actualice volumeHandle con el identificador de recurso de disco del paso anterior. Por ejemplo:

    apiVersion: v1
    kind: PersistentVolume
    metadata:
      name: pv-azuredisk
    spec:
      capacity:
        storage: 20Gi
      accessModes:
        - ReadWriteOnce
      persistentVolumeReclaimPolicy: Retain
      storageClassName: managed-csi
      csi:
        driver: disk.csi.azure.com
        readOnly: false
        volumeHandle: /subscriptions/<subscriptionID>/resourceGroups/MC_myAKSCluster_myAKSCluster_eastus/providers/Microsoft.Compute/disks/myAKSDisk
        volumeAttributes:
          fsType: ext4
    
  2. Cree un archivo pvc-azuredisk.yaml con un elemento PersistentVolumeClaim que utilice el elemento PersistentVolume. Por ejemplo:

    apiVersion: v1
    kind: PersistentVolumeClaim
    metadata:
      name: pvc-azuredisk
    spec:
      accessModes:
        - ReadWriteOnce
      resources:
        requests:
          storage: 20Gi
      volumeName: pv-azuredisk
      storageClassName: managed-csi
    
  3. Use los comandos kubectl para crear PersistentVolume y PersistentVolumeClaim, haciendo referencia a los dos archivos YAML creados anteriormente:

    kubectl apply -f pv-azuredisk.yaml
    kubectl apply -f pvc-azuredisk.yaml
    
  4. Para comprobar que PersistentVolumeClaim se creó y enlazó al objeto PersistentVolume, ejecute el siguiente comando:

    $ kubectl get pvc pvc-azuredisk
    
    NAME            STATUS   VOLUME         CAPACITY    ACCESS MODES   STORAGECLASS   AGE
    pvc-azuredisk   Bound    pv-azuredisk   20Gi        RWO                           5s
    
  5. Cree un archivo azure-disk-pod.yaml para hacer referencia al elemento PersistentVolumeClaim. Por ejemplo:

    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
    
  6. Ejecute el siguiente comando para aplicar la configuración y montar el volumen, haciendo referencia al archivo de configuración de YAML creado en los pasos anteriores:

    kubectl apply -f azure-disk-pod.yaml
    

Pasos siguientes

Para obtener información sobre nuestros procedimientos recomendados de almacenamiento y copia de seguridad, consulte Procedimientos recomendados para el almacenamiento y las copias de seguridad en AKS.