Używanie sterowników dysków interfejsu CONTAINER Storage Interface (CSI) w usłudze AKS włączonej przez usługę Azure Arc
> Dotyczy: AKS w usłudze Azure Stack HCI 22H2, AKS w systemie Windows Server, AKS w usłudze Azure Stack HCI 23H2
W tym artykule opisano sposób używania wbudowanych klas magazynu interfejsu magazynu kontenera (CSI) do dynamicznego tworzenia woluminów trwałych dysków i tworzenia niestandardowych klas magazynu w usłudze AKS włączonej przez usługę Arc.
Omówienie interfejsu CSI w usłudze AKS włączonego przez usługę Arc
Interfejs magazynu kontenerów (CSI) jest standardem umożliwiającym uwidacznianie dowolnych systemów magazynowania bloków i plików w konteneryzowanych obciążeniach na platformie Kubernetes. Dzięki użyciu interfejsu CSI usługa AKS włączona przez usługę Arc może zapisywać, wdrażać i iterować wtyczki w celu uwidocznienia nowych systemów magazynowania. Użycie interfejsu CSI może również poprawić istniejące w rozwiązaniu Kubernetes bez konieczności dotykania podstawowego kodu Kubernetes, a następnie oczekiwania na cykle wydania.
Sterowniki CSI dysku i pliku używane przez usługę AKS Arc są sterownikami zgodnymi ze specyfikacją CSI.
Obsługa sterowników magazynu CSI w usłudze AKS Arc umożliwia korzystanie z następujących funkcji:
Dyski usługi AKS Arc, których można użyć do utworzenia zasobu Kubernetes DataDisk . Są one instalowane jako ReadWriteOnce, więc są dostępne tylko dla jednego zasobnika naraz. W przypadku woluminów magazynu, do których można uzyskiwać dostęp jednocześnie przez wiele zasobników, użyj plików usługi AKS Arc.
Pliki usługi AKS Arc, których można użyć do zainstalowania udziału SMB lub NFS w zasobnikach. Są one instalowane jako ReadWriteMany, dzięki czemu można udostępniać dane między wieloma węzłami i zasobnikami. Można je również zamontować jako ReadWriteOnce na podstawie specyfikacji PCV (oświadczenia trwałego woluminu).
Dynamiczne tworzenie woluminów trwałych dysku przy użyciu wbudowanej klasy magazynu
Klasa magazynu służy do definiowania sposobu dynamicznego tworzenia jednostki magazynu przy użyciu trwałego woluminu. Aby uzyskać więcej informacji na temat używania klas magazynu, zobacz Klasy magazynu Kubernetes.
W usłudze AKS Arc domyślna klasa magazynu jest tworzona domyślnie i używa interfejsu CSI do tworzenia woluminów opartych na dysku VHDX. Zasady odzyskiwania zapewniają usunięcie bazowego dysku VHDX po usunięciu trwałego woluminu, który go użył. Klasa magazynu konfiguruje również woluminy trwałe, które mają być rozszerzalne; Wystarczy edytować oświadczenie trwałego woluminu o nowym rozmiarze.
Aby wykorzystać tę klasę magazynu, utwórz element PVC i odpowiedni zasobnik, który odwołuje się do niego i używa go. Element PVC jest używany do automatycznej aprowizacji magazynu na podstawie klasy magazynu. PCV może użyć jednej ze wstępnie utworzonych klas magazynu lub zdefiniowanej przez użytkownika klasy magazynu, aby utworzyć dysk VHDX o żądanym rozmiarze. Podczas tworzenia definicji zasobnika element PVC jest określony w celu zażądania żądanego magazynu.
Tworzenie niestandardowej klasy magazynu dla dysków
Domyślna klasa magazynu jest odpowiednia dla najbardziej typowych scenariuszy. Jednak w niektórych przypadkach możesz utworzyć własną klasę magazynu, która przechowuje telewizory w określonej lokalizacji zamapowanej na określoną warstwę wydajności.
Jeśli masz obciążenia systemu Linux (zasobniki), musisz utworzyć niestandardową klasę magazynu z parametrem fsType: ext4
. To wymaganie dotyczy platformy Kubernetes w wersji 1.19 i 1.20 lub nowszej. W poniższym przykładzie przedstawiono niestandardową definicję klasy magazynu ze zdefiniowanym parametrem fsType
:
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
Jeśli tworzysz niestandardową klasę magazynu, możesz określić lokalizację, w której chcesz przechowywać telewizory. Jeśli podstawowa infrastruktura to Azure Stack HCI, ta nowa lokalizacja może być woluminem wspieranym przez dyski SSD/NVMe o wysokiej wydajności lub zoptymalizowany pod kątem kosztów wolumin wspierany przez dyski HDD.
Tworzenie niestandardowej klasy magazynu jest procesem dwuetapowym:
Utwórz nową ścieżkę magazynu przy użyciu
stack-hci-vm storagepath
poleceń cmdlet do tworzenia, wyświetlania i wyświetlania ścieżek magazynu w klastrze azure Stack HCI. Aby uzyskać więcej informacji na temat tworzenia ścieżki magazynu, zobacz ścieżka magazynu.W przypadku
$path
programu utwórz ścieżkę magazynu o nazwie$storagepathname
; na przykład C:\ClusterStorage\test-storagepath:az stack-hci-vm storagepath create --resource-group $resource_group --custom-location $customLocationID --name $storagepathname --path $path
Pobierz identyfikator zasobu ścieżki magazynu:
$storagepathID = az stack-hci-vm storagepath show --name $storagepathname --resource-group $resource_group --query "id" -o tsv
Utwórz nową niestandardową klasę magazynu przy użyciu nowej ścieżki magazynu.
Utwórz plik o nazwie sc-aks-hci-disk-custom.yaml, a następnie skopiuj manifest z następującego pliku YAML. Klasa magazynu jest taka sama jak domyślna klasa magazynu z wyjątkiem nowej
container
klasy magazynu . Użyj elementustorage path ID
utworzonego w poprzednim kroku dla elementucontainer
. W przypadkugroup
elementów ihostname
wykonaj zapytanie dotyczące domyślnej klasy magazynu, uruchamiająckubectl get storageclass default -o yaml
polecenie , a następnie użyj określonych wartości: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
Utwórz klasę magazynu za pomocą polecenia kubectl apply i określ plik sc-aks-hci-disk-custom.yaml :
$ kubectl apply -f sc-aks-hci-disk-custom.yaml storageclass.storage.k8s.io/aks-hci-disk-custom created