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
Asegúrese de que tiene instalada y configurada la versión 2.42 de la CLI de Azure o posterior. Ejecute
az --version
para encontrar la versión. Si necesita instalarla o actualizarla, vea Instalación de la CLI de Azure. Si ha instalado la extensiónaks-preview
de la CLI de Azure, asegúrese de actualizar la extensión a la versión más reciente con una llamada aaz extension update --name aks-preview
.Realice los pasos descritos en este vínculo si ya ha instalado el controlador de código abierto CSI Blob Storage para acceder a Azure Blob Storage desde el clúster.
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 \
--name myAKSCluster \
--resource-group myResourceGroup \
--generate-ssh-keys
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 --name myAKSCluster --resource-group 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 --name myAKSCluster --resource-group 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.
Nota:
No se admite la reducción de volúmenes persistentes.
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.
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.22 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
Cree statefulSet con el comando kubectl create:
kubectl create -f azure-blob-nfs-ss.yaml
Pasos siguientes
- Para obtener información sobre cómo configurar un volumen persistente dinámico o estático, consulte Creación y uso de un volumen con Azure Blob Storage.
- Para obtener información sobre cómo usar un controlador CSI para discos de Azure, vea Uso de discos de Azure con controladores CSI.
- Para obtener información sobre cómo usar el controlador CSI para Azure Files, consulte Uso de controladores de Container Storage Interface (CSI) de Azure Files en Azure Kubernetes Service (AKS).
- Para más información sobre los procedimientos recomendados, consulte Procedimientos recomendados para el almacenamiento y las copias de seguridad en Azure Kubernetes Service.
Azure Kubernetes Service