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
- Para obtener más información sobre los discos SSD prémium v2, consulte Uso de discos SSD prémium v2 de Azure.
- Para obtener más información sobre los procedimientos recomendados de almacenamiento, consulte Procedimientos recomendados para el almacenamiento y las copias de seguridad en Azure Kubernetes Service (AKS).
Azure Kubernetes Service