Share via


Usar la versión preliminar de Azure Container Storage con disco efímero

Azure Container Storage es un servicio de administración, implementación y orquestación de volúmenes basado en la nube creado de forma nativa para contenedores. En este artículo se muestra cómo configurar Azure Container Storage para que use disco efímero como almacenamiento back-end para las cargas de trabajo de Kubernetes. Al final, tendrá un pod que use NVMe local o SSD temporal como almacenamiento.

Importante

Los discos locales son efímeros, lo que significa que se crean en el almacenamiento de la máquina virtual local y no se guardan en un servicio de almacenamiento de Azure. Los datos se perderán en estos discos si detiene o desasigna la máquina virtual. Solo puede crear volúmenes efímeros genéricos de Kubernetes a partir de un grupo de almacenamiento de discos efímeros. Si quiere crear un volumen persistente, debe habilitar la replicación para el grupo de 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.

Nota:

Para usar Azure Container Storage con disco efímero, el clúster de AKS debe tener un grupo de nodos de al menos tres máquinas virtuales optimizadas para almacenamiento como standard_l8s_v3. Se recomienda que cada máquina virtual tenga un mínimo de cuatro CPU virtuales (vCPU).

Disponibilidad regional

Azure Container Storage solo está disponible para un subconjunto de regiones de Azure:

  • (África) Norte de Sudáfrica
  • (Asia Pacífico) Este de Australia
  • (Asia Pacífico) Este de Asia
  • (Asia Pacífico) Este de Japón
  • (Asia Pacífico) Centro de Corea del Sur
  • (Asia Pacífico) Sudeste de Asia
  • (Asia Pacífico) Centro de la India
  • (Europa) Centro de Francia
  • (Europa) Centro-oeste de Alemania
  • (Europa) Norte de Europa
  • (Europa) Oeste de Europa
  • (Europa) Sur de Reino Unido
  • (Europa) Centro de Suecia
  • (Europa) Norte de Suiza
  • (Oriente Medio) Norte de Emiratos Árabes Unidos
  • (Norteamérica) Este de EE. UU.
  • (Norteamérica) Este de EE. UU. 2
  • (Norteamérica) Oeste de EE. UU.
  • (Norteamérica) Oeste de EE. UU. 2
  • (Norteamérica) Oeste de EE. UU. 3
  • (Norteamérica) Centro de EE. UU.
  • (Norteamérica) Centro-norte de EE. UU.
  • (Norteamérica) Centro-sur de EE. UU.
  • (Norteamérica) Centro-oeste de EE. UU.
  • (Norteamérica) Centro de Canadá
  • (Norteamérica) Este de Canadá
  • (Sudamérica) Sur de Brasil

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.

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 esta sección y continuar con Representación de las clases de almacenamiento disponibles.

Tiene tres opciones para crear un grupo de almacenamiento que use disco efímero:

Creación de un grupo de almacenamiento con NVMe

Siga estos pasos para crear un grupo de almacenamiento mediante NVMe local.

  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 y guarde el archivo. El valor de nombre del bloque de almacenamiento puede ser el que quiera.

    apiVersion: containerstorage.azure.com/v1
    kind: StoragePool
    metadata:
      name: ephemeraldisk
      namespace: acstor
    spec:
      poolType:
        ephemeralDisk: {}
    
  3. 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/ephemeraldisk 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 ephemeraldisk.

    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>.

Creación de un grupo de almacenamiento con SSD temporal

Siga estos pasos para crear un grupo de almacenamiento mediante SSD temporal.

  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 y guarde el archivo. El valor de nombre del bloque de almacenamiento puede ser el que quiera.

    apiVersion: containerstorage.azure.com/v1
    kind: StoragePool
    metadata:
      name: ephemeraldisk
      namespace: acstor
    spec:
      poolType:
        ephemeralDisk:
          diskType: temp
    
  3. 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/ephemeraldisk 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 ephemeraldisk.

    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>.

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.

Implementación de un pod con un volumen efímero genérico

Cree un pod mediante Fio (evaluador de E/S flexible) para realizar pruebas comparativas y simulación de carga de trabajo, que use un volumen efímero genérico.

  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
      containers:
        - name: fio
          image: nixery.dev/shell/fio
          args:
            - sleep
            - "1000000"
          volumeMounts:
            - mountPath: "/volume"
              name: ephemeralvolume
      volumes:
        - name: ephemeralvolume
          ephemeral:
            volumeClaimTemplate:
              metadata:
                labels:
                  type: my-ephemeral-volume
              spec:
                accessModes: [ "ReadWriteOnce" ]
                storageClassName: "acstor-ephemeraldisk-nvme" # replace with the name of your storage class if different
                resources:
                  requests:
                    storage: 1Gi
    
  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 efímero se haya enlazado correctamente al pod:

    kubectl describe pod fiopod
    kubectl describe pvc fiopod-ephemeralvolume
    
  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 disco efímero como almacenamiento y puede usarlo para las cargas de trabajo de Kubernetes.

Expansión de un grupo de almacenamiento

Puede expandir los grupos de almacenamiento respaldados por NVMe local o SSD temporal para escalar verticalmente rápidamente y sin tiempo de inactividad. Actualmente no se admite la reducción de los grupos de almacenamiento.

Dado que un grupo de almacenamiento respaldado por disco efímero usa recursos de almacenamiento local en los nodos del clúster (VM) de AKS, la expansión del grupo de almacenamiento requiere agregar otro nodo al clúster. Siga estas instrucciones para expandir el bloque de almacenamiento.

  1. Ejecute el siguiente comando para agregar un nodo al clúster de AKS. Reemplace <cluster-name>, <nodepool name> y <resource-group-name> con sus propios valores. Para obtener el nombre del grupo de nodos, ejecute kubectl get nodes.

    az aks nodepool add --cluster-name <cluster name> --name <nodepool name> --resource-group <resource group> --node-vm-size Standard_L8s_v3 --node-count 1 --labels acstor.azure.com/io-engine=acstor
    
  2. Ejecute kubectl get nodes y verá que se ha agregado un nodo al clúster.

  3. Ejecute kubectl get sp -A y debería ver que la capacidad del bloque de almacenamiento ha aumentado.

Crear un grupo 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>

Opcional: Creación de un grupo de almacenamiento con replicación de volúmenes (solo NVMe)

Las aplicaciones que usan NVMe local pueden aprovechar la replicación de almacenamiento para mejorar la resistencia. La replicación no se admite actualmente para SSD temporal.

Azure Container Storage admite actualmente configuraciones de tres réplicas y cinco réplicas. Si especifica tres réplicas, debe tener al menos tres nodos en el clúster de AKS. Si especifica cinco réplicas, debe tener al menos cinco nodos.

Siga estos pasos para crear un grupo de almacenamiento mediante NVMe local con replicación.

Nota:

Dado que los grupos de almacenamiento de disco efímero consumen todos los discos NVMe disponibles, debe eliminar los grupos de almacenamiento NVMe locales del disco efímero existentes antes de crear un nuevo grupo de almacenamiento con replicación.

  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 y guarde el archivo. El valor de nombre del bloque de almacenamiento puede ser el que quiera. Establezca réplicas en 3 o 5.

    apiVersion: containerstorage.azure.com/v1
    kind: StoragePool
    metadata:
      name: nvme
      namespace: acstor
    spec:
      poolType:
        ephemeralDisk:
          diskType: nvme
          replicas: 3
    
  3. 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/nvme 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 nvme.

    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 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: ephemeralpvc
    spec:
      accessModes:
        - ReadWriteOnce
      storageClassName: acstor-ephemeraldisk-nvme # 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/ephemeralpvc created
    

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

    kubectl describe pvc ephemeralpvc
    

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

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: ephemeralpv
          persistentVolumeClaim:
            claimName: ephemeralpvc
      containers:
        - name: fio
          image: nixery.dev/shell/fio
          args:
            - sleep
            - "1000000"
          volumeMounts:
            - mountPath: "/volume"
              name: ephemeralpv
    
  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 ephemeralpvc
    
  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 disco efímero como almacenamiento y puede usarlo para las cargas de trabajo de Kubernetes.

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>.

Consulte también