Nota:
El acceso a esta página requiere autorización. Puede intentar iniciar sesión o cambiar directorios.
El acceso a esta página requiere autorización. Puede intentar cambiar los directorios.
En este artículo se muestra cómo crear volúmenes persistentes (PVs) de forma dinámica y estática con Discos de Azure para usarlos mediante un único pod en un clúster de Azure Kubernetes Service (AKS).
Prerrequisitos
La CLI de Azure, versión 2.0.59 o posterior, instalada y configurada. Busque la versión con el comando
az --version. Para la instalación o la actualización, consulte Instalación de la CLI de Azure.El controlador CSI de Azure Disks habilitado en el clúster de AKS.
El controlador CSI de Azure Disks 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. Puede determinar el número de volúmenes que se pueden asignar por nodo mediante el
kubectl getcomando . Por ejemplo:kubectl get CSINode <node-name> -o yamlSi el límite de volúmenes por nodo es un problema para la carga de trabajo, considere la posibilidad de usar el Almacenamiento de contenedores de Azure para los volúmenes persistentes, en lugar de controladores CSI.
Clases de almacenamiento integradas para PVs dinámicos con Azure Disks
Las clases de almacenamiento se usan para definir cómo se crea dinámicamente una unidad de almacenamiento con un volumen persistente.
Cada clúster de AKS incluye cuatro clases de almacenamiento integradas, con dos de ellas configuradas para trabajar con Azure Disks:
- La clase de almacenamiento predeterminada aprovisiona un disco de Azure SSD estándar.
- Los SSD estándar respaldan el almacenamiento estándar y proporcionan almacenamiento rentable, a la vez que ofrecen un rendimiento confiable.
- 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 (VM) que ejecutan cargas de trabajo de producción. Cuando usa el controlador CSI para disco de Azure en AKS, también puede usar la clase de almacenamiento
managed-csi, respaldada por el almacenamiento en disco SSD estándar con redundancia local (LRS).
- Los discos de baja latencia, de alto rendimiento y basados en SSD respaldan los discos Premium. Son ideales para máquinas virtuales (VM) que ejecutan cargas de trabajo de producción. Cuando usa el controlador CSI para disco de Azure en AKS, también puede usar la clase de almacenamiento
- Efectivo a partir de la versión 1.29 de Kubernetes: al implementar clústeres de 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 Azure Managed Disks 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 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 usarlo en la PVC.
- ZRS garantiza la replicación sincrónica de Azure Managed Disks 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.
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 mediante el kubectl edit sc comando o puede crear su propia clase de almacenamiento personalizada.
Nota:
Las solicitudes de volúmenes persistentes se especifican en GiB, pero los Azure Managed Disks se facturan según el SKU por un tamaño específico. Estas SKU van de 32 GiB para discos S4 o P4 a 32 TiB para discos S80 o P80 (en versión preliminar). El rendimiento e IOPS de un SSD Premium depende de la SKU y del tamaño de instancia de los nodos del clúster de AKS. Para obtener más información, consulte Precios de Managed Disks.
Vea las clases de almacenamiento precreadas mediante el kubectl get sc comando . El ejemplo siguiente, muestra las clases de almacenamiento creadas previamente disponibles dentro de un clúster de AKS:
kubectl get sc
La salida debe ser similar a la siguiente salida de ejemplo, que incluye las default clases de almacenamiento y managed-csi que se crean previamente para Azure Disks:
NAME PROVISIONER AGE
default (default) disk.csi.azure.com 1h
managed-csi disk.csi.azure.com 1h
Creación de clases de almacenamiento personalizadas para volúmenes persistentes dinámicos con Azure Disks
Las clases de almacenamiento predeterminadas son adecuadas para la mayoría de los escenarios. En algunos casos, es posible que quiera tener su propia clase de almacenamiento personalizada con sus propios parámetros. Por ejemplo, es posible que quiera cambiar la volumeBindingMode clase .
Puede usar una volumeBindingMode: Immediate clase que garantice que ocurre inmediatamente una vez creado el PVC. En los casos en los que los grupos de nodos tienen restricciones de topología (por ejemplo, cuando se usan zonas de disponibilidad), los PV se enlazarían o aprovisionarían sin conocimiento de los requisitos de programación del pod.
Para resolver este escenario, puede usar volumeBindingMode: WaitForFirstConsumer, que retrasa el enlace y el aprovisionamiento de un PV hasta que se crea un pod que usa la PVC. De esta manera, el PV se ajusta y se aprovisiona en la zona de disponibilidad (u otra topología) especificada mediante las restricciones de programación del pod. Las clases de almacenamiento predeterminadas usan volumeBindingMode: WaitForFirstConsumer la clase .
Cree un archivo denominado
sc-azuredisk-csi-waitforfirstconsumer.yamly pegue el siguiente manifiesto YAML. La clase de almacenamiento es la misma que lamanaged-csiclase de almacenamiento, pero con una clase diferentevolumeBindingMode.kind: StorageClass apiVersion: storage.k8s.io/v1 metadata: name: azuredisk-csi-waitforfirstconsumer provisioner: disk.csi.azure.com parameters: skuname: StandardSSD_LRS allowVolumeExpansion: true reclaimPolicy: Delete volumeBindingMode: WaitForFirstConsumerCree la clase de almacenamiento mediante el comando
kubectl applyy especifique su archivosc-azuredisk-csi-waitforfirstconsumer.yaml.kubectl apply -f sc-azuredisk-csi-waitforfirstconsumer.yamlLa salida debería ser similar a la salida de ejemplo siguiente:
storageclass.storage.k8s.io/azuredisk-csi-waitforfirstconsumer created
Parámetros de clase de almacenamiento para PVs dinámicos con Azure Disks
En la tabla siguiente se incluyen parámetros que puede usar para definir una clase de almacenamiento personalizada para las solicitudes de volúmenes persistentes dinámicos (PVC) con Azure Disks.
| Nombre | Meaning | Valores disponibles | Obligatorio | Valor predeterminado |
|---|---|---|---|---|
skuName |
Tipo de cuenta de almacenamiento de Azure Disks (alias: storageAccountType).
PremiumV2_LRS y UltraSSD_LRS admiten el acceso instantáneo para las restauraciones incrementales de instantáneas. |
Standard_LRS, Premium_LRS, StandardSSD_LRS, PremiumV2_LRS, UltraSSD_LRS, , Premium_ZRSStandardSSD_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 caché del host de disco de datos de Azure (PremiumV2_LRS y UltraSSD_LRS solo admiten None el modo 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 |
Funcionalidad de IOPS de Disco Ultra o SSD Premium v2 (mínimo: 2 IOPS/GiB) | 100~160000 | No | 500 |
DiskMBpsReadWrite |
Capacidad de rendimiento de Disco Ultra o SSD Prémium v2 (mínimo: 0,032/GiB) | 1~2000 | No | 100 |
LogicalSectorSize |
Tamaño de sector lógico en bytes para Disco Ultra. |
512, 4096 |
No | 4096 |
tags |
Etiquetas del disco de Azure | Formato de etiqueta: key1=val1,key2=val2 |
No | "" |
diskEncryptionSetID |
Identificador de recurso 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 forma predeterminada), EncryptionAtRestWithPlatformAndCustomerKeys |
No | "" |
writeAcceleratorEnabled |
Acelerador de escritura en Azure Disks |
true, false |
No | "" |
networkAccessPolicy |
NetworkAccessPolicy propiedad para evitar que se genere el URI de SAS para un disco o una instantánea. |
AllowAll, , DenyAll, AllowPrivate |
No | AllowAll |
diskAccessID |
Id. de recurso de Azure del recurso DiskAccess para usar puntos de conexión privados en discos | No | `` | |
enableBursting |
Habilite la ráfaga a demanda más allá del objetivo 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 | Formato del agente de usuario generado: 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. |
Creación de una PVC con Azure Disks
Una PVC aprovisiona automáticamente el almacenamiento en función de una clase de almacenamiento. En este caso, una PVC puede usar una de las clases de almacenamiento precreadas para crear un disco administrado de Azure Estándar o Premium.
Cree un archivo denominado
Azure-pvc.yamly pegue el siguiente manifiesto. La notificación solicita un disco llamadoAzure-managed-diskque tiene un tamaño de 5 GB con acceso ReadWriteOnce. La clase de almacenamiento managed-csi se especifica como la clase de almacenamiento.apiVersion: v1 kind: PersistentVolumeClaim metadata: name: azure-managed-disk spec: accessModes: - ReadWriteOnce storageClassName: managed-csi resources: requests: storage: 5GiSugerencia
Para crear un disco que usa almacenamiento prémium, use
storageClassName: managed-csi-premiumen lugar de managed-csi.Cree el PVC usando el comando
kubectl applyy especifique su archivo Azure-pvc.yaml :kubectl apply -f azure-pvc.yamlLa salida debería ser similar a la salida de ejemplo siguiente:
persistentvolumeclaim/azure-managed-disk createdVerifique que el PV esté listo para que lo utilice un pod mediante el comando
kubectl describe pvc.kubectl describe pvc azure-managed-diskLa salida debe ser similar a la siguiente salida de ejemplo, que muestra que el PV está en estado Pendiente :
Name: azure-managed-disk Namespace: default StorageClass: managed-csi Status: Pending [...]
Crea un pod que use un PVC con Azure Disks
Cree un archivo denominado
Azure-pvc-disk.yamly pegue el siguiente 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 unmountPathmediante 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-diskCree el pod mediante el comando
kubectl apply.kubectl apply -f azure-pvc-disk.yamlLa salida debería ser similar a la salida de ejemplo siguiente:
pod/mypod createdAhora 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 mypodLa salida debe ser similar al siguiente ejemplo, que muestra que el volumen llamado volumen está utilizando el PVC denominado Azure-managed-disk:
[...] 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-12345678-9 Normal SuccessfulMountVolume 2m kubelet, aks-nodepool1-12345678-9 MountVolume.SetUp succeeded for volume "default-token-smm2n" Normal SuccessfulMountVolume 1m kubelet, aks-nodepool1-12345678-9 MountVolume.SetUp succeeded for volume "pvc-abc0d123-4e5f-67g8-901h-ijk23l45m678" [...]
Parámetros de clase de instantánea de volumen para Azure Disks
El controlador CSI de Azure Disks admite la creación de instantáneas de volúmenes persistentes. Como parte de esta funcionalidad, el controlador puede realizar instantáneas completas o incrementales en función del valor establecido en el incremental parámetro .
En la tabla siguiente se proporcionan detalles sobre los parámetros que puede usar para definir una clase de instantánea de volumen personalizada para sus instantáneas de volumen con discos de Azure.
| Nombre | Meaning | Valores disponibles | Obligatorio | Valor predeterminado |
|---|---|---|---|---|
resourceGroup |
Grupo de recursos para almacenar capturas de instantánea | GRUPO DE RECURSOS EXISTENTE | No | Si no se especifica, la instantánea se almacenará en el mismo grupo de recursos que los discos de Azure de origen. |
incremental |
Tomar instantánea completa o incremental |
true, false |
No | true |
tags |
Etiquetas de Azure Disks | Formato de etiqueta: 'key1=val1,key2=val2' | No | "" |
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 |
Especificación del identificador de suscripción de Azure en el que se creará Azure Disks | Identificador de suscripción de Azure | No | Si no está vacío, resourceGroup debe proporcionarse, incremental debe establecerse como false |
Creación de una instantánea de volumen a partir de una PVC con Azure Disks
Nota:
Antes de continuar, asegúrese de que la aplicación no está escribiendo datos en el disco de origen.
Cree una clase de instantánea de volumen con el comando
kubectl apply:kubectl apply -f https://raw.githubusercontent.com/kubernetes-sigs/azuredisk-csi-driver/master/deploy/example/snapshot/storageclass-azuredisk-snapshot.yamlLa salida debería ser similar a la salida de ejemplo siguiente:
volumesnapshotclass.snapshot.storage.k8s.io/csi-azuredisk-vsc createdCree una instantánea de volumen a partir de la PVC dinámica que creó anteriormente en este tutorial mediante el comando
kubectl apply:kubectl apply -f https://raw.githubusercontent.com/kubernetes-sigs/azuredisk-csi-driver/master/deploy/example/snapshot/azuredisk-volume-snapshot.yamlLa salida debería ser similar a la salida de ejemplo siguiente:
volumesnapshot.snapshot.storage.k8s.io/azuredisk-volume-snapshot createdCompruebe que la instantánea de volumen se creó correctamente mediante el
kubectl describecomando :kubectl describe volumesnapshot azuredisk-volume-snapshotLa salida debe ser similar a la siguiente salida de ejemplo, que muestra que la instantánea de volumen está lista para usarse:
Name: azuredisk-volume-snapshot Namespace: default Labels: <none> Annotations: API Version: snapshot.storage.k8s.io/v1 Kind: VolumeSnapshot Metadata: Creation Timestamp: 2020-08-27T05:27:58Z Finalizers: snapshot.storage.kubernetes.io/volumesnapshot-as-source-protection snapshot.storage.kubernetes.io/volumesnapshot-bound-protection Generation: 1 Resource Version: 714582 Self Link: /apis/snapshot.storage.k8s.io/v1/namespaces/default/volumesnapshots/azuredisk-volume-snapshot UID: 00aa00aa-bb11-cc22-dd33-44ee44ee44ee Spec: Source: Persistent Volume Claim Name: pvc-azuredisk Volume Snapshot Class Name: csi-azuredisk-vsc Status: Bound Volume Snapshot Content Name: snapcontent-00aa00aa-bb11-cc22-dd33-44ee44ee44ee Creation Time: 2020-08-31T05:27:59Z Ready To Use: true Restore Size: 10Gi Events: <none>
Creación de una nueva PVC basada en una instantánea de volumen con Azure Disks
Puede crear una nueva PVC basada en una instantánea de volumen. En esta sección, utilizaremos la instantánea de la sección Creación de una instantánea de volumen a partir de una PVC con Azure Disks y crearemos una nueva PVC y un nuevo pod para consumirla.
Cree la PVC y el pod mediante los siguientes comandos
kubectl apply:kubectl apply -f https://raw.githubusercontent.com/kubernetes-sigs/azuredisk-csi-driver/master/deploy/example/snapshot/pvc-azuredisk-snapshot-restored.yaml kubectl apply -f https://raw.githubusercontent.com/kubernetes-sigs/azuredisk-csi-driver/master/deploy/example/snapshot/nginx-pod-restored-snapshot.yamlLa salida debería ser similar a la salida de ejemplo siguiente:
persistentvolumeclaim/pvc-azuredisk-snapshot-restored created pod/nginx-restored createdAsegúrese de que es la misma PVC creada antes; para ello, compruebe el volumen mediante el comando
kubectl execpara ejecutar el comandolsdentro del pod.kubectl exec nginx-restored -- ls /mnt/azurediskLa salida debe ser similar a la siguiente salida de ejemplo, que muestra el mismo contenido que el PVC original, incluido el
test.txtarchivo que se creó en el PVC original:lost+found outfile test.txt
Clonación de volúmenes con Azure Disks
Un volumen clonado se define como un duplicado de un volumen de Kubernetes existente. Para más información sobre la clonación de volúmenes en Kubernetes, consulte la documentación conceptual para la clonación de volúmenes.
El controlador CSI para Azure Disks admite la clonación de volúmenes. Para demostrarlo, cree un volumen clonado de la PVC dinámica que creó anteriormente en este tutorial y un nuevo pod para consumirla.
Cree la PVC clonada y el pod mediante los siguientes comandos
kubectl apply:kubectl apply -f https://raw.githubusercontent.com/kubernetes-sigs/azuredisk-csi-driver/master/deploy/example/cloning/pvc-azuredisk-cloning.yaml kubectl apply -f https://raw.githubusercontent.com/kubernetes-sigs/azuredisk-csi-driver/master/deploy/example/cloning/nginx-pod-restored-cloning.yamlLa salida debería ser similar a la salida de ejemplo siguiente:
persistentvolumeclaim/pvc-azuredisk-cloning created pod/nginx-restored-cloning createdCompruebe que el volumen clonado tiene el mismo contenido que el volumen original comprobando el contenido del volumen mediante el
kubectl execcomando para ejecutar ellscomando en el pod:kubectl exec nginx-restored-cloning -- ls /mnt/azurediskLa salida debe ser similar a la siguiente salida de ejemplo, que muestra el mismo contenido que el PVC original, incluido el
test.txtarchivo que se creó en el PVC original:lost+found outfile test.txt
Cambio del tamaño de un volumen persistente sin tiempo de inactividad con Azure Disks
Nota:
Actualmente no se admite la reducción de volúmenes persistentes. Al intentar aplicar revisiones a un PVC existente con un tamaño menor que el actual, se producirá el siguiente mensaje de error:
The persistentVolumeClaim "pvc-azuredisk" is invalid: spec.resources.requests.storage: Forbidden: field can not be less than previous value.
Puede solicitar un volumen mayor para una PVC editando el objeto de la PVC para especificar un tamaño mayor. Este cambio desencadena la expansión del volumen subyacente que respalda el PV. Nunca se crea un PV para satisfacer la notificación, sino que se cambia el tamaño de un volumen existente.
En AKS, la clase de almacenamiento integrada managed-csi ya admite la expansión, por lo que puede usar el PVC dinámico que creó anteriormente en este tutorial. La PVC ha solicitado un volumen persistente de 10 GB.
Compruebe el tamaño actual del volumen utilizando el comando
kubectl execpara ejecutar el comandodf -hdentro del pod.kubectl exec -it nginx-azuredisk -- df -h /mnt/azurediskLa salida debe ser similar a la siguiente salida de ejemplo, que muestra que el tamaño actual del volumen es de 10 Gi:
Filesystem Size Used Avail Use% Mounted on /dev/sdc 9.8G 42M 9.8G 1% /mnt/azurediskExpanda la PVC aumentando el campo
spec.resources.requests.storagemediante el comandokubectl patch. En este ejemplo, aumentamos el tamaño del PVC a 15 Gi:kubectl patch pvc pvc-azuredisk --type merge --patch '{"spec": {"resources": {"requests": {"storage": "15Gi"}}}}'La salida debería ser similar a la salida de ejemplo siguiente:
persistentvolumeclaim/pvc-azuredisk patchedCompruebe el PV para confirmar que el nuevo tamaño se refleja en el PV mediante el
kubectl get pvcomando :kubectl get pvLa salida debe ser similar a la siguiente salida de ejemplo, que muestra que el PV se ha redimensionado a 15 Gi.
NAME CAPACITY ACCESS MODES RECLAIM POLICY STATUS CLAIM STORAGECLASS REASON AGE pvc-a0a0a0a0-bbbb-cccc-dddd-e1e1e1e1e1e1 15Gi RWO Delete Bound default/pvc-azuredisk managed-csi 2d2h (...)Después de unos minutos, compruebe el PVC para confirmar que el nuevo tamaño se refleja en el PVC mediante el
kubectl get pvccomando :kubectl get pvc pvc-azurediskLa salida debe ser similar a la siguiente salida de ejemplo, que muestra que el PVC se ha redimensionado a 15 Gi:
NAME STATUS VOLUME CAPACITY ACCESS MODES STORAGECLASS AGE pvc-azuredisk Bound pvc-a0a0a0a0-bbbb-cccc-dddd-e1e1e1e1e1e1 15Gi RWO managed-csi 2d2hConfirme que el tamaño del disco del pod se ha actualizado al nuevo tamaño mediante el
kubectl execcomando para ejecutar eldf -hcomando dentro del pod:kubectl exec -it nginx-azuredisk -- df -h /mnt/azurediskLa salida debe ser similar al siguiente ejemplo, que muestra que el tamaño del volumen se ha actualizado a 15 Gi.
Filesystem Size Used Avail Use% Mounted on /dev/sdc 15G 46M 15G 1% /mnt/azuredisk
Expansión a petición para SSD Premium con Azure Disks
El modelo de expansión de disco a petición permite ráfagas de disco siempre que sus necesidades superen su capacidad actual. Este modelo genera cargos adicionales cada vez que el disco se expande. La expansión bajo demanda solo está disponible para los SSD prémium de más de 512 GiB. Para obtener más información sobre las IOPS y el rendimiento aprovisionados de SSD Premium por disco, consulte Tamaño de SSD Premium. Como alternativa, está la expansión basada en crédito, en la que el disco solo se expandirá si tiene créditos de expansión acumulados en su cubo de crédito. La expansión basada en crédito no genera cargos adicionales cuando el disco se expande. La funcionalidad de bursteo basada en crédito solo está disponible para SSD Premium de 512 GiB y tamaños menores, y SSD estándar de 1024 GiB y menores. Para más información sobre la expansión a petición, consulte Expansión a petición.
Importante
La clase de almacenamiento predeterminada managed-csi-premium tiene deshabilitado la expansión a petición y usa la expansión basada en crédito. Cualquier SSD Premium creado dinámicamente por una notificación de volumen persistente basada en la clase de almacenamiento predeterminada managed-csi-premium también tiene deshabilitada la expansión a petición.
Para crear un volumen persistente SSD Premium con la expansión a petición habilitada, puede crear una nueva clase de almacenamiento con el parámetro enableBursting establecido en true, tal como se muestra en la siguiente plantilla de YAML. Para obtener más información sobre cómo habilitar la expansión a petición, consulte Expansión a petición. Para más información sobre cómo crear su propia clase de almacenamiento con la expansión a petición habilitada, consulte Creación de una clase de almacenamiento Premium CSI administrada ampliable.
apiVersion: storage.k8s.io/v1
kind: StorageClass
metadata:
name: burstable-managed-csi-premium
provisioner: disk.csi.azure.com
parameters:
skuname: Premium_LRS
enableBursting: "true"
reclaimPolicy: Delete
volumeBindingMode: WaitForFirstConsumer
allowVolumeExpansion: true
Uso de Azure Disks con contenedores de Windows
El controlador CSI de disco de Azure admite nodos y contenedores de Windows. Si quiere usar contenedores de Windows, siga el inicio rápido de contenedores de Windows para agregar un grupo de nodos de Windows. Después de tener un grupo de nodos de Windows, puede usar las clases de almacenamiento integradas, como managed-csi.
Implemente un conjunto con estado basado en Windows de ejemplo que guarde las marcas de tiempo en el archivo
data.txtmediante el siguientekubectl applycomando:kubectl apply -f https://raw.githubusercontent.com/kubernetes-sigs/azuredisk-csi-driver/master/deploy/example/windows/statefulset.yamlLa salida debería ser similar a la salida de ejemplo siguiente:
statefulset.apps/busybox-azuredisk createdValide el contenido del archivo
data.txten el pod utilizando el comandokubectl execy ejecutar el comandotypedentro del pod:kubectl exec -it statefulset-azuredisk-win-0 -- powershell -c "type c:/mnt/azuredisk/data.txt"La salida debe ser similar a la salida de ejemplo siguiente, que muestra las marcas de tiempo que se guardan en el archivo
data.txt:2020-08-27 08:13:41Z 2020-08-27 08:13:42Z 2020-08-27 08:13:44Z (...)
Creación de un PV estático con Azure Disks
En las secciones siguientes se proporcionan instrucciones para crear un PV estático con Azure Disks. Un PV estático es un volumen persistente que un administrador crea manualmente. Este PV está disponible para su uso por parte de los pods del clúster. Para usar un PV estático, cree un PVC que haga referencia al PV y, a continuación, cree un pod que haga referencia al PVC.
Parámetros de clase de almacenamiento para PVs estáticos con Azure Disks
En la tabla siguiente se incluyen parámetros que puede usar para definir una clase de almacenamiento personalizada para los PVC estáticos con Azure Disks:
| Nombre | Meaning | Valores disponibles | Obligatorio | Valor predeterminado |
|---|---|---|---|---|
volumeHandle |
URI de disco de Azure | /subscriptions/{sub-id}/resourcegroups/{group-name}/providers/microsoft.compute/disks/{disk-id} |
Sí | N/A |
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: -part1 |
volumeAttributes.cachingMode |
Configuración de caché del host de disco |
None, , ReadOnly, ReadWrite |
No | ReadOnly |
Creación de un disco de Azure
Al crear 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 AKS del clúster el rol de Contributor en el grupo de recursos del disco.
Identifique el nombre del grupo de recursos del nodo mediante el
az aks showcomando con el--query nodeResourceGroupparámetro .az aks show --resource-group myResourceGroup --name myAKSCluster --query nodeResourceGroup -o tsvLa salida debe ser similar a la siguiente salida de ejemplo, que muestra el nombre del grupo de recursos de nodo para el clúster de AKS:
MC_myResourceGroup_myAKSCluster_eastusCree 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 genera el identificador del disco después de crearlo. Si tiene que crear un disco para su uso con contenedores de Windows Server, agregue el parámetro--os-type windowspara formatear correctamente el disco.az disk create \ --resource-group MC_myResourceGroup_myAKSCluster_eastus \ --name myAKSDisk \ --size-gb 20 \ --query id --output tsvNota:
La facturación de los discos de Azure se realiza por SKU y según un tamaño específico. Estas SKU van 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.
La salida debe ser similar a la siguiente salida de ejemplo, que muestra el identificador de recurso del disco que se creó:
/subscriptions/<subscriptionID>/resourceGroups/MC_myAKSCluster_myAKSCluster_eastus/providers/Microsoft.Compute/disks/myAKSDisk
Cree un PV y un PVC que hagan referencia al disco de Azure
Cree un archivo pv-azuredisk.yaml con un PV mediante el siguiente manifiesto de ejemplo. Actualice
volumeHandlecon el identificador de recurso de disco del paso anterior. Para los contenedores de Windows Server, especifique ntfs para el parámetrofsType.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: ext4Como se indicó en Crear un disco de Azure, si el disco para el
volumeHandlese creó en un grupo de recursos distinto, debe conceder a la identidad administrada del clúster de AKS el rolContributoral grupo de recursos del disco.Cree un archivo pvc-azuredisk.yaml con una PVC que utilice el PV mediante el siguiente manifiesto de ejemplo:
apiVersion: v1 kind: PersistentVolumeClaim metadata: name: pvc-azuredisk spec: accessModes: - ReadWriteOnce resources: requests: storage: 20Gi volumeName: pv-azuredisk storageClassName: managed-csiCree el PV y PVC mediante los siguientes
kubectl applycomandos:kubectl apply -f pv-azuredisk.yaml kubectl apply -f pvc-azuredisk.yamlCompruebe que la PVC se ha creado correctamente y vinculado al PV mediante el comando
kubectl get pvc:kubectl get pvc pvc-azurediskLa salida debe ser similar al siguiente ejemplo, que muestra que la PVC está en estado Vinculado:
NAME STATUS VOLUME CAPACITY ACCESS MODES STORAGECLASS AGE pvc-azuredisk Bound pv-azuredisk 20Gi RWO 5s
Crear un pod que utilice el PVC con Azure Disks
Cree un archivo Azure-disk-pod.yaml para hacer referencia a su PVC usando el siguiente manifiesto de ejemplo. (Para los contenedores de Windows Server, especifique un
mountPathmediante 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-azurediskAplique la configuración y monte el volumen mediante el comando
kubectl apply.kubectl apply -f azure-disk-pod.yaml
Limpieza de recursos
Quite los recursos que creó en este tutorial mediante los siguientes comandos [
kubectl delete][kubectl-delete]:# Remove the pod kubectl delete -f azure-pvc-disk.yaml # Remove the persistent volume claim kubectl delete -f azure-pvc.yaml