Uso de discos Ultra de Azure en Azure Kubernetes Service

Los discos Ultra de Azure ofrecen un alto rendimiento, IOPS elevadas y un almacenamiento en disco coherente y de baja latencia para las aplicaciones con estado. Una ventaja importante de los discos Ultra es la posibilidad de cambiar dinámicamente el rendimiento del disco SSD junto con sus cargas de trabajo sin tener que reiniciar los nodos de agente. Los discos Ultra son adecuados para cargas de trabajo con un uso intensivo de datos.

En este artículo se describe cómo configurar un clúster de AKS nuevo o existente para usar discos Ultra de Azure.

Antes de empezar

Esta característica solo puede establecerse al crear el cluster o al crear un grupo de nodos.

Limitaciones

  • Los discos Ultra de Azure requieren grupos de nodos implementados en zonas de disponibilidad y regiones que admitan estos discos, y solo son compatibles con series de máquinas virtuales específicas. Revise la tabla correspondiente en la sección Limitaciones del disco Ultra para obtener más información.
  • No se pueden usar discos Ultra con algunas características y funcionalidades, como conjuntos de disponibilidad o Azure Disk Encryption. Revise las limitaciones del disco Ultra para obtener la información más reciente.

Crear un clúster que pueda usar discos Ultra

Creación de un clúster de AKS que pueda sacar provecho de los discos ultra de Azure mediante los siguientes comandos de la CLI. Use el parámetro --enable-ultra-ssd para establecer la característica EnableUltraSSD.

az aks create -g MyResourceGroup -n myAKSCluster -l westus2 --node-vm-size Standard_D2s_v3 --zones 1 2 --node-count 2 --enable-ultra-ssd

Si desea crear un clúster sin la compatibilidad con disco Ultra, puede omitir el parámetro --enable-ultra-ssd para hacerlo.

Habilitación de discos ultra en un clúster existente

Puede habilitar los discos Ultra en un clúster existente agregando un nuevo grupo de nodos al clúster que admita discos Ultra. Configure un nuevo grupo de nodos para utilizar discos Ultra mediante el parámetro --enable-ultra-ssd con el comando az aks nodepool add.

Si desea crear grupos de nodos nuevos sin compatibilidad con los discos Ultra, puede hacerlo excluyendo el parámetro --enable-ultra-ssd.

Uso de discos Ultra dinámicamente con una clase de almacenamiento

Para usar los discos Ultra en nuestras implementaciones o conjuntos con estado, puede usar una clase de almacenamiento para el aprovisionamiento dinámico.

Creación de la clase de almacenamiento

Una clase de almacenamiento se usa para definir cómo se crea dinámicamente una unidad de almacenamiento con un volumen persistente. Para obtener más información sobre las clases de almacenamiento de Kubernetes, vea Clases de almacenamiento de Kubernetes. En este ejemplo, vamos a crear una clase de almacenamiento que haga referencia a discos Ultra.

  1. Cree un archivo denominado azure-ultra-disk-sc.yaml y cópielo en el siguiente manifiesto:

    kind: StorageClass
    apiVersion: storage.k8s.io/v1
    metadata:
      name: ultra-disk-sc
    provisioner: disk.csi.azure.com # replace with "kubernetes.io/azure-disk" if aks version is less than 1.21
    volumeBindingMode: WaitForFirstConsumer # optional, but recommended if you want to wait until the pod that will use this disk is created 
    parameters:
      skuname: UltraSSD_LRS
      kind: managed
      cachingMode: None
      diskIopsReadWrite: "2000"  # minimum value: 2 IOPS/GiB 
      diskMbpsReadWrite: "320"   # minimum value: 0.032/GiB
    
  2. Cree la clase de almacenamiento con el comando kubectl apply y especifique el archivo azure-ultra-disk-sc.yaml.

    kubectl apply -f azure-ultra-disk-sc.yaml
    

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

    storageclass.storage.k8s.io/ultra-disk-sc created
    

Creación de una notificación de volumen persistente

Una notificación de volumen persistente (PVC) se usa para aprovisionar automáticamente el almacenamiento en función de una clase de almacenamiento. En este caso, un PVC puede usar la clase de almacenamiento creada anteriormente para crear un disco Ultra.

  1. Cree un archivo denominado azure-ultra-disk-pvc.yaml y cópielo en el siguiente manifiesto:

    apiVersion: v1
    kind: PersistentVolumeClaim
    metadata:
      name: ultra-disk
    spec:
      accessModes:
     - ReadWriteOnce
      storageClassName: ultra-disk-sc
      resources:
        requests:
          storage: 1000Gi
    

    La notificación solicita un disco llamado ultra-disk que tiene un tamaño de 1000 GB con acceso ReadWriteOnce. La clase de almacenamiento ultra-disk-sc se especifica como la clase de almacenamiento.

  2. Cree la notificación del volumen persistente con el comando kubectl apply y especifique el archivo azure-ultra-disk-pvc.yaml.

    kubectl apply -f azure-ultra-disk-pvc.yaml
    

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

    persistentvolumeclaim/ultra-disk created
    

Uso del volumen persistente

Una vez que se haya creado la notificación de volumen persistente y tras el aprovisionamiento correcto del disco, se puede crear un pod con acceso al disco. El siguiente manifiesto crea un pod NGINX básico que utiliza la notificación de volumen persistente denominada ultra-disk para montar el disco de Azure en la ruta de acceso /mnt/azure.

  1. Cree un archivo denominado nginx-ultra.yaml y cópielo en el siguiente manifiesto:

    kind: Pod
    apiVersion: v1
    metadata:
      name: nginx-ultra
    spec:
      containers:
     - name: nginx-ultra
        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
      volumes:
        - name: volume
          persistentVolumeClaim:
            claimName: ultra-disk
    
  2. Cree el pod mediante el comando kubectl apply y especifique el archivo nginx-ultra.yaml.

    kubectl apply -f nginx-ultra.yaml
    

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

    pod/nginx-ultra created
    

    Ahora tiene un pod en ejecución con el disco de Azure montado en el directorio /mnt/azure.

  3. Consulte los detalles de configuración mediante el comando kubectl describe pod y especifique el archivo nginx-ultra.yaml.

    kubectl describe pod nginx-ultra
    

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

    [...]
    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-79590246-0
      Normal  SuccessfulMountVolume  2m    kubelet, aks-nodepool1-79590246-0  MountVolume.SetUp succeeded for volume "default-token-smm2n"
      Normal  SuccessfulMountVolume  1m    kubelet, aks-nodepool1-79590246-0  MountVolume.SetUp succeeded for volume "pvc-faf0f176-8b8d-11e8-923b-deb28c58d242"
    [...]
    

Pasos siguientes