Použití ovladače rozhraní AZURE Disk Container Storage Interface (CSI) v Azure Kubernetes Service (AKS)

Ovladač rozhraní CSI (Azure Disks Container Storage Interface) je ovladač kompatibilní se specifikací CSI, který používá služba Azure Kubernetes Service (AKS) ke správě životního cyklu disků Azure.

CSI je standard pro vystavení libovolných systémů úložiště bloků a souborů kontejnerizovaným úlohám v Kubernetes. Díky přijetí a použití CSI teď AKS může zapisovat, nasazovat a iterovat moduly plug-in, aby se v Kubernetes zpřístupnily nové nebo vylepšené systémy úložiště. Při použití ovladačů CSI v AKS se nemusíte dotýkat základního kódu Kubernetes a čekat na jeho cykly vydání.

Informace o vytvoření clusteru AKS s podporou ovladače CSI najdete v tématu Povolení ovladače CSI v AKS. Tento článek popisuje, jak používat ovladač Azure Disk CSI verze 1.

Poznámka

Ovladač Azure Disk CSI v2 (Preview) zlepšuje škálovatelnost a snižuje latenci převzetí služeb při selhání podů. Používá sdílené disky ke zřizování replik příloh na více uzlech clusteru a integruje se s plánovačem podů, aby se zajistilo, že uzel s replikou přílohy bude zvolen při převzetí služeb při selhání podu. Ovladač Azure Disk CSI v2 (Preview) také poskytuje možnost vyladění výkonu. Pokud máte zájem o účast ve verzi Preview, odešlete žádost: https://aka.ms/DiskCSIv2Preview. Tato verze Preview se poskytuje bez smlouvy o úrovni služeb a ve verzi Preview můžete občas očekávat zásadní změny. Verze Preview se nedoporučuje pro produkční úlohy. Další informace najdete v dodatečných podmínkách použití pro verze Preview v Microsoft Azure.

Poznámka

Ovladače ve stromové struktuře označují aktuální ovladače úložiště, které jsou součástí základního kódu Kubernetes, a nové ovladače CSI, které jsou moduly plug-in.

Funkce ovladače Azure Disk CSI

Kromě funkcí ovladačů ve stromové struktuře podporuje ovladač CsI disku Azure následující funkce:

  • Vylepšení výkonu při souběžném připojování a odpojování disků
    • Ovladače ve stromu připojují nebo odpojí disky sériově, zatímco ovladače CSI připojují nebo odpojí disky v dávkách. Pokud se k jednomu uzlu připojuje více disků, dojde k výraznému zlepšení.
  • Podporují se SSD úrovně Premium v1 a v2.
    • PremiumV2_LRS podporuje None pouze režim ukládání do mezipaměti.
  • Podpora disků zónově redundantního úložiště (ZRS)
    • Premium_ZRS, StandardSSD_ZRS typy disků jsou podporované. Disk ZRS je možné naplánovat na uzel zóny nebo mimo zónu, aniž by se diskový svazek měl nacházet ve stejné zóně jako daný uzel. Další informace, včetně podporovaných oblastí, najdete v tématu Zónově redundantní úložiště pro spravované disky.
  • Snímková
  • Klonování svazku
  • Změna velikosti pv disku bez výpadků

Poznámka

V závislosti na SKU virtuálního počítače, který se používá, může mít ovladač CsI disku Azure limit svazku na uzel. U některých výkonných virtuálních počítačů (například 16 jader) je limit 64 svazků na uzel. Pokud chcete zjistit limit na skladovou položku virtuálního počítače, projděte si sloupec Maximální počet datových disků pro každou nabízenou skladovou položku virtuálního počítače. Seznam nabízených skladových položek virtuálních počítačů a jejich odpovídající podrobné limity kapacity najdete v tématu Velikosti virtuálních počítačů pro obecné účely.

Použití trvalých svazků CSI s disky Azure

Trvalý svazek představuje část úložiště, která je zřízená pro použití s pody Kubernetes. SOUČHODNOTA může být používána jedním nebo více pody a může být dynamicky nebo staticky zřízena. V tomto článku se dozvíte, jak dynamicky vytvářet virtuální počítače s diskem Azure pro použití jedním podem v clusteru AKS. Informace o statickém zřizování najdete v tématu Vytvoření statického svazku s disky Azure.

Další informace o svazcích Kubernetes najdete v tématu Možnosti úložiště pro aplikace v AKS.

Dynamické vytváření virtuálních počítačů s disky Azure pomocí předdefinovaných tříd úložiště

Třída úložiště slouží k definování dynamického vytváření jednotky úložiště s trvalým svazkem. Další informace o třídách úložiště Kubernetes najdete v tématu Třídy úložiště Kubernetes.

Když použijete ovladač Azure Disk CSI ve službě AKS, existují dva další integrované StorageClasses nástroje, které používají ovladač úložiště Azure Disk CSI. Ostatní třídy úložiště CSI se vytvářejí s clusterem společně s výchozími třídami úložiště ve stromové struktuře.

  • managed-csi: K vytvoření spravovaného disku používá místně redundantní úložiště Azure SSD úrovně Standard (LRS).
  • managed-csi-premium: Používá Azure Premium LRS k vytvoření spravovaného disku.

Zásada uvolnění paměti v obou třídách úložiště zajišťuje, že se při odstranění příslušného SOUČHODNOTA odstraní základní disky Azure. Třídy úložiště také konfiguruje virtuální počítače tak, aby byly rozšiřitelné. Stačí upravit deklaraci trvalého svazku (PVC) s novou velikostí.

Pokud chcete tyto třídy úložiště použít, vytvořte PVC a odpovídající pod, který na ně odkazuje a používá je. Pvc se používá k automatickému zřizování úložiště na základě třídy úložiště. Pvc může použít některou z předem vytvořených tříd úložiště nebo třídu úložiště definovanou uživatelem k vytvoření disku spravovaného v Azure pro požadovanou skladovou položku a velikost. Když vytvoříte definici podu, zadává se pvc pro vyžádání požadovaného úložiště.

Spuštěním příkazu kubectl apply vytvořte ukázkový pod a odpovídající pvc:

kubectl apply -f https://raw.githubusercontent.com/kubernetes-sigs/azuredisk-csi-driver/master/deploy/example/pvc-azuredisk-csi.yaml
kubectl apply -f https://raw.githubusercontent.com/kubernetes-sigs/azuredisk-csi-driver/master/deploy/example/nginx-pod-azuredisk.yaml

Výstup příkazu se podobá následujícímu příkladu:

persistentvolumeclaim/pvc-azuredisk created
pod/nginx-azuredisk created

Jakmile je pod ve spuštěném stavu, spuštěním následujícího příkazu vytvořte nový soubor s názvem test.txt.

kubectl exec nginx-azuredisk -- touch /mnt/azuredisk/test.txt

Pokud chcete ověřit správné připojení disku, spusťte následující příkaz a ověřte, že se soubor zobrazuje test.txt ve výstupu:

kubectl exec nginx-azuredisk -- ls /mnt/azuredisk

lost+found
outfile
test.txt

Vytvoření vlastní třídy úložiště

Výchozí třídy úložiště jsou vhodné pro většinu běžných scénářů. V některých případech můžete chtít mít vlastní třídu úložiště přizpůsobenou vlastními parametry. Můžete například chtít změnit volumeBindingMode třídu .

Můžete použít volumeBindingMode: Immediate třídu, která zaručuje, že k ní dojde okamžitě po vytvoření PVC. Pokud jsou fondy uzlů omezené topologií, například při použití zón dostupnosti, budou virtuální počítače vázané nebo zřízené bez znalosti požadavků na plánování podu.

Pokud chcete tento scénář vyřešit, můžete použít , volumeBindingMode: WaitForFirstConsumerkterý zpozdí vazbu a zřizování PV, dokud se nevytvořil pod, který používá PVC. Tímto způsobem se SOUČHODNOTA vyhoví a zřídí se v zóně dostupnosti (nebo jiné topologii), která je určená omezeními plánování podu. Výchozí třídy úložiště používají volumeBindingMode: WaitForFirstConsumer třídu .

Vytvořte soubor s názvem sc-azuredisk-csi-waitforfirstconsumer.yamla vložte následující manifest. Třída úložiště je stejná jako třída managed-csi úložiště, ale s jinou volumeBindingMode třídou.

kind: StorageClass
apiVersion: storage.k8s.io/v1
metadata:
  name: azuredisk-csi-waitforfirstconsumer
provisioner: disk.csi.azure.com
parameters:
  skuname: StandardSSD_LRS
allowVolumeExpansion: true
reclaimPolicy: Delete
volumeBindingMode: WaitForFirstConsumer

Vytvořte třídu úložiště spuštěním příkazu kubectl apply a zadáním sc-azuredisk-csi-waitforfirstconsumer.yaml souboru:

kubectl apply -f sc-azuredisk-csi-waitforfirstconsumer.yaml

Výstup příkazu se podobá následujícímu příkladu:

storageclass.storage.k8s.io/azuredisk-csi-waitforfirstconsumer created

Snímky svazků

Ovladač CsI disku Azure podporuje vytváření snímků trvalých svazků. V rámci této funkce může ovladač provádět úplné nebo přírůstkové snímky v závislosti na hodnotě nastavené v parametru incremental (ve výchozím nastavení to platí).

Následující tabulka obsahuje podrobnosti o všech parametrech.

Name Význam Dostupná hodnota Povinné Výchozí hodnota
resourceGroup Skupina prostředků pro ukládání snímků EXISTUJÍCÍ SKUPINA PROSTŘEDKŮ Ne Pokud ho nezadáte, snímek se uloží do stejné skupiny prostředků jako zdrojové disky Azure.
Přírůstkové Pořízení úplného nebo přírůstkového snímku true, false Ne true
tags Značky disků Azure Formát značky: 'key1=val1,key2=val2' Ne ""
Useragent Uživatelský agent používaný k přisuzování využití zákazníkem Ne Vygenerovaný uživatelský agent ve formátu driverName/driverVersion compiler/version (OS-ARCH)
ID předplatného Zadejte ID předplatného Azure, ve kterém se vytvoří disky Azure. ID předplatného Azure Ne Pokud není prázdné, resourceGroup musí být zadané, incremental musí být nastaveny jako false

Vytvoření snímku svazku

Poznámka

Než budete pokračovat, ujistěte se, že aplikace nezapisuje data na zdrojový disk.

Jako příklad této funkce vytvořte třídu snímků svazku pomocí příkazu kubectl apply :

kubectl apply -f https://raw.githubusercontent.com/kubernetes-sigs/azuredisk-csi-driver/master/deploy/example/snapshot/storageclass-azuredisk-snapshot.yaml

Výstup příkazu se podobá následujícímu příkladu:

volumesnapshotclass.snapshot.storage.k8s.io/csi-azuredisk-vsc created

Teď vytvoříme snímek svazku z pvc, který jsme dynamicky vytvořili na začátku tohoto kurzu. pvc-azuredisk

kubectl apply -f https://raw.githubusercontent.com/kubernetes-sigs/azuredisk-csi-driver/master/deploy/example/snapshot/azuredisk-volume-snapshot.yaml

Výstup příkazu se podobá následujícímu příkladu:

volumesnapshot.snapshot.storage.k8s.io/azuredisk-volume-snapshot created

Pokud chcete ověřit správné vytvoření snímku, spusťte následující příkaz:

kubectl describe volumesnapshot azuredisk-volume-snapshot

Výstup příkazu se podobá následujícímu příkladu:

Name:         azuredisk-volume-snapshot
Namespace:    default
Labels:       <none>
Annotations:  API Version:  snapshot.storage.k8s.io/v1
Kind:         VolumeSnapshot
Metadata:
  Creation Timestamp:  2020-08-27T05:27:58Z
  Finalizers:
    snapshot.storage.kubernetes.io/volumesnapshot-as-source-protection
    snapshot.storage.kubernetes.io/volumesnapshot-bound-protection
  Generation:        1
  Resource Version:  714582
  Self Link:         /apis/snapshot.storage.k8s.io/v1/namespaces/default/volumesnapshots/azuredisk-volume-snapshot
  UID:               dd953ab5-6c24-42d4-ad4a-f33180e0ef87
Spec:
  Source:
    Persistent Volume Claim Name:  pvc-azuredisk
  Volume Snapshot Class Name:      csi-azuredisk-vsc
Status:
  Bound Volume Snapshot Content Name:  snapcontent-dd953ab5-6c24-42d4-ad4a-f33180e0ef87
  Creation Time:                       2020-08-31T05:27:59Z
  Ready To Use:                        true
  Restore Size:                        10Gi
Events:                                <none>

Vytvoření nového pvc na základě snímku svazku

Můžete vytvořit nový pvc založený na snímku svazku. Použijte snímek vytvořený v předchozím kroku a vytvořte nový pvc a nový pod , abyste ho mohli využívat.

kubectl apply -f https://raw.githubusercontent.com/kubernetes-sigs/azuredisk-csi-driver/master/deploy/example/snapshot/pvc-azuredisk-snapshot-restored.yaml
kubectl apply -f https://raw.githubusercontent.com/kubernetes-sigs/azuredisk-csi-driver/master/deploy/example/snapshot/nginx-pod-restored-snapshot.yaml

Výstup příkazu se podobá následujícímu příkladu:

persistentvolumeclaim/pvc-azuredisk-snapshot-restored created
pod/nginx-restored created

Nakonec se ujistěme, že se jedná o stejný pvc, který jste vytvořili dříve, tím, že zkontrolujeme obsah spuštěním následujícího příkazu:

kubectl exec nginx-restored -- ls /mnt/azuredisk

Výstup příkazu se podobá následujícímu příkladu:

lost+found
outfile
test.txt

Podle očekávání se náš dříve vytvořený test.txt soubor pořád zobrazuje.

Klonování svazků

Klonovaný svazek je definovaný jako duplikát existujícího svazku Kubernetes. Další informace o klonování svazků v Kubernetes najdete v koncepční dokumentaci ke klonování svazků.

Ovladač CSI pro disky Azure podporuje klonování svazků. Předveďte si to tak, že vytvoříte naklonovaný svazekdříve vytvořenéhoazuredisk-pvc a nový pod, který ho bude využívat.

kubectl apply -f https://raw.githubusercontent.com/kubernetes-sigs/azuredisk-csi-driver/master/deploy/example/cloning/pvc-azuredisk-cloning.yaml
kubectl apply -f https://raw.githubusercontent.com/kubernetes-sigs/azuredisk-csi-driver/master/deploy/example/cloning/nginx-pod-restored-cloning.yaml

Výstup příkazu se podobá následujícímu příkladu:

persistentvolumeclaim/pvc-azuredisk-cloning created
pod/nginx-restored-cloning created

Obsah klonovaného svazku můžete ověřit spuštěním následujícího příkazu a potvrzením vytvoření souboru test.txt :

kubectl exec nginx-restored-cloning -- ls /mnt/azuredisk

Výstup příkazu se podobá následujícímu příkladu:

lost+found
outfile
test.txt

Změna velikosti trvalého svazku bez výpadků

Můžete požádat o větší objem pro PVC. Upravte objekt PVC a zadejte větší velikost. Tato změna aktivuje rozšíření podkladového svazku, který zálohuje SOUČHODNOTA.

Poznámka

K uspokojení deklarace identity se nikdy nevytvořil nový SOUČHODNOTA. Místo toho se změní velikost existujícího svazku.

Integrovaná třída úložiště už v managed-csi AKS podporuje rozšíření, proto použijte dříve vytvořený pvc s touto třídou úložiště. Pvc požadoval trvalý svazek 10 Gi. Potvrzení můžete provést spuštěním následujícího příkazu:

kubectl exec -it nginx-azuredisk -- df -h /mnt/azuredisk

Výstup příkazu se podobá následujícímu příkladu:

Filesystem      Size  Used Avail Use% Mounted on
/dev/sdc        9.8G   42M  9.8G   1% /mnt/azuredisk

Rozbalte PVC zvětšením spec.resources.requests.storage pole spuštěním následujícího příkazu:

kubectl patch pvc pvc-azuredisk --type merge --patch '{"spec": {"resources": {"requests": {"storage": "15Gi"}}}}'

Poznámka

Zmenšení trvalých svazků se v současné době nepodporuje. Pokus o opravu existujícího pvc s menší velikostí, než je aktuální, vede k následující chybové zprávě: The persistentVolumeClaim "pvc-azuredisk" is invalid: spec.resources.requests.storage: Forbidden: field can not be less than previous value.

Výstup příkazu se podobá následujícímu příkladu:

persistentvolumeclaim/pvc-azuredisk patched

Spuštěním následujícího příkazu ověřte, že se zvětšila velikost svazku:

kubectl get pv

Výstup příkazu se podobá následujícímu příkladu:

NAME                                       CAPACITY   ACCESS MODES   RECLAIM POLICY   STATUS   CLAIM                                     STORAGECLASS   REASON   AGE
pvc-391ea1a6-0191-4022-b915-c8dc4216174a   15Gi       RWO            Delete           Bound    default/pvc-azuredisk                     managed-csi             2d2h
(...)

A po několika minutách spusťte následující příkazy, abyste potvrdili velikost pvc:

kubectl get pvc pvc-azuredisk

Výstup příkazu se podobá následujícímu příkladu:

NAME            STATUS   VOLUME                                     CAPACITY   ACCESS MODES   STORAGECLASS   AGE
pvc-azuredisk   Bound    pvc-391ea1a6-0191-4022-b915-c8dc4216174a   15Gi       RWO            managed-csi    2d2h

Spuštěním následujícího příkazu potvrďte velikost disku uvnitř podu:

kubectl exec -it nginx-azuredisk -- df -h /mnt/azuredisk

Výstup příkazu se podobá následujícímu příkladu:

Filesystem      Size  Used Avail Use% Mounted on
/dev/sdc         15G   46M   15G   1% /mnt/azuredisk

Shlukování na vyžádání

Model shlukování disků na vyžádání umožňuje nárazové shluky disků vždy, když jeho potřeby překročí aktuální kapacitu. Tento model generuje dodatečné poplatky pokaždé, když se disk roztrhne. Shlukování na vyžádání je k dispozici pouze pro disky SSD úrovně Premium větší než 512 GiB. Další informace o zřízených IOPS a propustnosti disků SSD úrovně Premium najdete v tématu Velikost disků SSD úrovně Premium. Případně je shlukování založené na kreditech místem, kde se disk shlukuje jenom v případě, že se v jeho kreditech nahromadí kredity. Shlukování založené na kreditech negeneruje při shlukování disku žádné další poplatky. Shlukování založené na kreditech je k dispozici pouze pro disky SSD úrovně Premium 512 GiB a menší a disky SSD úrovně Standard 1024 GiB a menší. Další informace o shlukování na vyžádání najdete v tématu Shlukování na vyžádání.

Důležité

Výchozí managed-csi-premium třída úložiště má shlukování na vyžádání zakázané a používá shlukování založené na kreditech. Všechny disky SSD úrovně Premium, které se dynamicky vytvářejí z deklarace trvalého svazku založené na výchozí managed-csi-premium třídě úložiště, mají také zakázané shlukování na vyžádání.

Pokud chcete vytvořit trvalý svazek SSD úrovně Premium s povoleným shlukováním na vyžádání , můžete vytvořit novou třídu úložiště s parametrem enableBursting nastaveným na true , jak je znázorněno v následující šabloně YAML. Další informace o povolení shlukování na vyžádání najdete v tématu Shlukování na vyžádání. Další informace o vytvoření vlastní třídy úložiště s povoleným shlukováním na vyžádání najdete v tématu Vytvoření Premium Storage třídy Premium Storage spravovaných csi s možností nárazového škálování.

apiVersion: storage.k8s.io/v1
kind: StorageClass
metadata:
  name: burstable-managed-csi-premium
provisioner: disk.csi.azure.com
parameters:
  skuname: Premium_LRS
  enableBursting: "true"
reclaimPolicy: Delete
volumeBindingMode: WaitForFirstConsumer
allowVolumeExpansion: true

Kontejnery Windows

Ovladač rozhraní úložiště kontejnerů disku Azure podporuje uzly a kontejnery Windows. Pokud chcete používat kontejnery Windows, postupujte podle rychlého startu pro kontejnery Windows a přidejte fond uzlů Windows.

Jakmile budete mít fond uzlů Windows, můžete teď používat předdefinované třídy úložiště, jako je managed-csi. Spuštěním následujícího příkazu kubectl apply můžete nasadit ukázkovou stavovou sadu založenou na Systému Windows, která do souboru data.txt uloží časová razítka:

kubectl apply -f https://raw.githubusercontent.com/kubernetes-sigs/azuredisk-csi-driver/master/deploy/example/windows/statefulset.yaml

Výstup příkazu se podobá následujícímu příkladu:

statefulset.apps/busybox-azuredisk created

Pokud chcete ověřit obsah svazku, spusťte následující příkaz:

kubectl exec -it busybox-azuredisk-0 -- cat c:\\mnt\\azuredisk\\data.txt # on Linux/MacOS Bash
kubectl exec -it busybox-azuredisk-0 -- cat c:\mnt\azuredisk\data.txt # on Windows Powershell/CMD

Výstup příkazu se podobá následujícímu příkladu:

2020-08-27 08:13:41Z
2020-08-27 08:13:42Z
2020-08-27 08:13:44Z
(...)

Další kroky