Uso del controlador de Container Storage Interface (CSI) de Azure Blob Storage

El controlador de Container Storage Interface (CSI) de Azure Blob Storage es un controlador compatible con la especificación CSI que usa Azure Kubernetes Service (AKS) para administrar el ciclo de vida de Azure Blob Storage. CSI es un estándar para exponer sistemas de almacenamiento de archivos y bloques arbitrarios a cargas de trabajo en contenedores en Kubernetes.

Gracias a la adopción y al uso de CSI, AKS ahora puede escribir, implementar e iterar complementos para exponer nuevos sistemas de almacenamiento o mejorar los existentes en Kubernetes. El uso de controladores CSI en AKS evita tener que modificar el código principal de Kubernetes y esperar a su ciclo de versiones.

El montaje de Azure Blob Storage como sistema de archivos en un contenedor o pod permite usar Blob Storage con una serie de aplicaciones que ponen en marcha grandes cantidades de datos no estructurados. Por ejemplo:

  • Datos del archivo de registro
  • Imágenes, documentos y streaming de vídeo o audio
  • Datos de recuperación ante desastres

Se puede acceder a los datos del almacenamiento de objetos mediante aplicaciones que usan el protocolo BlobFuse o Network File System (NFS) 3.0. Antes de la introducción del controlador CSI de Azure Blob Storage, la única opción era instalar manualmente un controlador no compatible para acceder a Blob Storage desde la aplicación que se ejecuta en AKS. Cuando el controlador CSI de Azure Blob Storage está habilitado en AKS, hay dos clases de almacenamiento integradas azureblob-fuse-premium y azureblob-nfs-premium.

Para crear un clúster de AKS con compatibilidad con controladores CSI, consulte Controladores CSI en AKS. Para más información sobre las diferencias de acceso entre cada uno de los tipos de almacenamiento de Azure mediante el protocolo NFS, consulte Comparación del acceso a Azure Files, Blob Storage y Azure NetApp Files con NFS.

Características del controlador CSI de Azure Blob Storage

El controlador CSI de Azure Blob Storage admite las siguientes características:

  • Protocolo BlobFuse y Network File System (NFS) versión 3.0

Antes de empezar

Nota:

Si el blobfuse-proxy no está habilitado durante la instalación del controlador de código abierto, la desinstalación del controlador de código abierto interrumpirá los montajes de blobfuse existentes. Sin embargo, los montajes NFS seguirán sin verse afectados.

Habilitación del controlador CSI en un clúster de AKS nuevo o existente

Con la CLI de Azure, puede habilitar el controlador CSI de Blob Storage en un clúster de AKS nuevo o existente antes de configurar un volumen persistente para que lo usen los pods del clúster.

Para habilitar el controlador en un nuevo clúster, incluya el parámetro --enable-blob-driver con el comando az aks create, como se muestra en el siguiente ejemplo:

az aks create --enable-blob-driver -n myAKSCluster -g myResourceGroup

Para habilitar el controlador en un clúster existente, incluya el parámetro --enable-blob-driver con el comando az aks update, como se muestra en el ejemplo siguiente:

az aks update --enable-blob-driver -n myAKSCluster -g myResourceGroup

Se le pedirá que confirme que no hay instalado un controlador CSI de blobs de código abierto. Después de la confirmación, puede tardar varios minutos en completarse esta acción. Una vez completado, debería ver en la salida el estado de habilitación del controlador en el clúster. El ejemplo siguiente asemeja la sección que indica los resultados del comando anterior:

"storageProfile": {
    "blobCsiDriver": {
      "enabled": true
    },

Deshabilitación del controlador CSI en un clúster de AKS existente

Con la CLI de Azure, puede deshabilitar el controlador CSI de Blob Storage en un clúster de AKS existente después de quitar el volumen persistente del clúster.

Para deshabilitar el controlador en un clúster existente, incluya el parámetro --disable-blob-driver con el comando az aks update, como se muestra en el ejemplo siguiente:

az aks update --disable-blob-driver -n myAKSCluster -g myResourceGroup

Uso de un volumen persistente con Azure Blob Storage

Un volumen persistente (PV) representa un fragmento de almacenamiento aprovisionado para su uso con pods de Kubernetes. Un PV puede usarse en uno o varios pods y puede aprovisionarse de forma dinámica o estática. Si varios pods necesitan acceso simultáneo al mismo volumen de almacenamiento, puede usar Azure Blob Storage para conectarse mediante Network File System (NFS) o blobfuse. En este artículo se muestra cómo crear dinámicamente un contenedor de Azure Blob Storage para que lo usen varios pods en un clúster de AKS.

Para más información sobre los volúmenes de Kubernetes, consulte Opciones de almacenamiento para aplicaciones en AKS.

Creación dinámica de PV de Azure Blob Storage mediante las clases de almacenamiento integradas

Se usa una clase de almacenamiento para definir cómo se crea un contenedor de Azure Blob Storage. En el grupo de recursos de nodo, se crea automáticamente una cuenta de almacenamiento para utilizarla con la clase de almacenamiento para guardar el contenedor de Azure Blob Storage. Seleccione una de las siguientes SKU de redundancia de Azure Storage para skuName:

  • Standard_LRS: almacenamiento con redundancia local estándar
  • Premium_LRS: almacenamiento con redundancia local prémium
  • Standard_ZRS: almacenamiento estándar con redundancia de zona
  • Premium_ZRS: almacenamiento con redundancia de zona Premium
  • Standard_GRS: almacenamiento con redundancia geográfica estándar
  • Standard_RAGRS: almacenamiento con redundancia geográfica con acceso de lectura estándar

Cuando se usan controladores CSI de almacenamiento en AKS, hay dos clases de almacenamiento integradas adicionales que usan los controladores de almacenamiento CSI para Azure Blob Storage.

La directiva de recuperación de ambas clases de almacenamiento garantiza que el recurso compartido de Azure Blob Storage subyacente se elimine cuando se elimine el PV correspondiente. Las clases de almacenamiento también configuran el contenedor para que se pueda expandir de forma predeterminada, ya que el parámetro set allowVolumeExpansion se establece en true.

Use el comando kubectl get sc para ver las clases de almacenamiento. El ejemplo siguiente muestra las clases de almacenamiento azureblob-fuse-premium y azureblob-nfs-premium disponibles dentro de un clúster de AKS:

NAME                                  PROVISIONER       RECLAIMPOLICY   VOLUMEBINDINGMODE      ALLOWVOLUMEEXPANSION     AGE
azureblob-fuse-premium               blob.csi.azure.com   Delete          Immediate              true                   23h
azureblob-nfs-premium                blob.csi.azure.com   Delete          Immediate              true                   23h

Para usar estas clases de almacenamiento, cree una PVC y el pod correspondiente que haga referencia a ellas y las use. Una PVC se usa para aprovisionar automáticamente el almacenamiento en función de una clase de almacenamiento. Una PVC puede usar una de las clases de almacenamiento creadas previamente o una clase de almacenamiento definida por el usuario para crear un contenedor de Azure Blob Storage para el SKU, tamaño y protocolo deseados para comunicarse. Cuando se crea una definición de pod, se especifica la PVC para solicitar el almacenamiento deseado.

Uso de StatefulSet

Para que un volumen de almacenamiento persista para la carga de trabajo, puede usar StatefulSet. Esto facilita la coincidencia de los volúmenes existentes con los nuevos pods que reemplazan a los que se han producido errores. En los ejemplos siguientes se muestra cómo configurar un StatefulSet para Blob Storage mediante Blobfuse o el protocolo NFS.

Requisitos previos

  • La identidad del plano de control del clúster de AKS (es decir, el nombre del clúster de AKS) se agrega al rol Colaborador en la red virtual y el grupo de seguridad de red.
  1. Cree un archivo denominado azure-blob-nfs-ss.yaml y cópielo en el siguiente código YAML.

    apiVersion: apps/v1
    kind: StatefulSet
    metadata:
      name: statefulset-blob-nfs
      labels:
        app: nginx
    spec:
      serviceName: statefulset-blob-nfs
      replicas: 1
      template:
        metadata:
          labels:
            app: nginx
        spec:
          nodeSelector:
            "kubernetes.io/os": linux
          containers:
            - name: statefulset-blob-nfs
              image: mcr.microsoft.com/oss/nginx/nginx:1.19.5
              volumeMounts:
                - name: persistent-storage
                  mountPath: /mnt/blob
      updateStrategy:
        type: RollingUpdate
      selector:
        matchLabels:
          app: nginx
      volumeClaimTemplates:
        - metadata:
            name: persistent-storage
          spec:
            storageClassName: azureblob-nfs-premium
            accessModes: ["ReadWriteMany"]
            resources:
              requests:
                storage: 100Gi
    
  2. Cree statefulSet con el comando kubectl create:

    kubectl create -f azure-blob-nfs-ss.yaml
    

Pasos siguientes