Notitie
Voor toegang tot deze pagina is autorisatie vereist. U kunt proberen u aan te melden of de directory te wijzigen.
Voor toegang tot deze pagina is autorisatie vereist. U kunt proberen de mappen te wijzigen.
Azure Container Storage is een cloudgebaseerde volumebeheer-, implementatie- en indelingsservice die systeemeigen is gebouwd voor containers. In dit artikel leest u hoe u Azure Container Storage configureert voor het gebruik van lokale NVMe-schijf als back-endopslag voor uw Kubernetes-workloads. NVMe is ontworpen voor snelle gegevensoverdracht tussen opslag en CPU en biedt hoge IOPS en doorvoer.
Belangrijk
Dit artikel is van toepassing op Azure Container Storage (versie 2.x.x), dat momenteel alleen lokale NVMe-schijf ondersteunt voor back-upopslag. Zie de documentatie over Azure Container Storage (versie 1.x.x) voor meer informatie over eerdere versies.
Wat is lokale NVMe?
Wanneer uw toepassing een latentie van sub milliseconden voor opslag en hoge doorvoer nodig heeft, kunt u lokale NVMe met Azure Container Storage gebruiken om te voldoen aan uw prestatievereisten. Kortstondig betekent dat de schijven worden geïmplementeerd op de lokale virtuele machine (VM) die als host fungeert voor het AKS-cluster en niet zijn opgeslagen in een Azure-opslagservice. Gegevens gaan verloren op deze schijven als u uw VIRTUELE machine stopt/de toewijzing ervan ongedaan maakt. Lokale NVMe-schijven worden aangeboden voor bepaalde Azure VM-families, zoals vm's die zijn geoptimaliseerd voor opslag .
Azure Container Storage maakt standaard algemene tijdelijke volumes wanneer u lokale NVMe-schijven gebruikt. Voor gebruiksvoorbeelden waarvoor permanente volumeclaims zijn vereist, kunt u de aantekening localdisk.csi.acstor.io/accept-ephemeral-storage: "true" toevoegen in uw permanente volumeclaimsjabloon.
Gegevensstriping
Om de prestaties te maximaliseren, worden in Azure Container Storage gegevens automatisch over alle beschikbare lokale NVMe-schijven gestriped, op basis van één VM per keer. Striping is een techniek waarbij gegevens worden onderverdeeld in kleine segmenten en gelijkmatig over meerdere schijven tegelijk worden geschreven, waardoor de doorvoer toeneemt en de algehele I/O-prestaties worden verbeterd. Dit gedrag is standaard ingeschakeld en kan niet worden uitgeschakeld.
Omdat de prestaties van deze gestreepte apparaten worden samengevoegd, kunnen grotere VM-groottes die meer NVMe-stations beschikbaar maken, aanzienlijk hogere IOPS en bandbreedte realiseren. Als u een grotere VM-serie selecteert, kunnen uw workloads profiteren van de extra geaggregeerde doorvoer zonder extra configuratie.
De Lsv3-serie schaalt bijvoorbeeld van één NVMe-station van 1,92 TB op Standard_L8s_v3 (ongeveer 400.000 IOPS en 20.000 MB/s) tot 10 NVMe-stations op Standard_L80s_v3 (ongeveer 3,8 miljoen IOPS en 20.000 MB/s).
Vereisten
Als u geen Azure-abonnement hebt, maakt u een gratis account voordat u begint.
Voor dit artikel is de nieuwste versie (2.77.0 of hoger) van de Azure CLI vereist. Zie Hoe u de Azure CLI installeert. Gebruik Azure Cloud Shell niet, omdat
az upgradedeze niet beschikbaar is in Cloud Shell. Zorg ervoor dat u de opdrachten in dit artikel uitvoert met beheerdersbevoegdheden.U hebt de Kubernetes-opdrachtregelclient nodig.
kubectlU kunt deze lokaal installeren door deaz aks install-cliopdracht uit te voeren.Controleer of uw doelregio wordt ondersteund in Azure Container Storage-regio's.
U kunt nu clusters met één knooppunt gebruiken, hoewel configuraties met meerdere knooppunten nog steeds worden aanbevolen.
Een VM-type kiezen dat ondersteuning biedt voor lokale NVMe
Lokale NVMe-schijven zijn alleen beschikbaar in bepaalde typen VM's, bijvoorbeeld voor opslag geoptimaliseerde VM's of versnelde GPU-VM's. Als u van plan bent om lokale NVMe-capaciteit te gebruiken, kiest u een van deze VM-grootten.
Voer de volgende opdracht uit om het VM-type op te halen dat wordt gebruikt met uw knooppuntgroep. Vervang <resource group> en <cluster name> door uw eigen waarden. U hoeft geen waarden op te geven voor PoolName of VmSize, dus behoud de query zoals hier wordt weergegeven.
az aks nodepool list --resource-group <resource group> --cluster-name <cluster name> --query "[].{PoolName:name, VmSize:vmSize}" -o table
De volgende uitvoer is een voorbeeld.
PoolName VmSize
---------- ---------------
nodepool1 standard_l8s_v3
Notitie
In Azure Container Storage (versie 2.x.x) kunt u nu clusters met minder dan drie knooppunten gebruiken.
Algemene tijdelijke volumes maken en koppelen
Volg deze stappen om een algemeen kortstondig volume te maken en te koppelen met behulp van Azure Container Storage.
1. Een opslagklasse maken
In tegenstelling tot eerdere versies die een aangepaste opslaggroepresource moesten maken, maakt Azure Container Storage (versie 2.x.x) gebruik van standaard Kubernetes-opslagklassen. Deze wijziging vereenvoudigt het opslagconfiguratieproces.
Volg deze stappen om een opslagklasse te maken met behulp van lokale NVMe.
Gebruik uw favoriete teksteditor om een YAML-manifest zoals
code storageclass.yamlte maken.Plak de volgende code en sla het bestand op.
apiVersion: storage.k8s.io/v1 kind: StorageClass metadata: name: local provisioner: localdisk.csi.acstor.io reclaimPolicy: Delete volumeBindingMode: WaitForFirstConsumer allowVolumeExpansion: truePas het YAML-manifestbestand toe om de opslaggroep te maken.
kubectl apply -f storageclass.yaml
2. Controleer de opslagklasse
Voer de volgende opdracht uit om te controleren of de opslagklasse is gemaakt:
kubectl get storageclass local
De uitvoer moet er ongeveer zo uitzien:
NAME PROVISIONER RECLAIMPOLICY VOLUMEBINDINGMODE ALLOWVOLUMEEXPANSION AGE
local localdisk.csi.acstor.io Delete WaitForFirstConsumer true 10s
3. Implementeer een pod met een algemeen kortstondig volume
Maak een pod met Fio (Flexible I/O Tester) voor benchmarking en workloadsimulatie die gebruikmaakt van een algemeen kortstondig volume.
Gebruik uw favoriete teksteditor om een YAML-manifest zoals
code fiopod.yamlte maken.Plak de volgende code en sla het bestand op.
kind: Pod apiVersion: v1 metadata: name: fiopod spec: nodeSelector: "kubernetes.io/os": linux containers: - name: fio image: mayadata/fio args: ["sleep", "1000000"] volumeMounts: - mountPath: "/volume" name: ephemeralvolume volumes: - name: ephemeralvolume ephemeral: volumeClaimTemplate: spec: volumeMode: Filesystem accessModes: ["ReadWriteOnce"] storageClassName: local resources: requests: storage: 10GiPas het YAML-manifestbestand toe om de pod te implementeren.
kubectl apply -f fiopod.yaml
4. Controleer de implementatie en voer benchmarks uit
Controleer of de pod draait.
kubectl get pod fiopod
U zou de pod in de status Running moeten zien. Zodra deze is uitgevoerd, kunt u een Fio-benchmarktest uitvoeren:
kubectl exec -it fiopod -- fio --name=benchtest --size=800m --filename=/volume/test --direct=1 --rw=randrw --ioengine=libaio --bs=4k --iodepth=16 --numjobs=8 --time_based --runtime=60
Permanente volumes maken en koppelen met tijdelijke opslagaantekening
Hoewel algemene kortstondige volumes worden aanbevolen voor tijdelijke opslag, ondersteunt Azure Container Storage ook permanente volumes met tijdelijke opslag wanneer dat nodig is voor compatibiliteit met bestaande workloads.
Notitie
Azure Container Storage (versie 2.x.x) maakt gebruik van de nieuwe aantekening localdisk.csi.acstor.io/accept-ephemeral-storage: "true" in plaats van de vorige acstor.azure.com/accept-ephemeral-storage: "true".
1. Een opslagklasse maken (indien nog niet gemaakt)
Als u geen opslagklasse hebt gemaakt die gebruikmaakt van lokale NVMe in de vorige sectie, maakt u er nu een:
Gebruik uw favoriete teksteditor om een YAML-manifest zoals
code storageclass.yamlte maken.Plak de volgende code en sla het bestand op.
apiVersion: storage.k8s.io/v1 kind: StorageClass metadata: name: local provisioner: localdisk.csi.acstor.io reclaimPolicy: Delete volumeBindingMode: WaitForFirstConsumer allowVolumeExpansion: truePas het YAML-manifestbestand toe om de opslaggroep te maken.
kubectl apply -f storageclass.yaml
2. Implementeer een stateful set met persistente volumes
Als u permanente volumeclaims wilt gebruiken die niet zijn gekoppeld aan de levenscyclus van de pod, moet u de localdisk.csi.acstor.io/accept-ephemeral-storage: "true" aantekening toevoegen. De gegevens op het volume zijn lokaal voor het knooppunt en gaan verloren als het knooppunt wordt verwijderd of als de pod naar een ander knooppunt wordt verplaatst.
Hier volgt een voorbeeld van een stateful set met behulp van permanente volumes met de tijdelijke opslagaantekening:
apiVersion: apps/v1
kind: StatefulSet
metadata:
name: statefulset-lcd-lvm-annotation
labels:
app: busybox
spec:
podManagementPolicy: Parallel
serviceName: statefulset-lcd
replicas: 10
template:
metadata:
labels:
app: busybox
spec:
nodeSelector:
"kubernetes.io/os": linux
containers:
- name: statefulset-lcd
image: mcr.microsoft.com/azurelinux/busybox:1.36
command:
- "/bin/sh"
- "-c"
- set -euo pipefail; trap exit TERM; while true; do date -u +"%Y-%m-%dT%H:%M:%SZ" >> /mnt/lcd/outfile; sleep 1; done
volumeMounts:
- name: persistent-storage
mountPath: /mnt/lcd
updateStrategy:
type: RollingUpdate
selector:
matchLabels:
app: busybox
volumeClaimTemplates:
- metadata:
name: persistent-storage
annotations:
localdisk.csi.acstor.io/accept-ephemeral-storage: "true"
spec:
accessModes: ["ReadWriteOnce"]
storageClassName: local
resources:
requests:
storage: 10Gi
Sla deze YAML op en pas deze toe om de stateful set met permanente volumes te maken:
kubectl apply -f statefulset-pvc.yaml
Opslag beheren
In deze sectie leert u hoe u de tijdelijke schijfcapaciteit van knooppunten controleert, de opslagcapaciteit uitbreidt en opslagresources verwijdert.
Tijdelijke schijfcapaciteit van knooppunten controleren
Op één knooppunt wordt een ephemerisch volume toegewezen. Wanneer u de grootte van uw tijdelijke volumes configureert, moet de grootte kleiner zijn dan de beschikbare capaciteit van de tijdelijke schijf van het enkele knooppunt.
Zorg ervoor dat er een StorageClass voor localdisk.csi.acstor.io bestaat. Voer de volgende opdracht uit om de beschikbare capaciteit van tijdelijke schijf voor elk knooppunt te controleren.
kubectl get csistoragecapacities.storage.k8s.io -n kube-system -o custom-columns=NAME:.metadata.name,STORAGE_CLASS:.storageClassName,CAPACITY:.capacity,NODE:.nodeTopology.matchLabels."topology\.localdisk\.csi\.acstor\.io/node"
U zou uitvoer moeten zien die lijkt op het volgende voorbeeld:
NAME STORAGE_CLASS CAPACITY NODE
csisc-2pkx4 local 1373172Mi aks-storagepool-31410930-vmss000001
csisc-gnmm9 local 1373172Mi aks-storagepool-31410930-vmss000000
Als u lege capaciteitsuitvoer tegenkomt, controleert u of er een StorageClass voor localdisk.csi.acstor.io bestaat. De csistoragecapacities.storage.k8s.io resource wordt alleen gegenereerd nadat er een StorageClass voor localdisk.csi.acstor.io bestaat.
Opslagcapaciteit uitbreiden
Omdat er bij tijdelijke schijfopslag gebruik wordt gemaakt van lokale resources op de AKS-clusterknooppunten, vereist het uitbreiden van de opslagcapaciteit het toevoegen van knooppunten aan het cluster.
Voer de volgende opdracht uit om een knooppunt toe te voegen aan uw cluster. Vervang <cluster-name>, <nodepool-name>, <resource-group>en <new-count> door uw waarden.
az aks nodepool scale --cluster-name <cluster-name> --name <nodepool-name> --resource-group <resource-group> --node-count <new-count>
Opslagbronnen verwijderen
Als u opslagbronnen wilt opschonen, moet u eerst alle PersistentVolumeClaims en/of PersistentVolumes verwijderen. Als u azure Container Storage StorageClass verwijdert, wordt uw bestaande PersistentVolumes/PersistentVolumeClaims niet automatisch verwijderd.
Als u een lokale opslagklasse wilt verwijderen, voert u de volgende opdracht uit:
kubectl delete storageclass local