Creación y uso de un volumen con Azure Disks en Azure Kubernetes Service (AKS)
Un volumen persistente representa un fragmento de almacenamiento aprovisionado para su uso con pods de Kubernetes. Puede usar un volumen persistente con uno o varios pods, y puede aprovisionarlo de forma dinámica o estática. En este artículo, se muestra cómo crear volúmenes persistentes de manera dinámica con discos de Azure en un clúster de Azure Kubernetes Service (AKS).
Nota
Un disco de Azure solo se puede montar con el tipo de Modo de acceso establecido en ReadWriteOnce, lo que hace que esté disponible para un nodo en AKS. Este modo de acceso todavía permite que varios pods accedan al volumen cuando los pods se ejecutan en el mismo nodo. Para más información, consulte Modos acceso PersistentVolume de Kubernetes.
En este artículo aprenderá a:
- Trabaje con un volumen persistente dinámico (PV) mediante la instalación del controlador de Container Storage Interface (CSI) y la creación dinámica de uno o más discos administrados de Azure para conectarlos a un pod.
- Trabaje con un PV estático mediante la creación de uno o más discos administrados de Azure, o bien use uno existente y adjúntelo a un pod.
Para más información sobre los volúmenes de Kubernetes, consulte Opciones de almacenamiento para aplicaciones en AKS.
Antes de empezar
Asegúrese de que tiene instalada y configurada la versión 2.0.59 de la CLI de Azure o una versión posterior. Ejecute
az --version
para encontrar la versión. Si necesita instalarla o actualizarla, vea Instalación de la CLI de Azure.El controlador CSI para disco de Azure 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. Ejecute el siguiente comando kubectl get para determinar el número de volúmenes que se pueden asignar por nodo:
kubectl get CSINode <nodename> -o yaml
Aprovisionar un volumen dinámicamente
En esta sección se proporcionan instrucciones para los administradores de clústeres que desean aprovisionar uno o varios volúmenes persistentes que incluyen detalles de Azure Disks Storage para que lo use una carga de trabajo. Una notificación de volumen persistente (PVC) usa el objeto de clase de almacenamiento para aprovisionar de forma dinámica un contenedor de Azure Disks Storage.
Parámetros de clase de almacenamiento para PersistentVolumes dinámicos
En la siguiente tabla se incluyen parámetros que puede usar para definir una clase de almacenamiento personalizada para PersistentVolumeClaim.
Nombre | Significado | Valor disponible | Mandatory | Valor predeterminado |
---|---|---|---|---|
skuName | Tipo de cuenta de almacenamiento del disco de Azure (alias: storageAccountType ) |
Standard_LRS , Premium_LRS , StandardSSD_LRS , PremiumV2_LRS , UltraSSD_LRS , Premium_ZRS , StandardSSD_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 la caché del host de disco de datos de Azure(PremiumV2_LRS y UltraSSD_LRS solo admiten el modo None 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 | Capacidad de IOPS de disco UltraSSD o SSD prémium v2 (mínimo: 2 IOPS/GiB) | 100~160000 | No | 500 |
DiskMBpsReadWrite | Capacidad de rendimiento de disco UltraSSD o SSD prémium v2 (mínimo: 0,032/GiB) | 1~2000 | No | 100 |
LogicalSectorSize | Tamaño del sector lógico en bytes para el disco Ultra. Los valores admitidos son 512 y 4096. El valor predeterminado es 4096. | 512 , 4096 |
No | 4096 |
etiquetas | Etiquetas del disco de Azure | Formato de etiqueta: key1=val1,key2=val2 |
No | "" |
diskEncryptionSetID | ResourceId 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 manera predeterminada), EncryptionAtRestWithPlatformAndCustomerKeys |
No | "" |
writeAcceleratorEnabled | Acelerador de escritura en discos de Azure | true , false |
No | "" |
networkAccessPolicy | Propiedad NetworkAccessPolicy para evitar la generación del identificador URI de SAS de un disco o una instantánea | AllowAll , DenyAll , AllowPrivate |
No | AllowAll |
diskAccessID | Id. de Azure Resource del recurso DiskAccess para usar puntos de conexión privados en discos | No | `` | |
enableBursting | Habilite la expansión a petición más allá del destino 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 | Agente de usuario generado con formato 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 . |
Clases de almacenamiento integradas
Las clases de almacenamiento se usan 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.
Cada clúster de AKS incluye cuatro clases de almacenamiento creadas previamente, dos de las cuales están configuradas para funcionar con discos de Azure:
- La clase de almacenamiento predeterminada aprovisiona un disco SSD estándar de Azure.
- SSD estándar respalda el almacenamiento estándar y ofrece un almacenamiento rentable, al tiempo que proporciona un rendimiento fiable.
- 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 que ejecutan cargas de trabajo de producción. Cuando se usa el controlador CSI para disco de Azure en AKS, también puede usar la clase de almacenamiento
managed-csi
, respaldada por el almacenamiento con redundancia local (LRS) de SSD estándar.
- Los discos de baja latencia, de alto rendimiento y basados en SSD respaldan los discos Premium. Son ideales para máquinas virtuales que ejecutan cargas de trabajo de producción. Cuando se usa el controlador CSI para disco de Azure en AKS, también puede usar la clase de almacenamiento
- A partir de la versión 1.29 de Kubernetes, al implementar clústeres de Azure Kubernetes Service (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 los discos administrados de Azure 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 el almacenamiento con redundancia de zona (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 usarla en la notificación de volumen persistente (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 usando el comando kubectl edit sc
o puede crear su propia clase de almacenamiento personalizada. Por ejemplo, si desea usar un disco de 4 TiB de tamaño, debe crear una clase de almacenamiento que defina cachingmode: None
, porque el almacenamiento en caché de discos no se admite en discos de 4 TiB y más grandes. Para más información sobre las clases de almacenamiento y la creación de la suya propia, consulte Opciones de almacenamiento de aplicaciones en AKS.
Puede ver las clases de almacenamiento creadas previamente con el comando kubectl get sc
. El ejemplo siguiente, muestra las clases de almacenamiento creadas previamente disponibles dentro de un clúster de AKS:
kubectl get sc
La salida del comando es similar al ejemplo siguiente:
NAME PROVISIONER AGE
default (default) disk.csi.azure.com 1h
managed-csi disk.csi.azure.com 1h
Nota
Las notificaciones de volumen persistente se especifican en GiB, pero los discos administrados de Azure se facturan por SKU para 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. Para obtener más información, consulte Precios de Managed Disks.
Creación de una notificación de volumen persistente
Una notificación de volumen persistente (PVC) aprovisiona automáticamente el almacenamiento en función de una clase de almacenamiento. En ese caso, una PVC puede usar una de las clases de almacenamiento creadas previamente para crear un disco administrado de Azure estándar o premium.
Cree un archivo denominado
azure-pvc.yaml
y cópielo en el siguiente código manifiesto. La notificación solicita un disco llamadoazure-managed-disk
que tiene un tamaño de 5 GB con acceso ReadWriteOnce. La clase de almacenamiento managed-csise 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.
Cree la notificación del volumen persistente mediante el comando
kubectl apply
y especifique su archivo azure-pvc.yaml.kubectl apply -f azure-pvc.yaml
La salida del comando es similar al ejemplo siguiente:
persistentvolumeclaim/azure-managed-disk created
Uso del volumen persistente
Después de crear la notificación de volumen persistente, deberá comprobar que tenga un estado de Pending
. El estado Pending
indica que está listo para ser utilizado por un pod.
Compruebe el estado de la PVC con el comando
kubectl describe pvc
.kubectl describe pvc azure-managed-disk
La salida del comando es similar al ejemplo comprimido siguiente:
Name: azure-managed-disk Namespace: default StorageClass: managed-csi Status: Pending [...]
Cree un archivo denominado
azure-pvc-disk.yaml
y cópielo en el siguiente código 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 elemento mountPath con 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
Cree el pod mediante el comando
kubectl apply
.kubectl apply -f azure-pvc-disk.yaml
La salida del comando es similar al ejemplo siguiente:
pod/mypod created
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 comandokubectl describe
.kubectl describe pod mypod
La salida del comando es similar al 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" [...]
Uso de discos Ultra de Azure
Para utilizar el almacenamiento en discos Ultra de Azure, consulte Uso de discos Ultra en Azure Kubernetes Service (AKS).
Uso de etiquetas de Azure
Para obtener más información sobre el uso de etiquetas de Azure, consulte Uso de etiquetas de Azure en Azure Kubernetes Service (AKS).
Aprovisionar un volumen estáticamente
En esta sección se proporcionan instrucciones para los administradores de clústeres que desean crear uno o varios volúmenes persistentes que incluyen detalles de Azure Disks para que lo use una carga de trabajo.
Parámetros de aprovisionamiento estáticos para un volumen persistente
En la tabla siguiente se incluyen parámetros que puede usar para definir un volumen persistente.
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} |
Sí | 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.
Identifique el nombre del grupo de recursos con el comando
az aks show
y agregue el parámetro de consulta--query nodeResourceGroup
.az aks show --resource-group myResourceGroup --name myAKSCluster --query nodeResourceGroup -o tsv
La salida del comando es similar al ejemplo siguiente:
MC_myResourceGroup_myAKSCluster_eastus
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 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
Azure Disks se factura 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. Use el identificador de disco 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
Cree un archivo pv-azuredisk.yaml con un elemento PersistentVolume. 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
Cree un archivo pvc-azuredisk.yaml con un elemento PersistentVolumeClaim que utilice el elemento PersistentVolume.
apiVersion: v1 kind: PersistentVolumeClaim metadata: name: pvc-azuredisk spec: accessModes: - ReadWriteOnce resources: requests: storage: 20Gi volumeName: pv-azuredisk storageClassName: managed-csi
Cree PersistentVolume y PersistentVolumeClaim con el comando
kubectl apply
y haga referencia a los dos archivos YAML que creó.kubectl apply -f pv-azuredisk.yaml kubectl apply -f pvc-azuredisk.yaml
Compruebe que PersistentVolumeClaim se creó y enlazó a PersistentVolume con el comando
kubectl get pvc
.kubectl get pvc pvc-azuredisk
La salida del comando es similar al ejemplo siguiente:
NAME STATUS VOLUME CAPACITY ACCESS MODES STORAGECLASS AGE pvc-azuredisk Bound pv-azuredisk 20Gi RWO 5s
Cree un archivo azure-disk-pod.yaml para hacer referencia al elemento PersistentVolumeClaim. Para los contenedores de Windows Server, especifique un elemento mountPath con 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
Aplique la configuración y monte el volumen mediante el comando
kubectl apply
.kubectl apply -f azure-disk-pod.yaml
Limpieza de recursos
Cuando haya terminado con los recursos creados en este artículo, puede quitarlos mediante el comando kubectl delete
.
# Remove the pod
kubectl delete -f azure-pvc-disk.yaml
# Remove the persistent volume claim
kubectl delete -f azure-pvc.yaml
Pasos siguientes
- Para obtener información sobre cómo usar el controlador CSI para Azure Disks Storage, consulte Uso de Azure Disks Storage con el controlador CSI.
- Para consultar los procedimientos recomendados asociados, consulte Procedimientos recomendados para el almacenamiento y las copias de seguridad en Azure Kubernetes Service (AKS).
Azure Kubernetes Service