Het stuurprogramma Azure Disk Container Storage Interface (CSI) gebruiken in Azure Kubernetes Service (AKS)
Het stuurprogramma Azure Disks Container Storage Interface (CSI) is een CSI-specificatieconform stuurprogramma dat door Azure Kubernetes Service (AKS) wordt gebruikt om de levenscyclus van Azure Disk te beheren.
De CSI is een standaard voor het beschikbaar maken van willekeurige blok- en bestandsopslagsystemen voor gecontaineriseerde workloads in Kubernetes. Door CSI te gebruiken en te gebruiken, kan AKS nu invoegtoepassingen schrijven, implementeren en herhalen om nieuwe opslagsystemen beschikbaar te maken of bestaande opslagsystemen in Kubernetes te verbeteren. Als u CSI-stuurprogramma's in AKS gebruikt, hoeft u de Kubernetes-kerncode niet aan te raken en te wachten op de releasecycli.
Zie CSI-stuurprogramma inschakelen op AKS als u een AKS-cluster wilt maken met ondersteuning voor CSI-stuurprogramma's. In dit artikel wordt beschreven hoe u versie 1 van het Azure Disk CSI-stuurprogramma gebruikt.
Notitie
Azure Disk CSI-stuurprogramma v2 (preview) verbetert de schaalbaarheid en vermindert de latentie van podfailover. Het maakt gebruik van gedeelde schijven voor het inrichten van bijlagereplica's op meerdere clusterknooppunten en kan worden geïntegreerd met de podplanner om ervoor te zorgen dat een knooppunt met een bijlagereplica wordt gekozen bij podfailover. Azure Disk CSI-stuurprogramma v2 (preview) biedt ook de mogelijkheid om de prestaties af te stemmen. Als u geïnteresseerd bent in deelname aan de preview, dient u een aanvraag in: https://aka.ms/DiskCSIv2Preview. Deze preview-versie wordt geleverd zonder service level agreement en u kunt af en toe wijzigingen verwachten die fouten veroorzaken in de preview-versie. De preview-versie wordt niet aanbevolen voor productieworkloads. Zie Supplemental Terms of Use for Microsoft Azure Previews (Aanvullende gebruiksvoorwaarden voor Microsoft Azure-previews) voor meer informatie.
Notitie
In-tree-stuurprogramma's verwijst naar de huidige opslagstuurprogramma's die deel uitmaken van de Kubernetes-kerncode versus de nieuwe CSI-stuurprogramma's, die invoegtoepassingen zijn.
Functies van Azure Disk CSI-stuurprogramma
Naast de functies van het stuurprogramma in de structuur ondersteunt het Azure Disk CSI-stuurprogramma de volgende functies:
- Prestatieverbeteringen tijdens gelijktijdig koppelen en loskoppelen van schijven
- In-tree stuurprogramma's koppelen of loskoppelen schijven in seriële, terwijl CSI-stuurprogramma's schijven in batch koppelen of loskoppelen. Er is een aanzienlijke verbetering wanneer er meerdere schijven aan één knooppunt zijn gekoppeld.
- Premium SSD v1 en v2 worden ondersteund.
PremiumV2_LRS
ondersteunt alleen deNone
cachemodus
- Ondersteuning voor ZRS-schijven (Zone-redundante opslag)
Premium_ZRS
,StandardSSD_ZRS
schijftypen worden ondersteund. ZRS-schijf kan worden gepland op het zone- of niet-zoneknooppunt, zonder de beperking dat het schijfvolume zich op dezelfde zone als een bepaald knooppunt bevindt. Zie Zone-redundante opslag voor beheerde schijven voor meer informatie, waaronder welke regio's worden ondersteund.
- Momentopname
- Volumeklonen
- Formaat van schijfW wijzigen zonder downtime
Notitie
Afhankelijk van de VM-SKU die wordt gebruikt, heeft het Azure Disk CSI-stuurprogramma mogelijk een volumelimiet per knooppunt. Voor sommige krachtige VM's (bijvoorbeeld 16 kernen) is de limiet 64 volumes per knooppunt. Als u de limiet per VM-SKU wilt identificeren, raadpleegt u de kolom Maximum aantal gegevensschijven voor elke aangeboden VM-SKU. Zie Grootten van virtuele machines voor algemeen gebruik voor een lijst met aangeboden VM-SKU's en de bijbehorende gedetailleerde capaciteitslimieten.
Permanente CSI-volumes gebruiken met Azure Disks
Een permanent volume (PV) vertegenwoordigt een stuk opslag dat is ingericht voor gebruik met Kubernetes-pods. Een PV kan worden gebruikt door een of meer pods en kan dynamisch of statisch worden ingericht. In dit artikel wordt beschreven hoe u dynamisch pv's maakt met Azure-schijf voor gebruik door één pod in een AKS-cluster. Zie Een statisch volume maken met Azure Disks voor statische inrichting.
Zie Opslagopties voor toepassingen in AKS voor meer informatie over Kubernetes-volumes.
Dynamisch Azure Disks-pv's maken met behulp van de ingebouwde opslagklassen
Een opslagklasse wordt gebruikt om te definiëren hoe een opslageenheid dynamisch wordt gemaakt met een permanent volume. Zie Kubernetes-opslagklassen voor meer informatie over Kubernetes-opslagklassen.
Wanneer u het Azure Disk CSI-stuurprogramma in AKS gebruikt, zijn er nog twee ingebouwde StorageClasses
die gebruikmaken van het Azure Disk CSI-opslagstuurprogramma. De andere CSI-opslagklassen worden gemaakt met het cluster naast de standaardopslagklassen in de structuur.
managed-csi
: maakt gebruik van lokaal redundante opslag (LRS) van Azure Standard SSD om een beheerde schijf te maken.managed-csi-premium
: maakt gebruik van Azure Premium LRS om een beheerde schijf te maken.
Het beleid voor vrijmaken in beide opslagklassen zorgt ervoor dat de onderliggende Azure-schijven worden verwijderd wanneer de respectieve HW wordt verwijderd. De opslagklassen configureren ook dat de pc's kunnen worden uitgebreid. U hoeft alleen de persistente volumeclaim (PVC) te bewerken met de nieuwe grootte.
Als u deze opslagklassen wilt gebruiken, maakt u een PVC-pod en de bijbehorende pod die ernaar verwijst en gebruikt. Een PVC wordt gebruikt om opslag automatisch in te richten op basis van een opslagklasse. Een PVC kan een van de vooraf gemaakte opslagklassen of een door de gebruiker gedefinieerde opslagklasse gebruiken om een door Azure beheerde schijf te maken voor de gewenste SKU en grootte. Wanneer u een poddefinitie maakt, wordt het PVC opgegeven om de gewenste opslag aan te vragen.
Maak een voorbeeldpod en respectieve PVC door de opdracht kubectl apply uit te voeren :
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
De uitvoer van de opdracht lijkt op het volgende voorbeeld:
persistentvolumeclaim/pvc-azuredisk created
pod/nginx-azuredisk created
Nadat de pod de status Wordt uitgevoerd heeft, voert u de volgende opdracht uit om een nieuw bestand te maken met de naam test.txt
.
kubectl exec nginx-azuredisk -- touch /mnt/azuredisk/test.txt
Als u wilt controleren of de schijf correct is gekoppeld, voert u de volgende opdracht uit en controleert u of u het test.txt
bestand in de uitvoer ziet:
kubectl exec nginx-azuredisk -- ls /mnt/azuredisk
lost+found
outfile
test.txt
Een aangepaste opslagklasse maken
De standaardopslagklassen zijn geschikt voor de meest voorkomende scenario's. In sommige gevallen wilt u mogelijk uw eigen opslagklasse aanpassen met uw eigen parameters. U kunt bijvoorbeeld de volumeBindingMode
klasse wijzigen.
U kunt een volumeBindingMode: Immediate
klasse gebruiken die garandeert dat deze onmiddellijk plaatsvindt nadat het PVC is gemaakt. Wanneer uw knooppuntgroepen een topologiebeperking hebben, bijvoorbeeld bij het gebruik van beschikbaarheidszones, worden PC's gebonden of ingericht zonder kennis van de planningsvereisten van de pod.
Als u dit scenario wilt aanpakken, kunt u gebruiken volumeBindingMode: WaitForFirstConsumer
, waardoor het binden en inrichten van een PV wordt uitgesteld totdat er een pod wordt gemaakt die gebruikmaakt van het PVC. Op deze manier voldoet de HW aan en wordt deze ingericht in de beschikbaarheidszone (of een andere topologie) die is opgegeven door de planningsbeperkingen van de pod. De standaardopslagklassen gebruiken volumeBindingMode: WaitForFirstConsumer
klasse.
Maak een bestand met de naam sc-azuredisk-csi-waitforfirstconsumer.yaml
en plak het volgende manifest. De opslagklasse is hetzelfde als onze managed-csi
opslagklasse, maar met een andere volumeBindingMode
klasse.
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
Maak de opslagklasse door de opdracht kubectl apply uit te voeren en uw sc-azuredisk-csi-waitforfirstconsumer.yaml
bestand op te geven:
kubectl apply -f sc-azuredisk-csi-waitforfirstconsumer.yaml
De uitvoer van de opdracht lijkt op het volgende voorbeeld:
storageclass.storage.k8s.io/azuredisk-csi-waitforfirstconsumer created
Momentopnamen van volumes
Het Azure Disk CSI-stuurprogramma ondersteunt het maken van momentopnamen van permanente volumes. Als onderdeel van deze mogelijkheid kan het stuurprogramma volledige of incrementele momentopnamen uitvoeren, afhankelijk van de waarde die is ingesteld in de incremental
parameter (standaard is dit waar).
De volgende tabel bevat details voor alle parameters.
Naam | Betekenis | Beschikbare waarde | Verplicht | Standaardwaarde |
---|---|---|---|---|
resourceGroup | Resourcegroep voor het opslaan van momentopnamen | BESTAANDE RESOURCEGROEP | No | Als dit niet is opgegeven, wordt de momentopname opgeslagen in dezelfde resourcegroep als de Azure-bronschijven |
Incrementele | Volledige of incrementele momentopname maken | true , false |
No | true |
tags | Azure Disks-tags | Tagindeling: 'key1=val1,key2=val2' | No | "" |
Useragent | Gebruikersagent die wordt gebruikt voor toeschrijving van klantgebruik | No | Gegenereerde useragent opgemaakt driverName/driverVersion compiler/version (OS-ARCH) |
|
subscriptionID | Geef de Azure-abonnements-id op waar Azure Disks worden gemaakt | Azure-abonnements-id | No | Indien niet leeg, resourceGroup moet worden opgegeven, incremental moet worden ingesteld als false |
Een momentopname van een volume maken
Notitie
Voordat u doorgaat, moet u ervoor zorgen dat de toepassing geen gegevens naar de bronschijf schrijft.
Voor een voorbeeld van deze mogelijkheid maakt u een klasse voor volumemomentopnamen met de opdracht kubectl apply :
kubectl apply -f https://raw.githubusercontent.com/kubernetes-sigs/azuredisk-csi-driver/master/deploy/example/snapshot/storageclass-azuredisk-snapshot.yaml
De uitvoer van de opdracht lijkt op het volgende voorbeeld:
volumesnapshotclass.snapshot.storage.k8s.io/csi-azuredisk-vsc created
Nu gaan we een momentopname van het volume maken van het PVC dat we aan het begin van deze zelfstudie dynamisch hebben gemaakt, pvc-azuredisk
.
kubectl apply -f https://raw.githubusercontent.com/kubernetes-sigs/azuredisk-csi-driver/master/deploy/example/snapshot/azuredisk-volume-snapshot.yaml
De uitvoer van de opdracht lijkt op het volgende voorbeeld:
volumesnapshot.snapshot.storage.k8s.io/azuredisk-volume-snapshot created
Voer de volgende opdracht uit om te controleren of de momentopname juist is gemaakt:
kubectl describe volumesnapshot azuredisk-volume-snapshot
De uitvoer van de opdracht lijkt op het volgende voorbeeld:
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>
Een nieuw PVC maken op basis van een momentopname van een volume
U kunt een nieuw PVC maken op basis van een momentopname van een volume. Gebruik de momentopname die u in de vorige stap hebt gemaakt en maak een nieuw PVC en een nieuwe pod om deze te gebruiken.
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
De uitvoer van de opdracht lijkt op het volgende voorbeeld:
persistentvolumeclaim/pvc-azuredisk-snapshot-restored created
pod/nginx-restored created
Laten we er ten slotte voor zorgen dat het hetzelfde PVC is dat eerder is gemaakt door de inhoud te controleren door de volgende opdracht uit te voeren:
kubectl exec nginx-restored -- ls /mnt/azuredisk
De uitvoer van de opdracht lijkt op het volgende voorbeeld:
lost+found
outfile
test.txt
Zoals verwacht, kunnen we het eerder gemaakte test.txt
bestand nog steeds zien.
Volumes klonen
Een gekloond volume wordt gedefinieerd als een duplicaat van een bestaand Kubernetes-volume. Zie de conceptuele documentatie voor het klonen van volumes voor meer informatie over het klonen van volumes in Kubernetes.
Het CSI-stuurprogramma voor Azure Disks ondersteunt het klonen van volumes. Maak ter illustratie een gekloond volume van de eerder gemaakteazuredisk-pvc
en een nieuwe pod om deze te gebruiken.
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
De uitvoer van de opdracht lijkt op het volgende voorbeeld:
persistentvolumeclaim/pvc-azuredisk-cloning created
pod/nginx-restored-cloning created
U kunt de inhoud van het gekloonde volume controleren door de volgende opdracht uit te voeren en te bevestigen dat het bestand test.txt
is gemaakt:
kubectl exec nginx-restored-cloning -- ls /mnt/azuredisk
De uitvoer van de opdracht lijkt op het volgende voorbeeld:
lost+found
outfile
test.txt
Het formaat van een permanent volume wijzigen zonder downtime
U kunt een groter volume aanvragen voor een PVC. Bewerk het PVC-object en geef een groter formaat op. Deze wijziging activeert de uitbreiding van het onderliggende volume dat de HW-ondersteuning biedt.
Notitie
Er wordt nooit een nieuwe HW gemaakt om aan de claim te voldoen. In plaats daarvan wordt het formaat van een bestaand volume gewijzigd.
In AKS ondersteunt de ingebouwde managed-csi
opslagklasse al uitbreiding, dus gebruik het PVC dat u eerder hebt gemaakt met deze opslagklasse. Het PVC vroeg om een 10-Gi permanent volume. U kunt dit bevestigen door de volgende opdracht uit te voeren:
kubectl exec -it nginx-azuredisk -- df -h /mnt/azuredisk
De uitvoer van de opdracht lijkt op het volgende voorbeeld:
Filesystem Size Used Avail Use% Mounted on
/dev/sdc 9.8G 42M 9.8G 1% /mnt/azuredisk
Vouw het PVC uit door het spec.resources.requests.storage
veld met de volgende opdracht te vergroten:
kubectl patch pvc pvc-azuredisk --type merge --patch '{"spec": {"resources": {"requests": {"storage": "15Gi"}}}}'
De uitvoer van de opdracht lijkt op het volgende voorbeeld:
persistentvolumeclaim/pvc-azuredisk patched
Voer de volgende opdracht uit om te controleren of de volumegrootte is toegenomen:
kubectl get pv
De uitvoer van de opdracht lijkt op het volgende voorbeeld:
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
(...)
Voer na een paar minuten de volgende opdrachten uit om de grootte van het PVC te bevestigen:
kubectl get pvc pvc-azuredisk
De uitvoer van de opdracht lijkt op het volgende voorbeeld:
NAME STATUS VOLUME CAPACITY ACCESS MODES STORAGECLASS AGE
pvc-azuredisk Bound pvc-391ea1a6-0191-4022-b915-c8dc4216174a 15Gi RWO managed-csi 2d2h
Voer de volgende opdracht uit om de grootte van de schijf in de pod te bevestigen:
kubectl exec -it nginx-azuredisk -- df -h /mnt/azuredisk
De uitvoer van de opdracht lijkt op het volgende voorbeeld:
Filesystem Size Used Avail Use% Mounted on
/dev/sdc 15G 46M 15G 1% /mnt/azuredisk
Bursting op aanvraag
Het schijf bursting-model op aanvraag staat schijf bursts toe wanneer de behoeften de huidige capaciteit overschrijden. Dit model genereert extra kosten wanneer de schijf bursts. Bursting op aanvraag is alleen beschikbaar voor Premium SSD's die groter zijn dan 512 GiB. Zie Premium SSD-grootte voor meer informatie over ingerichte IOPS voor Premium SSD's en doorvoer per schijf. Als alternatief is bursting op basis van tegoeden de plek waar de schijf alleen burst-tegoeden bevat die zijn verzameld in de tegoedbucket. Bursting op basis van tegoed genereert geen extra kosten wanneer de schijf bursts. Bursting op basis van krediet is alleen beschikbaar voor premium SSD's 512 GiB en kleiner, en standard SSD's 1024 GiB en kleiner. Zie Bursting op aanvraag voor meer informatie over bursting op aanvraag.
Belangrijk
Voor de standaardopslagklasse managed-csi-premium
is bursting op aanvraag uitgeschakeld en wordt bursting op basis van tegoed gebruikt. Elke premium SSD die dynamisch is gemaakt door een permanente volumeclaim op basis van de standaardopslagklasse managed-csi-premium
, heeft ook bursting op aanvraag uitgeschakeld.
Als u een permanent premium SSD-volume wilt maken met bursting op aanvraag ingeschakeld, kunt u een nieuwe opslagklasse maken met de parameter enableBursting ingesteld op true
, zoals wordt weergegeven in de volgende YAML-sjabloon. Zie Bursting op aanvraag voor meer informatie over het inschakelen van bursting op aanvraag. Zie Create a Burstable Managed CSI Premium Storage Class (Een beheerde CSI-klasse met bursting op aanvraag maken) voor meer informatie over het bouwen van uw eigen opslagklasse met bursting ingeschakeld.
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-containers
Het CSI-stuurprogramma voor Azure-schijven ondersteunt Windows-knooppunten en -containers. Als u Windows-containers wilt gebruiken, volgt u de quickstart Windows-containers om een Windows-knooppuntgroep toe te voegen.
Nadat u een Windows-knooppuntgroep hebt, kunt u nu de ingebouwde opslagklassen gebruiken, zoals managed-csi
. U kunt een voorbeeld van een op Windows gebaseerde stateful set implementeren waarmee tijdstempels in het bestand data.txt
worden opgeslagen door de volgende kubectl apply-opdracht uit te voeren:
kubectl apply -f https://raw.githubusercontent.com/kubernetes-sigs/azuredisk-csi-driver/master/deploy/example/windows/statefulset.yaml
De uitvoer van de opdracht lijkt op het volgende voorbeeld:
statefulset.apps/busybox-azuredisk created
Voer de volgende opdracht uit om de inhoud van het volume te valideren:
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
De uitvoer van de opdracht lijkt op het volgende voorbeeld:
2020-08-27 08:13:41Z
2020-08-27 08:13:42Z
2020-08-27 08:13:44Z
(...)
Volgende stappen
- Zie Azure Files gebruiken met CSI-stuurprogramma voor meer informatie over het gebruik van het CSI-stuurprogramma voor Azure Files.
- Zie Azure Blob Storage gebruiken met CSI-stuurprogramma voor meer informatie over het gebruik van het CSI-stuurprogramma voor Azure Blob Storage.
- Zie Aanbevolen procedures voor opslag en back-ups in Azure Kubernetes Service voor meer informatie over aanbevolen procedures voor opslag.
- Zie Schijfgebaseerde oplossingen in AKS voor meer informatie over opslagoplossingen op basis van schijven.