Compartir a través de


Uso de Azure Container Storage con discos administrados de Azure

Azure Container Storage es un servicio de administración, implementación y orquestación de volúmenes basado en la nube y creado de forma nativa para contenedores. En este artículo se muestra cómo configurar Azure Container Storage para usar los discos administrados de Azure como almacenamiento back-end para las cargas de trabajo de Kubernetes. Al final, tendrá un pod que utiliza discos administrados de Azure como almacenamiento.

Requisitos previos

  • Si no tiene una suscripción a Azure, cree una cuenta gratuita antes de empezar.

  • En este artículo se necesita la versión más reciente de la CLI de Azure (2.35.0 o posteriores). Consulte Cómo instalar la CLI de Azure. Si usa el entorno de Bash en Azure Cloud Shell, ya está instalada la versión más reciente. Si tiene previsto ejecutar los comandos localmente en lugar de en Azure Cloud Shell, asegúrese de ejecutarlos con privilegios administrativos. Para más información, consulte Introducción a Azure Cloud Shell.

  • Necesitará el cliente de línea de comandos de Kubernetes, kubectl. Ya está instalado si usa Azure Cloud Shell o puede instalarlo de manera local ejecutando el comando az aks install-cli.

  • Si aún no ha instalado Azure Container Storage, siga las instrucciones de Uso de Azure Container Storage con Azure Kubernetes Service.

  • Compruebe si la región de destino se admite en regiones de Azure Container Storage.

  • Para usar Azure Container Storage con discos administrados de Azure, el clúster de AKS debe tener un grupo de nodos de al menos tres máquinas virtuales de uso general, como standard_d4s_v5, para los nodos de clúster, cada una con un mínimo de cuatro CPU virtuales (vCPU).

Creación y asociación de volúmenes persistentes

Siga estos pasos para crear y adjuntar un volumen persistente.

1. Crear un grupo de almacenamiento

En primer lugar, cree un bloque de almacenamiento, que es una agrupación lógica de almacenamiento para el clúster de Kubernetes, definiéndolo en un archivo de manifiesto YAML.

Tiene las siguientes opciones para crear un grupo de almacenamiento:

Si ha habilitado Azure Container Storage mediante los comandos az aks create o az aks update, es posible que ya tenga un bloque de almacenamiento. Use kubectl get sp -n acstor para obtener la lista de bloques de almacenamiento. Si ya tiene un bloque de almacenamiento disponible que quiera usar, puede omitir este paso y continuar con Mostrar las clases de almacenamiento disponibles.

Creación de un grupo de almacenamiento dinámico

Siga estos pasos para crear un grupo de almacenamiento dinámico para Azure Disks.

  1. Use su editor de texto favorito para crear un archivo de manifiesto YAML, como code acstor-storagepool.yaml.

  2. Pegue el código siguiente. El valor de nombre del bloque de almacenamiento puede ser el que quiera. En skuName, especifique el nivel de rendimiento y redundancia. Los valores aceptables son Premium_LRS, Standard_LRS, StandardSSD_LRS, UltraSSD_LRS, Premium_ZRS, PremiumV2_LRS y StandardSSD_ZRS. Para el almacenamiento, especifique la cantidad de capacidad de almacenamiento para el grupo de Gi o Ti.

    apiVersion: containerstorage.azure.com/v1
    kind: StoragePool
    metadata:
      name: azuredisk
      namespace: acstor
    spec:
      poolType:
        azureDisk:
          skuName: Premium_LRS
      resources:
        requests:
          storage: 1Ti
    

    Si usa discos UltraSSD_LRS o PremiumV2_LRS, puede establecer IOPS y rendimiento mediante los parámetros IOPSReadWrite y MBpsReadWrite en la definición del grupo de almacenamiento.

    IOPSReadWrite hace referencia al número de IOPS permitidos para discos SSD Ultra y Premium v2 LRS. Para obtener más información, vea IOPS de disco Ultra y IOPS SSD Prémium v2.

    MBpsReadWrite hace referencia al ancho de banda permitido para discos SSD Ultra y Premium v2 LRS. MBps hace referencia a millones de bytes por segundo (MB/s = 10^6 Bytes por segundo). Para obtener más información, vea Rendimiento de disco Ultra y Rendimiento de SSD Prémium v2.

    apiVersion: containerstorage.azure.com/v1
    kind: StoragePool
    metadata:
      name: azuredisk
      namespace: acstor
    spec:
      poolType:
        azureDisk:
          skuName: PremiumV2_LRS
          iopsReadWrite: 5000
          MbpsReadWrite: 200
      resources:
        requests:
          storage: 1Ti
    
  3. Guarde el archivo de manifiesto de YAML y, a continuación, aplíquelo para crear el grupo de almacenamiento.

    kubectl apply -f acstor-storagepool.yaml 
    

    Una vez completada la creación del bloque de almacenamiento, verá un mensaje como el siguiente:

    storagepool.containerstorage.azure.com/azuredisk created
    

    También puede ejecutar este comando para comprobar el estado del bloque de almacenamiento. Reemplace <storage-pool-name> por el valor de nombre del bloque de almacenamiento. Para este ejemplo, el valor sería azuredisk.

    kubectl describe sp <storage-pool-name> -n acstor
    

Cuando se crea el bloque de almacenamiento, Azure Container Storage creará una clase de almacenamiento en su nombre mediante la convención de nomenclatura acstor-<storage-pool-name>. Ahora puede mostrar las clases de almacenamiento disponibles y crear una notificación de volumen persistente.

Creación de un bloque de almacenamiento aprovisionado previamente

Si tiene discos administrados de Azure que ya están aprovisionados, puede crear un bloque de almacenamiento aprovisionado previamente mediante esos discos. Dado que los discos ya están aprovisionados, no es necesario especificar la capacidad de almacenamiento o skuName al crear el bloque de almacenamiento.

Siga estos pasos para crear un bloque de almacenamiento aprovisionado previamente para Azure Disks.

  1. Inicie sesión en Azure Portal.

  2. Para cada disco que quiera usar, vaya al disco administrado de Azure y seleccione Configuración>Propiedades. Copie toda la cadena en Id. de recurso y colóquela en un archivo de texto.

  3. Use su editor de texto favorito para crear un archivo de manifiesto YAML, como code acstor-storagepool.yaml.

  4. Pegue el código siguiente. El valor de nombre del bloque de almacenamiento puede ser el que quiera. Reemplace <resource-id> por el id. de recurso de cada disco administrado. Guarde el archivo.

    apiVersion: containerstorage.azure.com/v1
    kind: StoragePool
    metadata:
      name: sp-preprovisioned
      namespace: acstor
    spec:
      poolType:
        azureDisk:
          disks:
            - reference <resource-id1>
            - reference <resource-id2>
    
  5. Aplique el archivo de manifiesto YAML para crear el bloque de almacenamiento.

    kubectl apply -f acstor-storagepool.yaml 
    

    Una vez completada la creación del bloque de almacenamiento, verá un mensaje como el siguiente:

    storagepool.containerstorage.azure.com/sp-preprovisioned created
    

    También puede ejecutar este comando para comprobar el estado del bloque de almacenamiento. Reemplace <storage-pool-name> por el valor de nombre del bloque de almacenamiento. En este ejemplo, el valor sería sp-preprovisioned.

    kubectl describe sp <storage-pool-name> -n acstor
    

Cuando se crea el bloque de almacenamiento, Azure Container Storage creará una clase de almacenamiento en su nombre mediante la convención de nomenclatura acstor-<storage-pool-name>. Ahora puede mostrar las clases de almacenamiento disponibles y crear una notificación de volumen persistente.

Creación de un grupo de almacenamiento dinámico con su propia clave de cifrado (opcional)

Todos los datos de una cuenta de Azure Storage se cifran en reposo. De manera predeterminada, los datos se cifran con claves administradas por Microsoft. Para obtener más control sobre las claves de cifrado, puede proporcionar claves administradas por el cliente (CMK) al crear el grupo de almacenamiento para cifrar los volúmenes persistentes que va a crear.

Para usar su propia clave para el cifrado del lado servidor, debe tener una Azure Key Vault con una clave. Key Vault debe tener habilitada la protección contra purga y debe usar el modelo de permisos de RBAC de Azure. Obtenga más información sobre las claves administradas por el cliente en Linux.

Al crear el bloque de almacenamiento, debe definir los parámetros de CMK. Los parámetros de cifrado de CMK necesarios son:

  • keyVersion, que especifica la versión de la clave que se va a usar.
  • keyName es el nombre de la clave.
  • keyVaultUri es el identificador uniforme de recursos de Azure Key Vault, por ejemplo, https://user.vault.azure.net
  • Identity especifica una identidad administrada con acceso al almacén, por ejemplo, /subscriptions/XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX/resourcegroups/MC_user-acstor-westus2-rg_user-acstor-westus2_westus2/providers/Microsoft.ManagedIdentity/userAssignedIdentities/user-acstor-westus2-agentpool

Siga estos pasos para crear un bloque de almacenamiento mediante su propia clave de cifrado. Todos los volúmenes persistentes creados a partir de este bloque de almacenamiento se cifrarán con la misma clave.

  1. Use su editor de texto favorito para crear un archivo de manifiesto YAML, como code acstor-storagepool-cmk.yaml.

  2. Pegue el código siguiente, proporcione los parámetros necesarios y guarde el archivo. El valor de nombre del bloque de almacenamiento puede ser el que quiera. En skuName, especifique el nivel de rendimiento y redundancia. Los valores aceptables son Premium_LRS, Standard_LRS, StandardSSD_LRS, UltraSSD_LRS, Premium_ZRS, PremiumV2_LRS y StandardSSD_ZRS. Para el almacenamiento, especifique la cantidad de capacidad de almacenamiento para el grupo de Gi o Ti. Asegúrese de proporcionar los parámetros de cifrado de CMK.

    apiVersion: containerstorage.azure.com/v1
    kind: StoragePool
    metadata:
      name: azuredisk
      namespace: acstor
    spec:
      poolType:
        azureDisk:
          skuName: Premium_LRS
          encryption: {
            keyVersion: "<key-version>",
            keyName: "<key-name>",
            keyVaultUri: "<key-vault-uri>",
            identity: "<identity>"
          }
      resources:
        requests:
          storage: 1Ti
    
  3. Aplique el archivo de manifiesto YAML para crear el bloque de almacenamiento.

    kubectl apply -f acstor-storagepool-cmk.yaml 
    

    Una vez completada la creación del bloque de almacenamiento, verá un mensaje como el siguiente:

    storagepool.containerstorage.azure.com/azuredisk created
    

    También puede ejecutar este comando para comprobar el estado del bloque de almacenamiento. Reemplace <storage-pool-name> por el valor de nombre del bloque de almacenamiento. Para este ejemplo, el valor sería azuredisk.

    kubectl describe sp <storage-pool-name> -n acstor
    

Cuando se crea el bloque de almacenamiento, Azure Container Storage creará una clase de almacenamiento en su nombre mediante la convención de nomenclatura acstor-<storage-pool-name>.

2. Mostrar las clases de almacenamiento disponibles

Cuando el bloque de almacenamiento esté listo para usarse, debe seleccionar una clase de almacenamiento para definir cómo se crea dinámicamente el almacenamiento al crear notificaciones de volumen persistentes e implementar volúmenes persistentes.

Ejecute kubectl get sc para mostrar las clases de almacenamiento disponibles. Debería ver una clase de almacenamiento denominada acstor-<storage-pool-name>.

Importante

No use la clase de almacenamiento marcada como interna. Es una clase de almacenamiento interna necesaria para que Azure Container Storage funcione.

3. 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. Siga estos pasos para crear una PVC mediante la nueva clase de almacenamiento.

  1. Use su editor de texto favorito para crear un archivo de manifiesto YAML, como code acstor-pvc.yaml.

  2. Pegue el código siguiente y guarde el archivo. Puede elegir el valor de name de PCV que quiera.

    apiVersion: v1
    kind: PersistentVolumeClaim
    metadata:
      name: azurediskpvc
    spec:
      accessModes:
        - ReadWriteOnce
      storageClassName: acstor-azuredisk # replace with the name of your storage class if different
      resources:
        requests:
          storage: 100Gi
    
  3. Aplique el archivo de manifiesto YAML para crear la PVC.

    kubectl apply -f acstor-pvc.yaml
    

    Debería mostrarse una salida similar a esta:

    persistentvolumeclaim/azurediskpvc created
    

    Para comprobar el estado de la PVC, ejecute el siguiente comando:

    kubectl describe pvc azurediskpvc
    

Una vez creada la PVC, está lista para que la use un pod.

4. Implementar un pod y asociar un volumen persistente

Cree un pod mediante Fio (evaluador de E/S flexible) para realizar pruebas comparativas y simulación de carga de trabajo y especifique una ruta de montaje para el volumen persistente. Para claimName, use el valor de nombre que usó al crear la notificación de volumen persistente.

  1. Use su editor de texto favorito para crear un archivo de manifiesto YAML, como code acstor-pod.yaml.

  2. Pegue el código siguiente y guarde el archivo.

    kind: Pod
    apiVersion: v1
    metadata:
      name: fiopod
    spec:
      nodeSelector:
        acstor.azure.com/io-engine: acstor
      volumes:
        - name: azurediskpv
          persistentVolumeClaim:
            claimName: azurediskpvc
      containers:
        - name: fio
          image: nixery.dev/shell/fio
          args:
            - sleep
            - "1000000"
          volumeMounts:
            - mountPath: "/volume"
              name: azurediskpv
    
  3. Aplique el archivo de manifiesto YAML para implementar el pod.

    kubectl apply -f acstor-pod.yaml
    

    Debería ver un resultado similar al siguiente:

    pod/fiopod created
    
  4. Compruebe que el pod se está ejecutando y que la notificación de volumen persistente se ha enlazado correctamente al pod:

    kubectl describe pod fiopod
    kubectl describe pvc azurediskpvc
    
  5. Compruebe las pruebas FIO para ver su estado actual:

    kubectl exec -it fiopod -- fio --name=benchtest --size=800m --filename=/volume/test --direct=1 --rw=randrw --ioengine=libaio --bs=4k --iodepth=16 --numjobs=8 --time_based --runtime=60
    

Ahora ha implementado un pod que usa Azure Disks como almacenamiento y que puede usar para las cargas de trabajo de Kubernetes.

Administración de volúmenes persistentes y grupos de almacenamiento

Ahora que ha creado un volumen persistente, puede desasociarlo y volver a adjuntarlo según sea necesario. También puede expandir o eliminar un grupo de almacenamiento.

Desasociar y volver a adjuntar un volumen persistente

Para desasociar un volumen persistente, elimine el pod al que está asociado el volumen persistente. Reemplace <pod-name> por el nombre del pod, por ejemplo, fiopod.

kubectl delete pods <pod-name>

Para volver a adjuntar un volumen persistente, simplemente haga referencia al nombre de la notificación de volumen persistente en el archivo de manifiesto YAML, tal y como se describe en Implementar un pod y adjuntar un volumen persistente.

Para comprobar a qué volumen persistente está enlazado una notificación de volumen persistente, ejecute kubectl get pvc <persistent-volume-claim-name>.

Expandir un bloque de almacenamiento

Puede expandir los bloques de almacenamiento respaldados por Azure Disks para escalar verticalmente de manera rápida y sin tiempo de inactividad. Actualmente no se admite la reducción de los bloques de almacenamiento. La expansión del bloque de almacenamiento no se admite para discos Ultra ni SSD Premium v2.

Nota:

La expansión de un bloque de almacenamiento puede aumentar los costos de Azure Container Storage y Azure Disks. Vea la página de precios de Azure Container Storage y Descripción de la facturación de Azure Container Storage.

Actualmente, la expansión del bloque de almacenamiento tiene la siguiente limitación al usar Premium_LRS, Standard_LRS, StandardSSD_LRS, Premium_ZRS, y SKU de StandardSSD_ZRS:

  • Si el grupo de almacenamiento existente es inferior a 4 TiB (4096 GiB), solo puede expandirlo hasta 4095 GiB. Para evitar errores, no intente expandir el grupo de almacenamiento actual más allá de 4095 GiB si es inicialmente menor que 4 TiB (4096 GiB). Los grupos de almacenamiento > 4 TiB se pueden ampliar hasta la capacidad de almacenamiento máxima disponible.

Siga estas instrucciones para expandir un bloque de almacenamiento existente para Azure Disks.

  1. Con un editor de texto, abra el archivo de manifiesto YAML que usó para crear el bloque de almacenamiento, por ejemplo code acstor-storagepool.yaml.

  2. Reemplace la entrada de almacenamiento especificada en el archivo de manifiesto YAML por el valor deseado. Este valor debe ser mayor que la capacidad actual del bloque de almacenamiento. Por ejemplo, si la especificación está establecida en storage: 1Ti, cámbiela a storage: 2Ti. Si creó un grupo de almacenamiento aprovisionado previamente, no habrá ninguna entrada de almacenamiento porque el bloque de almacenamiento heredó el tamaño de capacidad de los discos de Azure aprovisionados previamente. Si no ve una entrada de almacenamiento en el YAML, agregue el código siguiente que especifica la capacidad de almacenamiento deseada y guarde el archivo de manifiesto:

    spec:
      resources:
        requests:
          storage: 2Ti
    

Nota:

Si tiene dos discos en un grupo de almacenamiento con una capacidad de 1 TiB cada uno, y edita el archivo de manifiesto YAML para leer storage: 4Ti, ambos discos se expandirán a 2 TiB cuando se aplique YAML, lo que le proporcionará una nueva capacidad total de 4 TiB.

  1. Aplique el archivo de manifiesto YAML para expandir el bloque de almacenamiento.

    kubectl apply -f acstor-storagepool.yaml 
    
  2. Ejecute este comando para comprobar el estado del bloque de almacenamiento. Reemplace <storage-pool-name> por el valor de nombre del bloque de almacenamiento.

    kubectl describe sp <storage-pool-name> -n acstor
    

    Debería ver un mensaje como "el bloque de almacenamiento se está expandiendo". Vuelva a ejecutar el comando después de unos minutos y el mensaje debería desaparecer.

  3. Ejecute kubectl get sp -A y el bloque de almacenamiento debería reflejar el nuevo tamaño.

Eliminar un bloque de almacenamiento

Si desea eliminar un bloque de almacenamiento, ejecute el siguiente comando. Reemplace <storage-pool-name> por el nombre del bloque de almacenamiento.

kubectl delete sp -n acstor <storage-pool-name>

Consulte también