Použití ovladače Azure Disk Container Storage Interface (CSI) ve službě Azure Kubernetes Service (AKS)
Ovladač rozhraní CSI (Azure Disks Container Storage Interface) je ovladač kompatibilní se specifikací CSI používaný službou Azure Kubernetes Service (AKS) ke správě životního cyklu disku Azure.
CsI je standard pro zveřejnění libovolných systémů blokového a souborového úložiště pro kontejnerizované úlohy v Kubernetes. Díky přijetí a používání csI teď může AKS psát, nasazovat a iterovat moduly plug-in, aby zpřístupnil nové nebo vylepšené existující systémy úložiště v Kubernetes. Použití ovladačů CSI v AKS se vyhne tomu, že se nebudete muset dotýkat základního kódu Kubernetes a čekat na jeho cykly vydávání.
Pokud chcete vytvořit cluster AKS s podporou ovladačů CSI, přečtěte si téma Povolení ovladače CSI v AKS. Tento článek popisuje, jak používat ovladač CSI disku Azure verze 1.
Poznámka:
Ovladač CSI disku Azure v2 (Preview) zlepšuje škálovatelnost a snižuje latenci převzetí služeb při selhání podu. Používá sdílené disky ke zřízení 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 je zvolen při převzetí služeb při selhání podu. Ovladač CsI disku Azure v2 (Preview) také umožňuje doladit výkon. Pokud se chcete zúčastnit verze Preview, odešlete žádost: https://aka.ms/DiskCSIv2Preview. Tato verze Preview je poskytována bez smlouvy o úrovni služeb a občas můžete očekávat zásadní změny ve verzi Preview. 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 stromu odkazují na 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 CSI disku Azure
Kromě funkcí ovladače stromu podporuje ovladač CSI disku Azure následující funkce:
- Vylepšení výkonu během souběžného připojení a odpojení disku
- Ovladače ve stromové struktuře připojují nebo odpojují disky sériově, zatímco ovladače CSI připojují nebo odpojují disky v dávce. Pokud se k jednomu uzlu připojuje více disků, výrazně se zlepší.
- Podporují se ssd úrovně Premium v1 a v2.
PremiumV2_LRS
podporujeNone
pouze režim ukládání do mezipaměti.
- Podpora zónově redundantního úložiště (ZRS)
Premium_ZRS
,StandardSSD_ZRS
podporují se typy disků. Disk ZRS může být naplánovaný na uzlu zóny nebo mimo zónu bez omezení, že by měl být svazek disku umístěný 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á
- Klon svazku
- Změna velikosti diskové pv bez výpadků
Poznámka:
V závislosti na použité SKU virtuálního počítače může mít ovladač CSI disku Azure limit svazku pro jednotlivé uzly. 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ích podrobných limitů 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 (PV) představuje část úložiště zřízenou pro použití s pody Kubernetes. Pv může používat jeden nebo více podů a může být dynamicky nebo staticky zřízen. V tomto článku se dozvíte, jak dynamicky vytvářet 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í integrovaných tříd úložiště
Třída úložiště slouží k definování dynamického vytvoř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.
Pokud v AKS použijete ovladač CSI disku Azure, existují další dva integrované StorageClasses
ovladače úložiště Azure Disk CSI. Ostatní třídy úložiště CSI se vytvářejí společně s výchozími třídami úložiště ve stromu.
managed-csi
: K vytvoření spravovaného disku se používá místně redundantní úložiště SSD úrovně Azure Standard (LRS). Počínaje Kubernetes verze 1.29 v clusterech Azure Kubernetes Service (AKS) nasazených napříč několika zónami dostupnosti tato třída úložiště využívá zónově redundantní úložiště SSD úrovně Azure Standard (ZRS) k vytváření spravovaných disků.managed-csi-premium
: Používá Azure Premium LRS k vytvoření spravovaného disku. Efektivní od Kubernetes verze 1.29 v clusterech Azure Kubernetes Service (AKS) nasazených napříč několika zónami dostupnosti využívá tato třída úložiště azure Premium zónově redundantní úložiště (ZRS) k vytváření spravovaných disků.
Zásady uvolnění paměti v obou třídách úložiště zajišťují, že se základní disky Azure odstraní při odstranění příslušné pv. Třídy úložiště také konfigurují virtuální počítače tak, aby se rozšiřily. Stačí upravit trvalou deklaraci identity svazku (PVC) s novou velikostí.
Chcete-li tyto třídy úložiště použít, vytvořte PVC a odpovídající pod, který 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 jednu z předem vytvořených tříd úložiště nebo uživatelem definovanou třídu úložiště k vytvoření disku spravovaného v Azure pro požadovanou skladovou položku a velikost. Při vytváření definice podu je pvc určen k 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, že je disk správně připojený, spusťte následující příkaz a ověřte, že se ve výstupu zobrazí test.txt
soubor:
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 nejběžnější scénáře. 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 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.
Chcete-li tento scénář vyřešit, můžete použít volumeBindingMode: WaitForFirstConsumer
, což zpožďuje vazbu a zřizování PV, dokud pod, který používá PVC je vytvořen. Tímto způsobem je pv v souladu se zónou dostupnosti (nebo jinou topologií), 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 naše managed-csi
třída ú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 zadejte váš sc-azuredisk-csi-waitforfirstconsumer.yaml
soubor:
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í je to pravda).
Následující tabulka obsahuje podrobnosti o všech parametrech.
Název | Význam | Dostupná hodnota | Povinný | Default value |
---|---|---|---|---|
resourceGroup | Skupina prostředků pro ukládání snímků | EXISTUJÍCÍ SKUPINA PROSTŘEDKŮ | No | Pokud není zadaný, snímek se uloží ve stejné skupině prostředků jako zdrojové disky Azure. |
inkrementální | Pořízení úplného nebo přírůstkového snímku | true , false |
No | true |
značky | Značky disků Azure | Formát značky: 'key1=val1,key2=val2' | No | "" |
userAgent | Uživatelský agent používaný pro přisuzování využití zákazníka | No | Vygenerovaný uživatelský agent naformátovaný driverName/driverVersion compiler/version (OS-ARCH) |
|
subscriptionID | Zadejte ID předplatného Azure, ve kterém se vytvoří disky Azure. | ID předplatného Azure | No | Pokud není prázdný, resourceGroup musí být zadaný, incremental musí být nastaven jako false |
Vytvoření snímku svazku
Poznámka:
Než budete pokračovat, ujistěte se, že aplikace nezapisuje data na zdrojový disk.
V příkladu této funkce vytvořte třídu snímku 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
Nyní 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, že se snímek vytvořil správně, 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 založeného na snímku svazku
Nový PVC můžete vytvořit na základě snímku svazku. Použijte snímek vytvořený v předchozím kroku a vytvořte nový PVC a nový pod , který ho použije.
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 vytvořený před kontrolou obsahu 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í stále vidíme náš dříve vytvořený test.txt
soubor.
Klonování svazků
Klonovaný svazek se definuje 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ů. Abyste si to ukázali, vytvořte naklonovaný svazek dříve vytvořeného azuredisk-pvc
podu 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 trvalý svazek.
Poznámka:
Nová hodnota PV se nikdy nevytvořila k uspokojení deklarace identity. Místo toho se změní velikost existujícího svazku.
V AKS integrovaná managed-csi
třída úložiště již podporuje rozšíření, takže použijte PVC vytvořené dříve s touto třídou úložiště. PVC požádal o trvalý svazek 10-Gi. Můžete to ověřit 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ýš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šování 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 potvrďte, že došlo ke zvýšení velikosti 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 nárazového nárůstu disku na vyžádání umožňuje nárůsty disku vždy, když její potřeby překročí aktuální kapacitu. Tento model generuje další poplatky, kdykoli se disk rozsákne. Nárazové rozšíření na vyžádání je k dispozici pouze pro disky SSD úrovně Premium větší než 512 GiB. Další informace o discích SSD úrovně Premium zřízeném IOPS a propustnosti na disk najdete v tématu Velikost SSD úrovně Premium. Rozšíření založené na kreditech je také místem, kde se disk rozrůstá jenom v případě, že má v rámci svého kreditového kontejneru kumulované kredity. Při shlukování disku se negenerují další poplatky. Nárazové rozšíření založené na kreditech je dostupné jenom pro disky SSD úrovně Premium 512 GiB a menší a disky SSD úrovně Standard 1024 GiB a menší. Další informace o nárůstu na vyžádání najdete v tématu nárůstu na vyžádání.
Důležité
Výchozí managed-csi-premium
třída úložiště má zakázané nárazové nárůsty na vyžádání a využívá shlukování založené na kreditech. Všechny ssd úrovně Premium dynamicky vytvořené trvalou deklarací identity svazku založené na výchozí managed-csi-premium
třídě úložiště mají také zakázané nárazové zvýšení na vyžádání.
Pokud chcete vytvořit trvalý svazek SSD úrovně Premium s povoleným nárůstem na vyžádání, můžete vytvořit novou třídu úložiště s nastaveným parametrem enableBursting, jak true
je znázorněno v následující šabloně YAML. Další informace o povolení nárazového nárůstu na vyžádání najdete v tématu Nárůst na vyžádání. Další informace o vytvoření vlastní třídy úložiště s povoleným nárazovým nárůstem na vyžádání najdete v tématu Vytvoření škálovatelné spravované třídy CSI Premium Storage.
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žít kontejnery Windows, postupujte podle rychlého startu pro kontejnery Windows a přidejte fond uzlů Windows.
Jakmile máte fond uzlů Windows, můžete nyní použít předdefinované třídy úložiště, jako je managed-csi
. Můžete nasadit ukázkovou stavovou sadu založenou na Windows, která ukládá časová razítka do souboru data.txt
spuštěním následujícího příkazu kubectl apply :
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 službu Soubory Azure najdete v tématu Použití služby Soubory Azure s ovladačem CSI.
- Informace o použití ovladače CSI pro úložiště objektů blob v Azure najdete v tématu Použití služby Azure Blob Storage s ovladačem CSI.
- Další informace o osvědčených postupech úložiště najdete v tématu Osvědčené postupy pro ukládání a zálohování ve službě Azure Kubernetes Service.
- Další informace o řešeních úložiště založeném na discích najdete v tématu Řešení založená na discích v AKS.
Azure Kubernetes Service