Condividi tramite


Usare i driver del disco CSI (Container Storage Interface) nel servizio Azure Kubernetes abilitato da Azure Arc

> Si applica a: Servizio Azure Kubernetes in Azure Stack HCI 22H2, servizio Azure Kubernetes in Windows Server, servizio Azure Kubernetes in Azure Stack HCI 23H2

Questo articolo descrive come usare le classi di archiviazione predefinite CSI (Container Storage Interface) per creare in modo dinamico volumi persistenti del disco e creare classi di archiviazione personalizzate nel servizio Azure Kubernetes abilitate da Arc.

Panoramica di CSI nel servizio Azure Kubernetes abilitato da Arc

L'interfaccia di archiviazione contenitori (CSI) è uno standard per esporre sistemi di archiviazione di blocchi e file arbitrari ai carichi di lavoro in contenitori in Kubernetes. Usando CSI, il servizio Azure Kubernetes abilitato da Arc può scrivere, distribuire ed eseguire l'iterazione dei plug-in per esporre nuovi sistemi di archiviazione. L'uso di CSI può anche migliorare quelli esistenti in Kubernetes senza dover toccare il codice Kubernetes principale e quindi attendere i cicli di rilascio.

I driver CSI su disco e file usati da AKS Arc sono driver conformi alla specifica CSI.

Il supporto del driver di archiviazione CSI in AKS Arc consente di usare:

  • Dischi Arc del servizio Azure Kubernetes che è possibile usare per creare una risorsa Kubernetes DataDisk . Questi vengono montati come ReadWriteOnce, quindi sono disponibili solo per un singolo pod alla volta. Per i volumi di archiviazione accessibili contemporaneamente da più pod, usare i file Arc del servizio Azure Kubernetes.

  • File Arc del servizio Azure Kubernetes che è possibile usare per montare una condivisione SMB o NFS nei pod. Questi vengono montati come ReadWriteMany, quindi è possibile condividere i dati tra più nodi e pod. Possono anche essere montati come ReadWriteOnce in base alla specifica pvc (attestazione di volume permanente).

Creare in modo dinamico volumi persistenti del disco usando la classe di archiviazione predefinita

Una classe di archiviazione viene usata per definire la modalità di creazione dinamica di un'unità di archiviazione con un volume permanente. Per altre informazioni su come usare le classi di archiviazione, vedere Classi di archiviazione Kubernetes.

In AKS Arc la classe di archiviazione predefinita viene creata per impostazione predefinita e usa CSI per creare volumi basati su VHDX. Il criterio di recupero garantisce che il VHDX sottostante venga eliminato quando viene eliminato il volume permanente usato. La classe di archiviazione configura anche i volumi permanenti in modo che siano espandibili; è sufficiente modificare l'attestazione del volume permanente con le nuove dimensioni.

Per sfruttare questa classe di archiviazione, creare un PVC e un rispettivo pod che fa riferimento e lo usa. 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 predefinite o una classe di archiviazione definita dall'utente per creare un VHDX delle dimensioni desiderate. Quando si crea una definizione di pod, il PVC viene specificato per richiedere l'archiviazione desiderata.

Creare una classe di archiviazione personalizzata per i dischi

La classe di archiviazione predefinita è adatta per gli scenari più comuni. In alcuni casi, tuttavia, può essere necessario creare una classe di archiviazione personalizzata che archivia i PC in una determinata posizione mappata a un livello di prestazioni specifico.

Se sono presenti carichi di lavoro Linux (pod), è necessario creare una classe di archiviazione personalizzata con il parametro fsType: ext4. Questo requisito si applica alle versioni 1.19 e 1.20 o successive di Kubernetes. L'esempio seguente mostra una definizione di classe di archiviazione personalizzata con fsType il parametro definito:

apiVersion: storage.k8s.io/v1
kind: StorageClass
metadata:
  name: aks-hci-disk-custom
parameters:
  blocksize: "33554432"
  container: SqlStorageContainer
  dynamic: "true"
  group: clustergroup-summertime
  hostname: TESTPATCHING-91.sys-sqlsvr.local
  logicalsectorsize: "4096"
  physicalsectorsize: "4096"
  port: "55000"
  fsType: ext4
provisioner: disk.csi.akshci.com
reclaimPolicy: Delete
volumeBindingMode: Immediate
allowVolumeExpansion: true  

Se si crea una classe di archiviazione personalizzata, è possibile specificare il percorso in cui archiviare i PC. Se l'infrastruttura sottostante è Azure Stack HCI, questa nuova posizione potrebbe essere un volume supportato da unità SSD/NVMe ad alte prestazioni o da un volume ottimizzato per i costi supportato dalle unità HDD.

La creazione di una classe di archiviazione personalizzata è un processo in due passaggi:

  1. Creare un nuovo percorso di archiviazione usando i stack-hci-vm storagepath cmdlet per creare, visualizzare ed elencare i percorsi di archiviazione nel cluster Azure Stack HCI. Per altre informazioni sulla creazione del percorso di archiviazione, vedere Percorso di archiviazione.

    Per $path, creare un percorso di archiviazione denominato $storagepathname, ad esempio C:\ClusterStorage\test-storagepath:

    az stack-hci-vm storagepath create --resource-group $resource_group --custom-location $customLocationID --name $storagepathname --path $path
    

    Ottenere l'ID risorsa del percorso di archiviazione:

    $storagepathID = az stack-hci-vm storagepath show --name $storagepathname --resource-group $resource_group --query "id" -o tsv 
    
  2. Creare una nuova classe di archiviazione personalizzata usando il nuovo percorso di archiviazione.

    1. Creare un file denominato sc-aks-hci-disk-custom.yaml e quindi copiare il manifesto dal file YAML seguente. La classe di archiviazione è la stessa della classe di archiviazione predefinita, ad eccezione del nuovo containeroggetto . Usare l'oggetto storage path ID creato nel passaggio precedente per container. Per group e hostname, eseguire una query sulla classe di archiviazione predefinita eseguendo kubectl get storageclass default -o yamle quindi usare i valori specificati:

      kind: StorageClass
      apiVersion: storage.k8s.io/v1
      metadata:
       name: aks-hci-disk-custom
      provisioner: disk.csi.akshci.com
      parameters:
       blocksize: "33554432"
       container: <storage path ID>
       dynamic: "true"
       group: <e.g clustergroup-akshci> # same as the default storageclass
       hostname: <e.g. ca-a858c18c.ntprod.contoso.com> # same as the default storageclass
       logicalsectorsize: "4096"
       physicalsectorsize: "4096"
       port: "55000"
       fsType: ext4 # refer to the note above to determine when to include this parameter
      allowVolumeExpansion: true
      reclaimPolicy: Delete
      volumeBindingMode: Immediate
      
    2. Creare la classe di archiviazione con il comando kubectl apply e specificare il file sc-aks-hci-disk-custom.yaml :

       $ kubectl apply -f sc-aks-hci-disk-custom.yaml
       storageclass.storage.k8s.io/aks-hci-disk-custom created
      

Passaggi successivi