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:
- Servizio Azure Kubernetes in Locale di Azure, versione 23H2
- Servizio Azure Kubernetes in azure locale 22H2
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
Creare una nuova classe di archiviazione personalizzata usando il nuovo percorso di archiviazione.
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
container
oggetto . Usare l'oggettostorage path ID
creato nel passaggio precedente percontainer
. Pergroup
ehostname
, eseguire una query sulla classe di archiviazione predefinita eseguendokubectl get storageclass default -o yaml
e 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
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