Az Azure Disk Container Storage Interface (CSI) illesztőprogram használata a Azure Kubernetes Service (AKS) szolgáltatásban

Az Azure Disks Container Storage Interface (CSI) illesztőprogram egy CSI specifikációnak megfelelő illesztőprogram, amelyet a Azure Kubernetes Service (AKS) használ az Azure Disk életciklusának kezeléséhez.

A CSI egy standard, amely tetszőleges blokk- és fájlrendszereket tárhat fel tárolóalapú számítási feladatok számára a Kubernetesen. A CSI alkalmazásával és használatával az AKS mostantól képes beépülő modulok írására, üzembe helyezésére és iterálására a Kubernetes új vagy meglévő tárolórendszereinek elérhetővé tételéhez. Ha CSI-illesztőprogramokat használ az AKS-ben, nem kell megérintenie a kubernetes-kódot, és várnia kell a kiadási ciklusokra.

A CSI-illesztő támogatásával rendelkező AKS-fürt létrehozásához lásd: CSI-illesztőprogram engedélyezése az AKS-ben. Ez a cikk az Azure Disk CSI-illesztőprogram 1-es verziójának használatát ismerteti.

Megjegyzés

Az Azure Disk CSI driver v2 (előzetes verzió) javítja a méretezhetőséget, és csökkenti a pod feladatátvételi késését. Megosztott lemezeket használ a mellékletreplikák több fürtcsomóponton való kiépítéséhez, és integrálható a podütemezővel annak érdekében, hogy a pod feladatátvételekor egy mellékletreplikát tartalmazó csomópont legyen kiválasztva. Az Azure Disk CSI driver v2 (előzetes verzió) a teljesítmény finomhangolását is lehetővé teszi. Ha részt szeretne venni az előzetes verzióban, küldjön egy kérést: https://aka.ms/DiskCSIv2Preview. Ez az előzetes verzió szolgáltatásiszint-szerződés nélkül érhető el, és időnként kompatibilitástörő változásokra számíthat az előzetes verzióban. Az előzetes verzió éles számítási feladatokhoz nem ajánlott. További információ: Kiegészítő használati feltételek a Microsoft Azure előzetes verziójú termékeihez.

Megjegyzés

A fán belüli illesztőprogramok a kubernetes-kód részét képező aktuális tárolóillesztőkre utalnak, szemben az új CSI-illesztőprogramokkal, amelyek beépülő modulok.

Az Azure Disk CSI illesztőprogram-funkciói

Az Azure Disk CSI-illesztőprogram a fa illesztőfunkciói mellett a következő funkciókat is támogatja:

  • Teljesítménybeli fejlesztések a lemezek egyidejű csatlakoztatása és leválasztása során
    • A faillesztők sorosan csatolják vagy leválasztják a lemezeket, míg a CSI-illesztőprogramok kötegben csatolják vagy leválasztják a lemezeket. Jelentős javulás tapasztalható, ha több lemez csatlakozik egy csomóponthoz.
  • A prémium SSD v1 és v2 támogatott.
    • PremiumV2_LRScsak a gyorsítótárazási módot támogatja None
  • Zónaredundáns tárolás (ZRS) lemeztámogatása
    • Premium_ZRS, StandardSSD_ZRS a lemeztípusok támogatottak. A ZRS-lemez ütemezhető a zónán vagy a nem zónacsomóponton anélkül, hogy a lemezkötetnek ugyanabban a zónában kellene lennie, mint egy adott csomópontnak. További információ, beleértve a támogatott régiókat is, lásd: Zónaredundáns tárolás felügyelt lemezekhez.
  • Pillanatkép
  • Kötet klónozása
  • Lemez MÉ-ének átméretezése állásidő nélkül

Megjegyzés

A használt virtuálisgép-termékváltozattól függően előfordulhat, hogy az Azure Disk CSI-illesztő csomópontonkénti kötetkorlátot használ. Egyes nagy teljesítményű virtuális gépek (például 16 mag) esetében a korlát csomópontonként 64 kötet. A virtuálisgép-termékváltozatonkénti korlát azonosításához tekintse át az egyes kínált virtuálisgép-termékváltozatok Maximális adatlemezek oszlopát. A kínált virtuálisgép-termékváltozatok listáját és a hozzájuk tartozó részletes kapacitáskorlátokat lásd: Általános célú virtuálisgép-méretek.

ÁLLANDÓ CSI-kötetek használata Azure Disks használatával

Az állandó kötet (PV) egy kubernetes-podokkal való használatra kiosztott tárterületet jelöl. A PV-t egy vagy több pod is használhatja, és dinamikusan vagy statikusan kiosztható. Ez a cikk bemutatja, hogyan hozhat létre dinamikusan PV-ket azure-lemezzel, amelyeket egyetlen pod használhat egy AKS-fürtben. A statikus kiépítéssel kapcsolatban lásd: Statikus kötet létrehozása Az Azure Disks használatával.

A Kubernetes-kötetekkel kapcsolatos további információkért lásd: Tárolási lehetőségek alkalmazásokhoz az AKS-ben.

Azure Disks PV-k dinamikus létrehozása a beépített tárolóosztályok használatával

A tárolási osztály határozza meg, hogyan jön létre dinamikusan egy tárolóegység egy állandó kötettel. A Kubernetes-tárolóosztályokkal kapcsolatos további információkért lásd: Kubernetes-tárolóosztályok.

Ha az Azure Disk CSI-illesztőprogramot használja az AKS-en StorageClasses , két további beépített eszköz is használható az Azure Disk CSI-tárolóillesztővel. A többi CSI-tárolóosztály a fürttel együtt jön létre a fán belüli alapértelmezett tárolási osztályokkal együtt.

  • managed-csi: Az Azure Standard SSD helyileg redundáns tárolást (LRS) használja egy felügyelt lemez létrehozásához.
  • managed-csi-premium: Az Azure Premium LRS használatával hoz létre egy felügyelt lemezt.

A visszaigénylési szabályzat mindkét tárolási osztályban biztosítja, hogy a mögöttes Azure-lemezek törlődnek a megfelelő PV törlésekor. A tárolóosztályok a virtuális gépek bővíthetőségét is konfigurálják. Csak szerkesztenie kell az állandó kötetjogcímet (PVC) az új mérettel.

Ezeknek a tárolási osztályoknak a használatához hozzon létre egy PVC-t és a megfelelő podot, amely hivatkozik rájuk, és használja őket. A PVC-t a tárolóosztályon alapuló tárolás automatikus kiépítésére használják. A PVC az egyik előre létrehozott tárolóosztályt vagy felhasználó által definiált tárolóosztályt használhatja egy Azure által felügyelt lemez létrehozásához a kívánt termékváltozathoz és mérethez. Poddefiníció létrehozásakor a PVC meg van adva a kívánt tároló igényléséhez.

Hozzon létre egy példa podot és a megfelelő PVC-t a kubectl apply parancs futtatásával:

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

A parancs kimenete a következő példához hasonló:

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

Miután a pod futó állapotban van, futtassa a következő parancsot egy nevű új fájl test.txtlétrehozásához.

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

A lemez megfelelő csatlakoztatásának ellenőrzéséhez futtassa a következő parancsot, és ellenőrizze, hogy a fájl megjelenik-e test.txt a kimenetben:

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

lost+found
outfile
test.txt

Egyéni tárolóosztály létrehozása

Az alapértelmezett tárolási osztályok a leggyakoribb forgatókönyvekhez használhatók. Bizonyos esetekben előfordulhat, hogy saját tárolóosztályt szeretne testre szabni a saját paramétereivel. Előfordulhat például, hogy módosítani szeretné az osztályt volumeBindingMode .

Használhat olyan osztályt volumeBindingMode: Immediate , amely garantálja, hogy a PVC létrehozása után azonnal bekövetkezik. Ha a csomópontkészletek topológiája korlátozott, például rendelkezésre állási zónák használatakor a virtuális gépek a pod ütemezési követelményeinek ismerete nélkül lesznek megkötve vagy kiépítve.

A forgatókönyv megoldásához használhatja volumeBindingMode: WaitForFirstConsumera parancsot, amely késlelteti a PV kötését és kiépítését, amíg létre nem jön egy POD, amely a PVC-t használja. Így a PV megfelel és ki van építve a pod ütemezési kényszerei által meghatározott rendelkezésre állási zónában (vagy más topológiában). Az alapértelmezett tárolási osztályok osztályt használnak volumeBindingMode: WaitForFirstConsumer .

Hozzon létre egy nevű fájlt sc-azuredisk-csi-waitforfirstconsumer.yaml, majd illessze be a következő jegyzékfájlt. A tárolási osztály megegyezik a tárolási osztályunkkal managed-csi , de egy másik volumeBindingMode osztálysal.

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

Hozza létre a storage osztályt a kubectl apply parancs futtatásával, és adja meg a sc-azuredisk-csi-waitforfirstconsumer.yaml fájlt:

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

A parancs kimenete a következő példához hasonló:

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

Kötetpillanatképek

Az Azure Disk CSI-illesztő támogatja az állandó kötetek pillanatképeinek létrehozását. Ennek a képességnek a részeként az illesztőprogram teljes vagy növekményes pillanatképeket is képes végrehajtani a incremental paraméterben beállított értéktől függően (alapértelmezés szerint ez igaz).

Az alábbi táblázat az összes paraméter részleteit tartalmazza.

Name Értelmezés Elérhető érték Kötelező Alapértelmezett érték
resourceGroup Erőforráscsoport pillanatképek tárolásához MEGLÉVŐ ERŐFORRÁSCSOPORT Nem Ha nincs megadva, a pillanatkép ugyanabban az erőforráscsoportban lesz tárolva, mint a forrás Azure Disks
Növekményes Teljes vagy növekményes pillanatkép készítése true, false Nem true
tags Azure Disks-címkék Címkeformátum: 'key1=val1,key2=val2' Nem ""
Useragent Ügyfélhasználat-hozzárendeléshez használt felhasználói ügynök Nem Generált useragent formázva driverName/driverVersion compiler/version (OS-ARCH)
subscriptionID Adja meg az Azure-előfizetés azonosítóját, ahol az Azure Disks létrejön Azure-előfizetés azonosítója Nem Ha nem üres, resourceGroup meg kell adni, incremental meg kell adni false

Kötet pillanatképének létrehozása

Megjegyzés

Mielőtt továbblép, győződjön meg arról, hogy az alkalmazás nem ír adatokat a forráslemezre.

Erre a képességre példaként hozzon létre egy kötet-pillanatkép-osztályt a kubectl apply paranccsal:

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

A parancs kimenete a következő példához hasonlít:

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

Most hozzunk létre egy mennyiségi pillanatképet a PVC-ből, amelyet dinamikusan hoztunk létre az oktatóanyag elején. pvc-azuredisk

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

A parancs kimenete a következő példához hasonlít:

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

A pillanatkép helyes létrehozásának ellenőrzéséhez futtassa a következő parancsot:

kubectl describe volumesnapshot azuredisk-volume-snapshot

A parancs kimenete a következő példához hasonlít:

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>

Új PVC létrehozása kötet-pillanatkép alapján

Létrehozhat egy új PVC-t a kötet pillanatképe alapján. Használja az előző lépésben létrehozott pillanatképet, és hozzon létre egy új PVC-t és egy új podot a felhasználáshoz.

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

A parancs kimenete a következő példához hasonlít:

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

Végül ellenőrizze, hogy ugyanaz a PVC-e, amelyet korábban létrehozott. Ehhez ellenőrizze a tartalmat a következő parancs futtatásával:

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

A parancs kimenete a következő példához hasonlít:

lost+found
outfile
test.txt

A vártnak megfelelően továbbra is láthatjuk a korábban létrehozott test.txt fájlt.

Kötetek klónozása

A klónozott kötet egy meglévő Kubernetes-kötet duplikáltjaként van definiálva. A Kubernetesben a kötetek klónozásával kapcsolatos további információkért tekintse meg a kötet klónozásának fogalmi dokumentációját.

Az Azure Disks CSI-illesztőprogramja támogatja a kötet klónozását. A bemutatóhoz hozzon létre egy klónozott kötetet a korábban létrehozottazuredisk-pvc és egy új podot a felhasználáshoz.

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

A parancs kimenete a következő példához hasonlít:

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

A klónozott kötet tartalmát az alábbi parancs futtatásával és a fájl test.txt létrehozásának megerősítésével ellenőrizheti:

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

A parancs kimenete a következő példához hasonlít:

lost+found
outfile
test.txt

Állandó kötet átméretezése állásidő nélkül

A PVC-hez nagyobb kötetet kérhet. Szerkessze a PVC-objektumot, és adjon meg egy nagyobb méretet. Ez a módosítás elindítja a mögöttes kötet kiterjesztését, amely a PV-t háttérbe iktatja.

Megjegyzés

A rendszer soha nem hoz létre új PV-t a jogcím kielégítése érdekében. Ehelyett a rendszer átméretez egy meglévő kötetet.

Az AKS-ben a beépített managed-csi tárolási osztály már támogatja a bővítést, ezért használja a korábban ezzel a tárolási osztálysal létrehozott PVC-t. A PVC 10 Gi állandó kötetet kért. Ezt a következő parancs futtatásával ellenőrizheti:

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

A parancs kimenete a következő példához hasonlít:

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

Bontsa ki a PVC-t a spec.resources.requests.storage következő parancsot futtató mező növelésével:

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

Megjegyzés

Az állandó kötetek zsugorítása jelenleg nem támogatott. Ha egy meglévő, az aktuálisnál kisebb méretű PVC-t próbál kijavítani, az a következő hibaüzenethez vezet: The persistentVolumeClaim "pvc-azuredisk" is invalid: spec.resources.requests.storage: Forbidden: field can not be less than previous value.

A parancs kimenete a következő példához hasonlít:

persistentvolumeclaim/pvc-azuredisk patched

Futtassa a következő parancsot a kötet méretének növeléséhez:

kubectl get pv

A parancs kimenete a következő példához hasonlít:

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
(...)

Néhány perc múlva futtassa a következő parancsokat a PVC méretének megerősítéséhez:

kubectl get pvc pvc-azuredisk

A parancs kimenete a következő példához hasonlít:

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

Futtassa a következő parancsot a podon belüli lemez méretének megerősítéséhez:

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

A parancs kimenete a következő példához hasonlít:

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

Igény szerinti kipukkadás

Az igény szerinti lemezkitörési modell lehetővé teszi a lemezkitöréseket, amikor az igényei túllépik a jelenlegi kapacitását. Ez a modell további díjakat hoz létre, amikor a lemez kipukkan. Az igény szerinti adatcsomózás csak az 512 GiB-nél nagyobb prémium SSD-khez érhető el. A prémium szintű SSD-k által kiépített IOPS-ról és a lemezenkénti átviteli sebességről a Prémium SSD-méret című témakörben olvashat bővebben. Másik lehetőségként a kreditalapú kipukkadás az, ahol a lemez csak akkor törik fel, ha a kreditgyűjtőben felgyülemlett kreditek vannak. A hitelalapú kipukkadás nem hoz létre többletköltségeket a lemez felszakadásakor. A hitelalapú kipukkadás csak az 512 GiB és kisebb prémium SSD-k, valamint a standard 1024 GiB-s és kisebb SSD-k esetében érhető el. További információ az igény szerinti adatkitörésről: Igény szerinti felszakadás.

Fontos

Az alapértelmezett managed-csi-premium tárolási osztály le van tiltva az igény szerinti adatkitöréssel, és hitelalapú adatkitörést használ. Az alapértelmezett managed-csi-premium tárolási osztályon alapuló állandó kötetjogcímek által dinamikusan létrehozott prémium SSD-k igény szerinti adatcsomózást is letiltanak.

Ha egy prémium szintű SSD-állandó kötetet szeretne létrehozni, amelyen engedélyezve van az igény szerinti kipukkadás , létrehozhat egy új tárosztályt az enableBursting paraméterrel true , az alábbi YAML-sablonban látható módon. Az igény szerinti adatcsomózás engedélyezésével kapcsolatos további információkért lásd: Igény szerinti adatkitörés. A saját tárosztály igény szerinti kipukkadással történő létrehozásával kapcsolatos további információkért lásd: Burstable Managed CSI Premium Storage Osztály létrehozása.

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

Windows-tárolók

Az Azure Disk CSI-illesztőprogram támogatja a windowsos csomópontokat és tárolókat. Ha Windows-tárolókat szeretne használni, kövesse a Windows-tárolók rövid útmutatóját egy Windows-csomópontkészlet hozzáadásához.

Windows-csomópontkészlet használata után mostantól használhatja az olyan beépített tárolási osztályokat, mint a managed-csi. Az alábbi kubectl apply parancs futtatásával üzembe helyezhet egy példa Windows-alapú állapotalapú készletet, amely időbélyegeket ment a fájlbadata.txt:

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

A parancs kimenete a következő példához hasonlít:

statefulset.apps/busybox-azuredisk created

A kötet tartalmának ellenőrzéséhez futtassa a következő parancsot:

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

A parancs kimenete a következő példához hasonlít:

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

Következő lépések