Usare il driver del contenitore di archiviazione BLOB di Azure Archiviazione Interface (CSI)

Il driver del contenitore di archiviazione BLOB di Azure Archiviazione Interface (CSI) è un driver conforme alle specifiche CSI usato da servizio Azure Kubernetes (AKS) per gestire il ciclo di vita dell'archiviazione BLOB di Azure. CSI è uno standard per esporre blocchi arbitrari e file storage system a carichi di lavoro in contenitori in Kubernetes.

Adottando e usando CSI, il servizio Azure Kubernetes può ora scrivere, distribuire e eseguire l'iterazione dei plug-in per esporre sistemi di archiviazione nuovi o migliorare i sistemi di archiviazione esistenti in Kubernetes. L'uso dei driver CSI nel servizio Azure Kubernetes evita di dover toccare il codice Kubernetes principale e attendere i cicli di rilascio.

Quando si monta l'archiviazione BLOB di Azure come file system in un contenitore o in un pod, consente di usare l'archiviazione BLOB con una serie di applicazioni che funzionano enormi quantità di dati non strutturati. Ad esempio:

  • Dati dei file di log
  • Immagini, documenti e streaming video o audio
  • Dati di ripristino di emergenza

È possibile accedere ai dati nell'archivio oggetti tramite il protocollo BlobFuse o Network File System (NFS) 3.0. Prima dell'introduzione del driver CSI di Archiviazione BLOB di Azure, l'unica opzione consiste nell'installare manualmente un driver non supportato per accedere all'archiviazione BLOB dall'applicazione in esecuzione nel servizio Azure Kubernetes. Quando il driver CSI di Archiviazione BLOB di Azure è abilitato nel servizio Azure Kubernetes, sono disponibili due classi di archiviazione predefinite: azureblob-fuse-premium e azureblob-nfs-premium.

Per creare un cluster del servizio Azure Kubernetes con il supporto dei driver CSI, vedere Driver CSI nel servizio Azure Kubernetes. Per altre informazioni sulle differenze di accesso tra ognuno dei tipi di archiviazione di Azure usando il protocollo NFS, vedere Confrontare l'accesso a File di Azure, Archiviazione BLOB e Azure NetApp Files con NFS.

Funzionalità del driver CSI di Archiviazione BLOB di Azure

Il driver CSI di Archiviazione BLOB di Azure supporta le funzionalità seguenti:

  • Protocollo BlobFuse e Network File System (NFS) versione 3.0

Operazioni preliminari

  • È necessaria l'interfaccia della riga di comando di Azure versione 2.42 o successiva installata e configurata. Eseguire az --version per trovare la versione. Se è necessario eseguire l'installazione o l'aggiornamento, vedere Installare l'interfaccia della riga di comando di Azure.

  • Seguire questa procedura se in precedenza è stato installato il BLOB CSI Archiviazione driver open source per accedere all'archiviazione BLOB di Azure dal cluster.

Nota

Se blobfuse-proxy non è abilitato durante l'installazione del driver open source, la disinstallazione del driver open source interromperà i montaggi blobfuse esistenti. Tuttavia, i montaggi NFS rimarranno invariati.

Abilitare il driver CSI in un cluster del servizio Azure Kubernetes nuovo o esistente

Usando l'interfaccia della riga di comando di Azure, è possibile abilitare il driver CSI dell'archiviazione BLOB in un cluster del servizio Azure Kubernetes nuovo o esistente prima di configurare un volume permanente per l'uso da parte dei pod nel cluster.

Per abilitare il driver in un nuovo cluster, includere il --enable-blob-driver parametro con il az aks create comando come illustrato nell'esempio seguente:

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

Per abilitare il driver in un cluster esistente, includere il --enable-blob-driver parametro con il az aks update comando come illustrato nell'esempio seguente:

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

Viene richiesto di verificare che non sia installato un driver CSI BLOB open source. Dopo la conferma, potrebbero essere necessari alcuni minuti per completare questa azione. Al termine, nell'output verrà visualizzato lo stato dell'abilitazione del driver nel cluster. L'esempio seguente è simile alla sezione che indica i risultati del comando precedente:

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

Disabilitare il driver CSI in un cluster del servizio Azure Kubernetes esistente

Usando l'interfaccia della riga di comando di Azure, è possibile disabilitare il driver CSI dell'archiviazione BLOB in un cluster del servizio Azure Kubernetes esistente dopo aver rimosso il volume permanente dal cluster.

Per disabilitare il driver in un cluster esistente, includere il --disable-blob-driver parametro con il az aks update comando come illustrato nell'esempio seguente:

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

Usare un volume permanente con Archiviazione BLOB di Azure

Un volume permanente (PV) rappresenta una parte di spazio di archiviazione di cui viene effettuato il provisioning per l'uso con i pod Kubernetes. Un pv può essere usato da uno o più pod e può essere sottoposto a provisioning in modo dinamico o statico. Se più pod richiedono l'accesso simultaneo allo stesso volume di archiviazione, è possibile usare l'archiviazione BLOB di Azure per connettersi usando Network File System (NFS) o blobfuse. Questo articolo illustra come creare dinamicamente un contenitore di archiviazione BLOB di Azure per l'uso da parte di più pod in un cluster del servizio Azure Kubernetes.

Per altre informazioni sui volumi Kubernetes, vedere Opzioni di archiviazione per le applicazioni nel servizio Azure Kubernetes.

Creare dinamicamente i TELEVISORi di Archiviazione BLOB di Azure usando le classi di archiviazione predefinite

Viene usata una classe di archiviazione per definire la modalità di creazione di un contenitore di archiviazione BLOB di Azure. Un account di archiviazione viene creato automaticamente nel gruppo di risorse del nodo da usare con la classe di archiviazione per contenere il contenitore di archiviazione BLOB di Azure. Scegliere uno degli SKU di ridondanza di Archiviazione di Azure seguenti per skuName:

  • Standard_LRS: archiviazione con ridondanza locale Standard
  • Premium_LRS: Archiviazione con ridondanza locale Premium
  • Standard_ZRS: Archiviazione con ridondanza della zona Standard
  • Premium_ZRS: Archiviazione con ridondanza della zona Premium
  • Standard_GRS: Archiviazione con ridondanza geografica standard
  • Standard_RAGRS: Archiviazione con ridondanza geografica e accesso in lettura Standard

Quando si usano driver CSI di archiviazione nel servizio Azure Kubernetes, sono disponibili due Archiviazione Classi aggiuntive che usano il driver di archiviazione CSI BLOB di Azure.

I criteri di recupero in entrambe le classi di archiviazione assicurano che l'archivio BLOB di Azure sottostante venga eliminato quando viene eliminato il rispettivo pv. Le classi di archiviazione configurano anche il contenitore in modo che sia espandibile per impostazione predefinita, perché il set allowVolumeExpansion parametro è impostato su true.

Usare il comando kubectl get sc per visualizzare le classi di archiviazione. L'esempio seguente illustra le azureblob-fuse-premium classi di archiviazione e azureblob-nfs-premium disponibili all'interno di un cluster del servizio Azure Kubernetes:

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

Per usare queste classi di archiviazione, creare un PVC e i rispettivi pod che fanno riferimento e li utilizza. Un PVC viene usato per effettuare automaticamente il provisioning dell'archiviazione in base a una classe di archiviazione. Un PVC può usare una delle classi di archiviazione già create o una classe di archiviazione definita dall'utente per creare un contenitore di archiviazione BLOB di Azure per lo SKU, le dimensioni e il protocollo desiderati per comunicare con esso. Quando si crea una definizione di pod, il PVC viene specificato per richiedere lo spazio di archiviazione desiderato.

Uso di un oggetto StatefulSet

Per rendere persistente un volume di archiviazione per il carico di lavoro, è possibile usare un oggetto StatefulSet. In questo modo è più semplice associare i volumi esistenti ai nuovi pod che sostituiscono eventuali errori. Gli esempi seguenti illustrano come configurare un oggetto StatefulSet per l'archiviazione BLOB usando Blobfuse o il protocollo NFS.

Prerequisiti

  • L'identità del piano di controllo del cluster del servizio Azure Kubernetes, ovvero il nome del cluster del servizio Azure Kubernetes, viene aggiunta al ruolo Collaboratore nella rete virtuale e nel gruppo di sicurezza di rete.
  1. Creare un file denominato azure-blob-nfs-ss.yaml e copiarlo nel codice YAML seguente.

    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. Creare StatefulSet con il comando kubectl create:

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

Passaggi successivi