Condividi tramite


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

> si applica a: AKS su Azure locale, versione 22H2, AKS su Windows Server, AKS su Azure locale, versione 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 abilitato da Arc.

Panoramica di CSI nel servizio Azure Kubernetes abilitato da Arc

CSI (Container Storage Interface) è uno standard per l'esposizione di sistemi di archiviazione file e a blocchi arbitrari per carichi di lavoro in contenitori in Kubernetes. Usando CSI, il servizio Azure Kubernetes abilitato da Arc può scrivere, distribuire e 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 del disco e dei file usati da AKS Arc sono driver conformi alle specifiche 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 a cui è possibile accedere contemporaneamente 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, in modo da poter condividere i dati tra più nodi e pod. Possono anche essere montati come ReadWriteOnce in base alla specifica DI 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 supportati da 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 persistenti 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'attestazione di volume permanente viene usata 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 VHDX delle dimensioni desiderate. Quando si crea una definizione di pod, l'attestazione di volume permanente viene specificata per richiedere lo spazio di archiviazione desiderato.

Creare una classe di archiviazione personalizzata per i dischi

La classe di archiviazione predefinita è adatta per gli scenari più comuni. In alcuni casi, tuttavia, potrebbe essere necessario creare una classe di archiviazione personalizzata che archivia i TELEVISORi 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 di Kubernetes 1.19 e 1.20 o successive. 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 TELEVISORi. Se l'infrastruttura sottostante è locale di Azure, questa nuova posizione potrebbe essere un volume supportato da unità SSD/NVMe a prestazioni elevate o da un volume ottimizzato per i costi supportato da 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 locale di Azure. 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 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 è uguale alla 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