Leer en inglés

Compartir a través de


Uso de discos SSD prémium v2 de Azure en Azure Kubernetes Service

Los discos SSD prémium v2 de Azure ofrecen cargas de trabajo empresariales intensas en E/S, una latencia de disco inferior a milisegundos coherente, y un alto rendimiento e IOPS. El rendimiento (capacidad, rendimiento e IOPS) de discos SSD prémium v2 se puede configurar de forma independiente en cualquier momento, lo que facilita que más escenarios sean rentables, a la vez que satisfacen las necesidades de rendimiento.

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

Antes de empezar

Antes de crear o actualizar un clúster de AKS que pueda usar discos SSD prémium v2 de Azure, debe crear un clúster de AKS en la misma región y zona de disponibilidad que admita Premium Storage y conecte los discos siguiendo los pasos que se indican a continuación.

Para un clúster de AKS existente, puede habilitar discos SSD prémium v2 agregando un nuevo grupo de nodos al clúster y, a continuación, conecte los discos siguiendo los pasos que se indican a continuación.

Importante

Los discos SSD prémium v2 de Azure requieren grupos de nodos implementados en regiones que admitan estos discos. Para obtener una lista de las regiones admitidas, consulte Regiones compatibles con discos SSD prémium v2.

Limitaciones

  • Los discos SSD prémium v2 de Azure tienen ciertas limitaciones que debe tener en cuenta. Para obtener una lista completa, consulte Limitaciones de SSD prémium v2.

Uso dinámico de discos SSD prémium v2 con una clase de almacenamiento

Para usar discos SSD prémium v2 en una implementación o StatefulSet, 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 más información sobre las clases de almacenamiento de Kubernetes, consulte las clases de almacenamiento de Kubernetes.

En este ejemplo, se crea una clase de almacenamiento que hace referencia a discos SSD prémium v2. Cree un archivo denominado azure-pv2-disk-sc.yaml y cópielo en el siguiente código manifiesto.

apiVersion: storage.k8s.io/v1
kind: StorageClass
metadata:
   name: premium2-disk-sc
parameters:
   cachingMode: None
   skuName: PremiumV2_LRS
   DiskIOPSReadWrite: "4000"
   DiskMBpsReadWrite: "1000"
provisioner: disk.csi.azure.com
reclaimPolicy: Delete
volumeBindingMode: Immediate
allowVolumeExpansion: true

Cree la clase de almacenamiento con el comando kubectl apply y especifique el archivo azure-pv2-disk-sc.yaml:

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

La salida del comando es similar al ejemplo siguiente:

storageclass.storage.k8s.io/premium2-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.

Cree un archivo denominado azure-pv2-disk-pvc.yaml y cópielo en el siguiente código manifiesto. La notificación solicita un disco llamado premium2-disk que tiene un tamaño de 1000 GB con acceso ReadWriteOnce. La clase de almacenamiento premium2-disk-sc se especifica como la clase de almacenamiento.

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

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

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

La salida del comando es similar al ejemplo siguiente:

persistentvolumeclaim/premium2-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 premium2-disk para montar el disco de Azure en la ruta de acceso /mnt/azure.

Cree un archivo denominado nginx-premium2.yaml y cópielo en el siguiente código manifiesto.

kind: Pod
apiVersion: v1
metadata:
  name: nginx-premium2
spec:
  containers:
  - name: nginx-premium2
    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: premium2-disk

Cree el pod con el comando kubectl apply, tal como se muestra en el ejemplo siguiente:

kubectl apply -f nginx-premium2.yaml

La salida del comando es similar al ejemplo siguiente:

pod/nginx-premium2 created

Ahora tiene un pod en ejecución con el disco de Azure montado en el directorio /mnt/azure. Esta configuración puede verse al examinar el pod mediante kubectl describe pod nginx-premium2, tal y como se muestra en el siguiente ejemplo reducido:

kubectl describe pod nginx-premium2

[...]
Volumes:
  volume:
    Type:       PersistentVolumeClaim (a reference to a PersistentVolumeClaim in the same namespace)
    ClaimName:  premium2-disk
    ReadOnly:   false
  kube-api-access-sh59b:
    Type:                    Projected (a volume that contains injected data from multiple sources)
    TokenExpirationSeconds:  3607
    ConfigMapName:           kube-root-ca.crt
    ConfigMapOptional:       <nil>
    DownwardAPI:             true
QoS Class:                   Burstable
Node-Selectors:              <none>
Tolerations:                 node.kubernetes.io/memory-pressure:NoSchedule op=Exists
                             node.kubernetes.io/not-ready:NoExecute op=Exists for 300s
                             node.kubernetes.io/unreachable:NoExecute op=Exists for 300s
Events:
  Type    Reason                  Age    From                     Message
  ----    ------                  ----   ----                     -------
  Normal  Scheduled               7m58s  default-scheduler        Successfully assigned default/nginx-premium2 to aks-agentpool-12254644-vmss000006
  Normal  SuccessfulAttachVolume  7m46s  attachdetach-controller  AttachVolume.Attach succeeded for volume "pvc-ff39fb64-1189-4c52-9a24-e065b855b886"
  Normal  Pulling                 7m39s  kubelet                  Pulling image "mcr.microsoft.com/oss/nginx/nginx:1.15.5-alpine"
  Normal  Pulled                  7m38s  kubelet                  Successfully pulled image "mcr.microsoft.com/oss/nginx/nginx:1.15.5-alpine" in 1.192915667s
  Normal  Created                 7m38s  kubelet                  Created container nginx-premium2
  Normal  Started                 7m38s  kubelet                  Started container nginx-premium2
[...]

Establecimiento de IOPS y límites de rendimiento

Las operaciones de entrada/salida por segundo (IOPS) y los límites de rendimiento del disco SSD prémium v2 de Azure no se admiten actualmente a través de AKS. Para ajustar el rendimiento, puede usar el comando de la CLI de Azure az disk update e incluir los parámetros --disk-iops-read-write y --disk-mbps-read-write.

En el ejemplo siguiente se actualiza el IOPS de disco de lectura y escritura a 5000 y Mbps a 200. Para --resource-group, el valor debe ser el segundo grupo de recursos creado automáticamente para almacenar los nodos de trabajo de AKS con la convención de nomenclatura MC_resourcegroupname_clustername_location. Para más información, consulte ¿Por qué se crean dos grupos de recursos con AKS?

El valor del parámetro --name es el nombre del volumen creado mediante StorageClass y comienza por pvc-. Para identificar el nombre del disco, puede ejecutar kubectl get pvc o navegar al grupo de recursos secundario en el portal para encontrarlo. Consulte Administración de recursos desde Azure Portal para obtener más información.

az disk update --subscription subscriptionName --resource-group myResourceGroup --name diskName --disk-iops-read-write=5000 --disk-mbps-read-write=200  

Pasos siguientes