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 vám umožní vyhnout se nutnosti zasahování do základního kódu Kubernetes a čekání 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.

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 hromadně. 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ímek
  • Klon svazku
  • Změna velikosti diskového PV bez výpadků

Poznámka:

V závislosti na SKU použitého virtuálního počítače může mít ovladač CSI disku Azure omezení počtu svazků 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ích podrobných limitů kapacity najdete v tématu Velikosti virtuálních počítačů pro obecné účely.

Používejte trvalé svazky CSI s disky Azure

Trvalý svazek (PV) představuje část úložiště určenou k použití s Kubernetes pods. 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í souběžně s clusterem a integrovanými výchozími třídami úložiště.

  • managed-csi: K vytvoření spravovaného disku se používá místně redundantní úložiště SSD úrovně Azure Standard (LRS). S účinností od verze Kubernetes 1.29, v clusterech služby Azure Kubernetes Service (AKS) nasazených napříč několika zónami dostupnosti, tato třída úložiště využívá úložiště Azure Standard SSD zónově redundantní (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 perzistentní požadavek na svazek (PVC) s novou velikostí.

Chcete-li tyto třídy úložiště použít, vytvořte PVC a odpovídající pod, který na ně odkazuje a využí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 specifikován 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ý Výchozí hodnota
skupina zdrojů Skupina prostředků pro ukládání snímků EXISTUJÍCÍ SKUPINA PROSTŘEDKŮ Ne 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 Ne true
značky Značky disků Azure Formát značky: 'key1=val1,key2=val2' Ne ""
uživatelský agent Uživatelský agent používaný pro přisuzování využití zákazníka Ne Vygenerovaný uživatelský agent naformátovaný driverName/driverVersion compiler/version (OS-ARCH)
identifikátor 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 nastaven jako false

Vytvořte snímek 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 tutoriálu, 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, které bylo vytvořeno dříve, tak, ž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í 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 to demonstrovali, vytvořte naklonovaný svazek z dříve vytvořenéhoazuredisk-pvc, a nový pod, který jej 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ý datový svazek o velikosti 10 GiB. 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

Rozšiřte PVC zvýšením pole spec.resources.requests.storage 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

Dynamické škálová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. Na vyžádání dočasné zvýšení výkonu je k dispozici pouze pro datové úložiště SSD úrovně Premium větší než 512 GiB. Další informace o zřízených IOPS a propustnosti prémiových SSD na disk viz Velikost prémiového SSD. Alternativně, kreditově založené burstování probíhá pouze tehdy, když má disk v rámci svého kreditového fondu nahromaděné burstové kredity. Kreditově založené navýšení výkonu disku negeneruje žádné další poplatky. Kreditové překročení kapacity je dostupné pouze pro SSD disky Premium o velikosti 512 GiB a menší a SSD disky Standard o velikosti 1024 GiB a menší. Další informace o funkci "on-demand bursting" najdete v tématu On-demand bursting.

Důležité

Výchozí úložná třída managed-csi-premium má zakázané burstování na vyžádání a využívá burstování založené na kreditech. Všechny SSD úrovně Premium, které jsou dynamicky vytvořeny na základě trvalého požadavku na svazek, založené na výchozí managed-csi-premium třídě úložiště, mají také zakázáno průběžné zvyšování výkonu 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 parametrem enableBursting nastaveným na true, jak je znázorněno v následující šabloně YAML. Další informace o povolení režimu automatického navýšení výkonu na vyžádání najdete v tématu Automatické navýšení výkonu 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č CSI 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