Sdílet prostřednictvím


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 podporuje None 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.yamla 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