Använda CSI-drivrutinen (Azure Disk Container Storage Interface) i Azure Kubernetes Service (AKS)
CSI-drivrutinen (Azure Disks Container Storage Interface) är en CSI-kompatibel drivrutin som används av Azure Kubernetes Service (AKS) för att hantera livscykeln för Azure Disk.
CSI är en standard för att exponera godtyckliga block- och fillagringssystem för containerbaserade arbetsbelastningar på Kubernetes. Genom att implementera och använda CSI kan AKS nu skriva, distribuera och iterera plugin-program för att exponera nya eller förbättra befintliga lagringssystem i Kubernetes. Att använda CSI-drivrutiner i AKS undviker att behöva röra kubernetes-kärnkoden och vänta på dess lanseringscykler.
Information om hur du skapar ett AKS-kluster med stöd för CSI-drivrutin finns i Aktivera CSI-drivrutin på AKS. Den här artikeln beskriver hur du använder Azure Disk CSI-drivrutinen version 1.
Kommentar
Azure Disk CSI-drivrutinen v2 (förhandsversion) förbättrar skalbarheten och minskar svarstiden för poddredundans. Den använder delade diskar för att etablera repliker för bifogade filer på flera klusternoder och integreras med poddschemaläggaren för att säkerställa att en nod med en replik för bifogade filer väljs vid poddredundans. Azure Disk CSI driver v2 (förhandsversion) ger också möjlighet att finjustera prestanda. Om du är intresserad av att delta i förhandsversionen skickar du en begäran: https://aka.ms/DiskCSIv2Preview. Den här förhandsversionen tillhandahålls utan ett serviceavtal och du kan ibland förvänta dig icke-bakåtkompatibla ändringar i förhandsversionen. Förhandsversionen rekommenderas inte för produktionsarbetsbelastningar. Mer information finns i Kompletterande villkor för användning av Microsoft Azure-förhandsversioner.
Kommentar
In-tree-drivrutiner refererar till de aktuella lagringsdrivrutinerna som ingår i kubernetes-kärnkoden jämfört med de nya CSI-drivrutinerna, som är plugin-program.
Funktioner för Azure Disk CSI-drivrutin
Förutom drivrutinsfunktioner i träd har Azure Disk CSI-drivrutinen stöd för följande funktioner:
- Prestandaförbättringar vid samtidig diskanslutning och frånkoppling
- In-tree-drivrutiner ansluter eller kopplar från diskar i seriellt, medan CSI-drivrutiner ansluter eller kopplar från diskar i batch. Det finns betydande förbättringar när det finns flera diskar som ansluter till en nod.
- Premium SSD v1 och v2 stöds.
PremiumV2_LRS
stöderNone
endast cachelagringsläge
- Stöd för zonredundant lagring (ZRS)
Premium_ZRS
stödsStandardSSD_ZRS
disktyper. ZRS-disken kan schemaläggas på noden zon eller icke-zon, utan begränsningen att diskvolymen ska finnas i samma zon som en viss nod. Mer information, inklusive vilka regioner som stöds, finns i Zonredundant lagring för hanterade diskar.
- Ögonblicksbild
- Volymkloning
- Ändra storlek på disk-PV utan stilleståndstid
Kommentar
Beroende på vilken VM SKU som används kan Azure Disk CSI-drivrutinen ha en volymgräns per nod. För vissa kraftfulla virtuella datorer (till exempel 16 kärnor) är gränsen 64 volymer per nod. Om du vill identifiera gränsen per VM SKU läser du kolumnen Max datadiskar för varje VM SKU som erbjuds. En lista över vm-SKU:er som erbjuds och deras motsvarande detaljerade kapacitetsgränser finns i Storlekar på virtuella datorer för generell användning.
Använda CSI-beständiga volymer med Azure Disks
En beständig volym (PV) representerar en lagringsdel som har etablerats för användning med Kubernetes-poddar. En PV kan användas av en eller flera poddar och kan etableras dynamiskt eller statiskt. Den här artikeln visar hur du dynamiskt skapar PV:er med Azure-disk för användning av en enda podd i ett AKS-kluster. För statisk etablering, se Skapa en statisk volym med Azure Disks.
Mer information om Kubernetes-volymer finns i Lagringsalternativ för program i AKS.
Skapa Azure Disks-PV:er dynamiskt med hjälp av de inbyggda lagringsklasserna
En lagringsklass används för att definiera hur en lagringsenhet skapas dynamiskt med en beständig volym. Mer information om Kubernetes-lagringsklasser finns i Kubernetes-lagringsklasser.
När du använder Azure Disk CSI-drivrutinen i AKS finns det ytterligare två inbyggda StorageClasses
som använder Azure Disk CSI-lagringsdrivrutinen. De andra CSI-lagringsklasserna skapas med klustret tillsammans med standardlagringsklasserna i trädet.
managed-csi
: Använder Azure Standard SSD lokalt redundant lagring (LRS) för att skapa en hanterad disk. Från och med Kubernetes version 1.29, i AKS-kluster (Azure Kubernetes Service) som distribuerats över flera tillgänglighetszoner, använder den här lagringsklassen Azure Standard SSD zone-redundant lagring (ZRS) för att skapa hanterade diskar.managed-csi-premium
: Använder Azure Premium LRS för att skapa en hanterad disk. Från och med Kubernetes version 1.29, i AKS-kluster (Azure Kubernetes Service) som distribuerats i flera tillgänglighetszoner, använder den här lagringsklassen Azure Premium zonredundant lagring (ZRS) för att skapa hanterade diskar.
Återtagandeprincipen i båda lagringsklasserna säkerställer att de underliggande Azure-diskarna tas bort när respektive PV tas bort. Lagringsklasserna konfigurerar också att PV:erna ska vara utökningsbara. Du behöver bara redigera det beständiga volymanspråket (PVC) med den nya storleken.
Om du vill använda dessa lagringsklasser skapar du en PVC och respektive podd som refererar till och använder dem. En PVC används för att automatiskt etablera lagring baserat på en lagringsklass. En PVC kan använda en av de förskapade lagringsklasserna eller en användardefinierad lagringsklass för att skapa en Azure-hanterad disk för önskad SKU och storlek. När du skapar en podddefinition anges PVC för att begära önskad lagring.
Skapa en exempelpodd och respektive PVC genom att köra kommandot kubectl apply :
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
Kommandots utdata liknar följande exempel:
persistentvolumeclaim/pvc-azuredisk created
pod/nginx-azuredisk created
När podden är i körningstillståndet kör du följande kommando för att skapa en ny fil med namnet test.txt
.
kubectl exec nginx-azuredisk -- touch /mnt/azuredisk/test.txt
Kontrollera att disken är korrekt monterad genom att köra följande kommando och kontrollera att du ser test.txt
filen i utdata:
kubectl exec nginx-azuredisk -- ls /mnt/azuredisk
lost+found
outfile
test.txt
Skapa en anpassad lagringsklass
Standardlagringsklasserna är lämpliga för de vanligaste scenarierna. I vissa fall kanske du vill att din egen lagringsklass ska anpassas med dina egna parametrar. Du kanske till exempel vill ändra volumeBindingMode
klassen.
Du kan använda en volumeBindingMode: Immediate
klass som garanterar att den inträffar omedelbart när PVC:en har skapats. När nodpoolerna är topologibegränsade, till exempel när du använder tillgänglighetszoner, skulle PV:er bindas eller etableras utan kunskap om poddens schemaläggningskrav.
För att hantera det här scenariot kan du använda volumeBindingMode: WaitForFirstConsumer
, vilket fördröjer bindningen och etableringen av en PV tills en podd som använder PVC har skapats. På så sätt överensstämmer PV:en och etableras i tillgänglighetszonen (eller annan topologi) som anges av poddens schemaläggningsbegränsningar. Standardlagringsklasserna använder volumeBindingMode: WaitForFirstConsumer
klass.
Skapa en fil med namnet sc-azuredisk-csi-waitforfirstconsumer.yaml
och klistra sedan in följande manifest. Lagringsklassen är samma som vår managed-csi
lagringsklass, men med en annan volumeBindingMode
klass.
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
Skapa lagringsklassen genom att köra kommandot kubectl apply och ange filen sc-azuredisk-csi-waitforfirstconsumer.yaml
:
kubectl apply -f sc-azuredisk-csi-waitforfirstconsumer.yaml
Kommandots utdata liknar följande exempel:
storageclass.storage.k8s.io/azuredisk-csi-waitforfirstconsumer created
Ögonblicksbilder av volymer
Azure Disk CSI-drivrutinen har stöd för att skapa ögonblicksbilder av beständiga volymer. Som en del av den här funktionen kan drivrutinen utföra antingen fullständiga eller inkrementella ögonblicksbilder beroende på värdet som anges i parametern incremental
(som standard är det sant).
Följande tabell innehåller information om alla parametrar.
Name | Innebörd | Tillgängligt värde | Obligatorisk | Default value |
---|---|---|---|---|
resourceGroup | Resursgrupp för lagring av ögonblicksbildbilder | BEFINTLIG RESURSGRUPP | Nej | Om den inte anges lagras ögonblicksbilden i samma resursgrupp som Azure-källdiskar |
Inkrementell | Ta fullständig eller inkrementell ögonblicksbild | true , false |
Nej | true |
taggar | Azure Disks-taggar | Taggformat: 'key1=val1,key2=val2' | Nej | "" |
userAgent | Användaragent som används för kundanvändningsatribution | Nej | Genererad useragent formaterad driverName/driverVersion compiler/version (OS-ARCH) |
|
subscriptionID | Ange azure-prenumerations-ID där Azure Disks ska skapas | Azure-prenumerations-ID | Nej | Om den inte är tom resourceGroup måste den anges incremental som false |
Skapa en ögonblicksbild av volymen
Kommentar
Kontrollera att programmet inte skriver data till källdisken innan du fortsätter.
Ett exempel på den här funktionen är att skapa en volymögonblicksbildklass med kommandot kubectl apply :
kubectl apply -f https://raw.githubusercontent.com/kubernetes-sigs/azuredisk-csi-driver/master/deploy/example/snapshot/storageclass-azuredisk-snapshot.yaml
Kommandots utdata liknar följande exempel:
volumesnapshotclass.snapshot.storage.k8s.io/csi-azuredisk-vsc created
Nu ska vi skapa en ögonblicksbild av volymen från PVC:en som vi skapade dynamiskt i början av den här självstudien. pvc-azuredisk
kubectl apply -f https://raw.githubusercontent.com/kubernetes-sigs/azuredisk-csi-driver/master/deploy/example/snapshot/azuredisk-volume-snapshot.yaml
Kommandots utdata liknar följande exempel:
volumesnapshot.snapshot.storage.k8s.io/azuredisk-volume-snapshot created
Kontrollera att ögonblicksbilden har skapats korrekt genom att köra följande kommando:
kubectl describe volumesnapshot azuredisk-volume-snapshot
Kommandots utdata liknar följande exempel:
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>
Skapa en ny PVC baserat på en ögonblicksbild av volymen
Du kan skapa en ny PVC baserat på en ögonblicksbild av volymen. Använd ögonblicksbilden som skapades i föregående steg och skapa en ny PVC och en ny podd för att använda den.
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
Kommandots utdata liknar följande exempel:
persistentvolumeclaim/pvc-azuredisk-snapshot-restored created
pod/nginx-restored created
Slutligen ska vi se till att det är samma PVC som skapats tidigare genom att kontrollera innehållet genom att köra följande kommando:
kubectl exec nginx-restored -- ls /mnt/azuredisk
Kommandots utdata liknar följande exempel:
lost+found
outfile
test.txt
Som förväntat kan vi fortfarande se vår tidigare skapade test.txt
fil.
Klona volymer
En klonad volym definieras som en dubblett av en befintlig Kubernetes-volym. Mer information om kloning av volymer i Kubernetes finns i den konceptuella dokumentationen för volymkloning.
CSI-drivrutinen för Azure Disks stöder volymkloning. För att demonstrera skapar du en klonad volym av den tidigare skapade azuredisk-pvc
och en ny podd för att använda den.
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
Kommandots utdata liknar följande exempel:
persistentvolumeclaim/pvc-azuredisk-cloning created
pod/nginx-restored-cloning created
Du kan kontrollera innehållet i den klonade volymen genom att köra följande kommando och bekräfta att filen test.txt
har skapats:
kubectl exec nginx-restored-cloning -- ls /mnt/azuredisk
Kommandots utdata liknar följande exempel:
lost+found
outfile
test.txt
Ändra storlek på en beständig volym utan stilleståndstid
Du kan begära en större volym för en PVC. Redigera PVC-objektet och ange en större storlek. Den här ändringen utlöser expansionen av den underliggande volymen som stöder PV:en.
Kommentar
En ny PV skapas aldrig för att uppfylla anspråket. I stället ändras storlek på en befintlig volym.
I AKS stöder den inbyggda managed-csi
lagringsklassen redan expansion, så använd DEN PVC som skapades tidigare med den här lagringsklassen. PVC begärde en beständig volym på 10 Gi. Du kan bekräfta genom att köra följande kommando:
kubectl exec -it nginx-azuredisk -- df -h /mnt/azuredisk
Kommandots utdata liknar följande exempel:
Filesystem Size Used Avail Use% Mounted on
/dev/sdc 9.8G 42M 9.8G 1% /mnt/azuredisk
Expandera PVC genom att öka fältet spec.resources.requests.storage
som kör följande kommando:
kubectl patch pvc pvc-azuredisk --type merge --patch '{"spec": {"resources": {"requests": {"storage": "15Gi"}}}}'
Kommentar
Krympande beständiga volymer stöds inte för närvarande. Försök att korrigera en befintlig PVC med en mindre storlek än den aktuella leder till följande felmeddelande: The persistentVolumeClaim "pvc-azuredisk" is invalid: spec.resources.requests.storage: Forbidden: field can not be less than previous value.
Kommandots utdata liknar följande exempel:
persistentvolumeclaim/pvc-azuredisk patched
Kör följande kommando för att bekräfta att volymstorleken har ökat:
kubectl get pv
Kommandots utdata liknar följande exempel:
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
(...)
Och efter några minuter kör du följande kommandon för att bekräfta storleken på PVC:
kubectl get pvc pvc-azuredisk
Kommandots utdata liknar följande exempel:
NAME STATUS VOLUME CAPACITY ACCESS MODES STORAGECLASS AGE
pvc-azuredisk Bound pvc-391ea1a6-0191-4022-b915-c8dc4216174a 15Gi RWO managed-csi 2d2h
Kör följande kommando för att bekräfta diskens storlek i podden:
kubectl exec -it nginx-azuredisk -- df -h /mnt/azuredisk
Kommandots utdata liknar följande exempel:
Filesystem Size Used Avail Use% Mounted on
/dev/sdc 15G 46M 15G 1% /mnt/azuredisk
Bursting på begäran
Disksprängningsmodellen på begäran tillåter disktoppar när dess behov överskrider den aktuella kapaciteten. Den här modellen genererar extra avgifter när disken spricker. Bursting på begäran är endast tillgängligt för premium-SSD:er som är större än 512 GiB. Mer information om premium-SSD:er etablerade IOPS och dataflöde per disk finns i Premium SSD-storlek. Alternativt är kreditbaserad bursting där disken bara kommer att brista om den har burst-krediter ackumulerade i sin kredit bucket. Kreditbaserad bursting genererar inte extra avgifter när disken spricker. Kreditbaserad bursting är endast tillgängligt för premium SSD 512 GiB och mindre, och standard SSD 1024 GiB och mindre. Mer information om bursting på begäran finns i Bursting på begäran.
Viktigt!
Standardlagringsklassen managed-csi-premium
har bursting på begäran inaktiverad och använder kreditbaserad bursting. Premium SSD som skapas dynamiskt av ett beständigt volymanspråk baserat på standardlagringsklassen managed-csi-premium
har också bursting på begäran inaktiverat.
Om du vill skapa en beständig premium-SSD-volym med bursting på begäran aktiverat kan du skapa en ny lagringsklass med parametern enableBursting inställd true
på enligt följande YAML-mall. Mer information om hur du aktiverar burst-prestanda på begäran finns i Bursting på begäran. Mer information om hur du skapar en egen lagringsklass med bursting på begäran aktiverad finns i Skapa en burstbar hanterad CSI Premium Storage-klass.
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-containrar
Azure Disk CSI-drivrutinen stöder Windows-noder och containrar. Om du vill använda Windows-containrar följer du snabbstarten windowscontainrar för att lägga till en Windows-nodpool.
När du har en Windows-nodpool kan du nu använda de inbyggda lagringsklasserna som managed-csi
. Du kan distribuera ett exempel på en Windows-baserad tillståndskänslig uppsättning som sparar tidsstämplar i filen data.txt
genom att köra följande kubectl apply-kommando :
kubectl apply -f https://raw.githubusercontent.com/kubernetes-sigs/azuredisk-csi-driver/master/deploy/example/windows/statefulset.yaml
Kommandots utdata liknar följande exempel:
statefulset.apps/busybox-azuredisk created
Kör följande kommando för att verifiera volymens innehåll:
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
Kommandots utdata liknar följande exempel:
2020-08-27 08:13:41Z
2020-08-27 08:13:42Z
2020-08-27 08:13:44Z
(...)
Nästa steg
- Information om hur du använder CSI-drivrutin för Azure Files finns i Använda Azure Files med CSI-drivrutin.
- Information om hur du använder CSI-drivrutin för Azure Blob Storage finns i Använda Azure Blob Storage med CSI-drivrutin.
- Mer information om metodtips för lagring finns i Metodtips för lagring och säkerhetskopior i Azure Kubernetes Service.
- Mer information om diskbaserade lagringslösningar finns i Diskbaserade lösningar i AKS.
Azure Kubernetes Service