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
podporujeNone
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: WaitForFirstConsumer
který 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.yaml
a 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
- Informace o použití ovladače CSI pro Azure Files najdete v tématu Použití Azure Files s ovladačem CSI.
- Informace o použití ovladače CSI pro službu Azure Blob Storage najdete v tématu Použití služby Azure Blob Storage s ovladačem CSI.
- Další informace o osvědčených postupech pro úložiště najdete v tématu Osvědčené postupy pro úložiště a zálohy v Azure Kubernetes Service.
- Další informace o řešeních diskových úložišť najdete v tématu Řešení založená na disku v AKS.