your123 - stock.adobe.com
Praxistipps: Azure CSI-Treiber in AKS installieren und nutzen
Erfahren Sie, wie Azure CSI-Treiber in AKS die Bereitstellung von persistentem Speicher vereinfachen, mit Praxisbeispielen, YAML-Templates und Troubleshooting-Tipps.
Die Installation von CSI-Treibern (Container Storage Interface) in Azure beziehungsweise Azure Kubernetes Service (AKS) ermöglicht die flexible, deklarative und native Bereitstellung von persistentem Speicher für Containeranwendungen. Anstatt manuell Azure Disks, File Shares oder Blob Storage extern zu verwalten und in Pods einzuhängen, definiert der Administrator in Kubernetes StorageClasses und PersistentVolumeClaims (PVCs). Der CSI-Treiber übernimmt dann das Lifecycle-Management wie zum Beispiel Erstellen, Attach/Detach oder Erweitern.
Je nach Anwendungsfall wählt der Anwender zwischen Blockspeicher (Azure Disks), Dateifreigaben (Azure Files) oder objektbasiertem Speicher (Azure Blob CSI). Dieser Beitrag beschreibt den Aufbau, Voraussetzungen, Installation und Besonderheiten sowie Troubleshooting und praktische Beispiele. Er basiert auf offiziellen Microsoft-Dokumentationen und GitHub-Treiberinformationen.
Grundlagen und Architektur
In AKS werden CSI-Treiber als Erweiterung über Add-ons oder native Integration verwendet, um In-Tree-Treiber zu ersetzen oder zu ergänzen. Ab Kubernetes Version 1.21 ist in AKS die CSI-Migration standardmäßig aktiviert, und AKS verwendet in der Regel CSI-Treiber für Speicheroperationen.
Microsoft bietet für Azure primär drei Kategorien von CSI-Treibern:
- Azure Disk CSI Driver für Blockspeicher (Managed Disks)
- Azure Files CSI Driver für Dateifreigaben (SMB/NFS)
- Azure Blob CSI Driver (relativ neuer) für die Einbindung von Blob-Container-Speicher via Blobfuse oder NFS-Protokoll
Jeder dieser Treiber nutzt das standardisierte CSI-Interface und besteht meist aus:
- CSI-Controller-Komponenten (im Control-Plane-Bereich), die mit Azure-APIs interagieren (zum Beispiel für das Erstellen von Disks oder File Shares).
- CSI-Node-Komponenten (als DaemonSet auf jedem Node), die Attach/Detach, Mount/Umount und Bind-Funktionen implementieren.
- StorageClasses, PersistentVolumes (PV) und PersistentVolumeClaims (PVC) als Kubernetes-Ressourcen, die der Anwender definiert.
- Support für Features wie Volume-Expansion, Snapshot, Cloning (falls vom Treiber und Azure unterstützt).
Ein Vorteil gegenüber In-Tree-Treibern ist, dass CSI-Treiber unabhängig vom Kubernetes-Core weiterentwickelt werden können, neue Funktionen schneller verfügbar sind und eine deutlichere Trennung von Kubernetes und Cloud-spezifischem Code erreicht wird.
Voraussetzungen
Es gibt verschiedene Voraussetzungen, die eine Umgebung erfüllen muss, bevor der CSI-Treiber installiert werden kann. Administratoren sollten sicherstellen, dass folgende Parameter erfüllt sind.
- Ein vorhandenes AKS-Cluster in einer unterstützten Kubernetes-Version (mindestens 1.21 oder höher ist empfohlen, da CSI-Migration dort Standard ist).
- az aks CLI (Azure CLI) und kubectl müssen eingerichtet und mit passenden Berechtigungen verbunden sein.
- Im Azure-Abonnement sind die relevanten Dienste und APIs aktiviert, etwa Microsoft.Compute (für Disks), Microsoft.Storage (für Files / Blob), eventuell auch Microsoft.StorageSync
- Der AKS-Cluster muss das entsprechende CSI-Treiber-Add-on aktiviert haben (je nach Azure-Region und Cluster-Konfiguration). In vielen Fällen ist der Azure Disk CSI- und Azure File CSI-Treiber bereits integriert.
- Für Azure Files benötig der Admin eine Storage Account-Instanz oder es wird automatisch eine Storage Account-Ressource angelegt, die der CSI-Treiber verwaltet.
- Für das Blob-CSI muss der Admin überprüfen, ob der Blob-CSI-Treiber für das Cluster aktiviert ist, insbesondere bei bestehenden Clustern.
- Die Netzwerk- und Zugriffsstruktur entsprechend eingerichtet sein. Das heißt beispielsweise, dass Nodes Berechtigungen haben, auf die Storage-Ressourcen zuzugreifen und geeignete VNet/Subnet-Konfigurationen installiert sind.
Darüber hinaus lassen sich weitere Maßnahmen umsetzen, um eine erfolgreiche Installation des Treibers zu gewährleisten. So ist eine Planung der Zonen und Verfügbarkeit empfehlenswert. Azure Disks sind in der Regel zonal und Node und Volume müssen in derselben Verfügbarkeitszone (Availability Zone) liegen. Wichtig für die Skalierbarkeit ist, dass der Administrator die maximale Anzahl an Disks pro VM-SKU kennt, zum Beispiel wie viele Laufwerke erlaubt sind.
Auch die Snapshot- und Backup-Strategie muss geprüft und eventuell angepasst werden. Hier kann der Admin beispielsweise die Entscheidung treffen, ob Azure Backup oder Snapshots über das CSI eingesetzt werden sollen.
Bei größeren Umgebungen kann eine Migration von In-Tree-Treibern auf CSI erforderlich sein, insbesondere darum, da neuere AKS-Versionen den In-Tree-Treiber nicht mehr unterstützen.
Schritt 1: Prüfen und Aktivieren des CSI-Treibers
In vielen neueren AKS-Clustern sind die Azure Disk und Azure Files CSI-Treiber bereits integriert oder als Default-Add-on aktiviert. Laut Microsoft verwendet AKS in aktuellen Versionen den CSI-Treiber nativ.
Um festzustellen, ob der CSI-Treiber aktiv ist, sollte der Admin folgendes prüfen:
- In der AKS-Clusterkonfiguration zum Beispiel mit az aks show nachsehen, ob die CSI-Treiber für Disk, Files oder Blob aktiviert sind.
- In kubectl get csidrivers sicherstellen, ob disk.csi.azure.com, file.csi.azure.com oder blob.csi.azure.com aufgelistet sind.
- Kontrollieren, ob StorageClasses existieren, die als provisioner zum Beispiel disk.csi.azure.com oder file.csi.azure.com nutzen.
Falls der Treiber nicht aktiviert ist, kann ihn der Anwender über die AKS-CLI nachträglich in Betrieb nehmen. Wie das geschieht, hängt von der Azure-Version und Feature-Verfügbarkeit ab. Ein Beispiel für einen solchen Befehl ist der folgende:
az aks update --name <ClusterName> --resource-group <RG> --enable-addons azure-keyvault-secrets-provider,file-csi,blob-csi
Der IT-Verantwortliche muss dabei beachten, dass auch die tatsächlichen Add-on-Namen je nach Azure Version variieren können. Microsoft bietet hier entsprechende Dokumentationen.
Darüber hinaus gilt es zu vermeiden, den Treiber manuell aus GitHub bereitzustellen, wenn er als integriertes Feature verfügbar ist, da die Managed-Version durch Azure gewartet wird.
Schritt 2: StorageClass für Azure Disk definieren
Für die weiteren Schritte fokussieren wir auf Azure Disk, das Block Storage. Für denBlockspeicher via Managed Disks erstellt der Admin eine StorageClass, die den Azure Disk CSI-Treiber (provisioner disk.csi.azure.com) verwendet.
Ein Beispiel hierfür ist:
apiVersion: storage.k8s.io/v1
kind: StorageClass
metadata:
name: managed-csi
provisioner: disk.csi.azure.com
parameters:
skuname: Premium_LRS
kind: Managed
cachingmode: ReadOnly
# optional: zones: "1,2,3" (je nach Verfügbarkeitszonen)
volumeBindingMode: WaitForFirstConsumer
allowVolumeExpansion: true
In diesem Beispiel definiert sukname den Typ der Managed Disk, beispielsweise Standard_LRS, Premium_LRS, StandardSSD_ZRS oder Premium_ZRS. Mit kind: Managed wird spezifiziert, dass es sich um Azure Managed Disk handelt, während der cachingmode je nach Leistungs- und Konsistenzanforderung definiert wird, in diesem Falle als ReadOnly (nur Lesezugriffe).
Die Codezeile volumeBindingMode: WaitForFirstConsumer sorgt dafür, dass die Zone, in der das Volume erstellt wird, erst dann bestimmt wird, wenn der Pod geplant ist, um Disk/Node-Zone-Mismatch zu vermeiden. Mit anderen Worten wird hier eine Disk-Node-Diskrepanz verhindert. Eine nachträgliche Erweiterung des Volumes lässt sich mit allowVolumeExpansion: true umsetzen, ohne dabei eine Downtime zu riskieren. Optional kann der IT-Verantwortliche Zonen explizit angeben, falls er eine zonale Verteilung erzwingen will.
Die StorageClass lässt sich dann mit dem folgenden Befehl erstellen und auch aktualisieren:
kubectl apply -f storageclass-azuredisk.yaml
Um sicherzustellen, dass die StorageClass richtig angelegt ist, kann der Admin diese mit diesem Befehl auflisten:
kubectl get sc
Hier werden verschiedene Informationen angezeigt, darunter der Name, der Provisioner (Treiber), die Reclaim Policy (Löschverhalten) und das Alter der StorageClass.
In neueren AKS-Versionen existieren oft vorinstallierte StorageClasses wie managed-csi und managed-csi-premium, die automatisch den Azure Disk CSI-Treiber einsetzen.
Schritt 3: PersistentVolumeClaim (PVC) anlegen
Mit der StorageClass kann man nun eine PVC erstellen, die automatisch eine Managed Disk provisioniert. Dies wird hiermit umgesetzt:
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
name: azure-disk-pvc
spec:
accessModes:
- ReadWriteOnce
storageClassName: managed-csi
resources:
requests:
storage: 20Gi
kubectl apply -f pvc-azuredisk.yaml
Sobald ein Pod diese PVC verwendet, erstellt der CSI-Treiber eine Azure Managed Disk im Hintergrund und verbindet sie mit der Node, auf dem der Pod läuft. Der PVC-Status sollte danach Bound sein.
Hier gibt es zudem weitere Parameter zu beachten. So unterstützen Azure Disks nur ReadWriteOnce, also nur eine Node zur gleichen Zeit. Mehrere Pods auf derselben Node können denselben PVC verwenden, solange sie auf dieser Node zusammen ausgeführt werden.
Der Admin muss wissen, dass die erzeugte Disk ist in der Azure-Resource-Gruppe sichtbar ist, meist in der Node Resource Group von AKS. Es ist auch möglich, statisch existierende Disks als PVs zu referenzieren, das ist aber ein Spezialfall, der mehr manuelle Konfiguration erfordert.
Schritt 4: Funktion prüfen und Verwendungen testen
Nach dem Erstellen der PVC und der StorageClass kann der Administrator die Funktionsfähigkeit testen. Dafür prüfen Sie zuerst, ob der CSI-Treiber wie erwartet funktioniert beziehungsweise aktiviert ist, ebenso die Node- und Controller-Komponenten. Das erfolgt mittels:
kubectl get pods -n kube-system | grep azure
Der Admin sollte die Pods als azure-disk-csi-node und azure-disk-csi-controller angezeigt sehen. Die StorageClass wird mit kubectl get storageclass aufgelistet und mit kubectl get pvc wird der Status abgerufen, der als Bound angegeben sein sollte. In der Azure-Portal-Oberfläche sollte die neu erstellte Disk unter Disks sichtbar sein
Im sicherzustellen, dass alles wie gewünscht operiert, kann der Administrator einen Test-Pod mit Mount bereitstellen. Dafür gibt er folgendes ein:
apiVersion: v1
kind: Pod
metadata:
name: disk-test-pod
spec:
containers:
- name: test-container
image: ubuntu
command: ["sleep", "3600"]
volumeMounts:
- name: test-volume
mountPath: /data
volumes:
- name: test-volume
persistentVolumeClaim:
claimName: azure-disk-pvc
Dann kann er mit kubectl exec prüfen, ob Schreib-/Leseoperationen im Pfad /data funktionieren. Als Erweiterung kann man Snapshot- oder Cloning-Funktionen testen.
Besonderheiten, technische Details und Tipps
Die Nutzung des Azure Disk CSI-Treibers bietet weit mehr als nur die grundlegende Bereitstellung von Storage. Um die volle Leistung und Zuverlässigkeit zu erreichen, sollten Sie einige wichtige Funktionen und Besonderheiten kennen.
Snapshot, Restore, Cloning
Für effiziente Backup-Strategien und die Replikation von Daten ist die Unterstützung von Snapshots und dem Klonen von Volumes durch den Azure Disk CSI-Treiber unverzichtbar. Diese Funktionen erlauben Point-in-Time-Sicherungen Ihrer Persistent Volumes und die darauffolgende Wiederherstellung oder das Erstellen identischer Kopien, sofern dies von Azure unterstützt wird.
Volume Expansion
Die Anforderung an Speicherplatz wächst oft mit der Zeit. Glücklicherweise unterstützt der CSI-Treiber die Erweiterung von Volumes, auch online, ohne dass die Anwendung neu gestartet werden muss. Voraussetzung ist, dass dies sowohl von der eingesetzten Kubernetes-Version als auch der Treiberversion unterstützt wird.
Skalierbarkeit und Limits: Maximale Disks pro VM-SKU
Bei der Planung der Workloads ist es essenziell, die Grenzen der zugrunde liegenden VM-SKUs zu beachten. Jede VM-Klasse hat ein striktes Limit, wie viele Datenträger sie anbinden kann. Wenn Sie planen, viele PVCs (Persistent Volume Claims) pro Node zu erstellen, müssen Sie diese Limits im Voraus prüfen, um unliebsame Überraschungen zu vermeiden.
Topologie und Zonenbewusstsein
Azure Disks sind zonengebunden. Das bedeutet, ein Pod kann nur auf eine Disk zugreifen, die sich in derselben Verfügbarkeitszone befindet. Der WaitForFirstConsumer-Modus ist hier der Schlüssel: Er verzögert die Erstellung der Disk, bis ein Pod den PVC beansprucht, und wählt dann automatisch die Zone des Pods aus. So wird verhindert, dass eine Disk in einer Zone erstellt wird, in der kein Pod sie nutzen kann. Zusätzlich unterstützt der Treiber in verfügbaren Regionen auch zonenredundante Storage-Klassen (ZRS) für erhöhte Ausfallsicherheit.
Alternative Speicherlösungen: Azure Files und Blob Storage
Nicht jeder Anwendungsfall ist für blockbasierte Disks geeignet. Für andere Szenarien bietet Azure zwei weitere CSI-Treiber.
Azure Files CSI-Treiber für geteilte Volumes
Wenn Sie Dateifreigaben benötigen, die von mehreren Pods gleichzeitig gemountet werden können (ReadWriteMany), ist der Azure Files CSI-Treiber die richtige Wahl. Dieser verwendet den Provisioner file.csi.azure.com und kann sowohl SMB- als auch NFS-Protokolle nutzen. Für einen schnellen Start stehen integrierte StorageClasses wie azurefile-csi (Standard) und azurefile-csi-premium zur Verfügung.
Azure Blob CSI-Treiber für unstrukturierte Daten
Für spezielle Szenarien mit großen Mengen unstrukturierter Daten, wie Logs oder Backups, kann die direkte Einbindung von Blob Storage sinnvoll sein. Der Blob-CSI-Treiber macht dies möglich, indem er entweder Blobfuse oder das NFSv3-Protokoll unterstützt. Hierfür gibt es entsprechende StorageClasses, zum Beispiel azureblob-fuse-premium. Beachten Sie jedoch, dass das Verkleinern (Shrinking) von Volumes derzeit nicht unterstützt wird.
Darüber hinaus sollen weitere wichtige strategische Überlegungen in den Prozess einfließen, darunter unter anderem die folgenden.
Migration von In-Tree zu CSI
Falls Sie noch ältere Kubernetes-Cluster mit den traditionellen In-Tree-Azure-Treibern (erkennbar an kubernetes.io/azure-disk) betreiben, ist eine Migration zum CSI-Treiber dringend zu empfehlen. Zukünftige AKS-Versionen werden die alten Treiber nicht mehr vollständig unterstützen.
Managed vs. Manuelle Treiber
Aus Betriebssicht ist die Nutzung der von AKS verwalteten CSI-Treiber der manuellen Installation aus GitHub vorzuziehen. Microsoft aktualisiert und unterstützt diese verwalteten Treiber automatisch, was den Wartungsaufwand reduziert und die Stabilität erhöht.
Performance und Kosten im Blick behalten
Zuletzt sollten Performance und Kosten nicht vernachlässigt werden. Parameter wie der cachingmode, die Netzwerklatenz und die Wahl zwischen Standard- oder Premium-Speicherklassen (inklusive ZRS) haben direkten Einfluss auf die Anwendungsleistung. Gleichzeitig verursachen nicht nur die reinen Speicherkosten von Managed Disks und Azure Files Ausgaben, sondern auch Snapshots, IOPS und die reservierte Speichergröße. Eine durchdachte Lifecycle-Strategie, die nicht mehr benötigte Volumes und Snapshots zeitnah löscht, ist essenziell für die Kosteneffizienz.
Troubleshooting
Trotz der Integration der CSI-Treiber in AKS kann es in der Praxis zu Fehlern bei Provisionierung, Mounting oder Bindung von Volumes kommen. Nachfolgend listen wir die häufigsten Ursachen und deren Lösungsmöglichkeiten auf und geben praktische YAML-Beispiele.
PVC bleibt im Status Pending
Die Ursache für einen PVC, der im Status Pending bleibt ist, dass der Pod, der das Volume benötigt, noch nicht geplant wurde, und die StorageClass das WaitForFirstConsumer nutzt. Um dies zu beheben, muss der Admin einen Pod erstellen, der den PVC verwendet. Danach wird das Volume provisioniert. Daraufhin kann dies wie folgt überprüft werden:
kubectl describe pvc <PVC_NAME>
Dort steht meist der Grund im Event-Abschnitt, beispielsweise waiting for first consumer.
PVC- oder Volume-Erstellung schlägt fehl
Hierbei erhält der Admin die Fehlermeldung could not create volume. Die Ursache sind fehlende IAM-/RBAC-Berechtigungen oder API-Zugriff des Managed Identity des AKS-Clusters. Zunächst müssen Sie prüfen, ob der Cluster über eine System- oder Benutzeridentität verfügt (az aks show --query identity). Danach muss sichergestellt sein, dass diese Identität im Azure-Ressourcenbereich Contributor- oder Disk Contributor-Rollenrechte besitzt. Alternativ kann der IT-Verantwortliche die Berechtigung gezielt auf die Resource Group beschränken, in der die Disks erzeugt werden.
Volume wird nicht gemountet
In diesem Fall verbleibt der Pod im Status ContainerCreating. Der Grund hierfür ist, dass die Node das Volume nicht anhängen kann, beispielsweise wegen eines Zonen-Mismatch oder zu vieler Disks pro virtueller Maschine (VM). Im ersten Schritt muss der Pod kontrolliert werden:
kubectl describe pod <POD_NAME>
Die hier aufgelisteten Events enthalten Meldungen wie AttachVolume.Attach failed for volume. Nun prüft der Admin, ob Node und Disk in der gleichen Verfügbarkeitszone (Availability Zone) liegen:
az disk show -n <DISK_NAME> --resource-group <RG> --query zones
az vm show -n <NODE_VM> --query zones
Wenn unterschiedliche Zonen vorhanden sind, muss die StorageClass auf WaitForFirstConsumer gesetzt werden oder der Admin gibt die Zonen explizit an.
Volume Expansion schlägt fehl
Für dieses Problem können verschiedene Gründe verantwortlich sein. Entweder erlaubt die StorageClass keine Erweiterung (allowVolumeExpansion: false) oder der PVC wird von einem alten In-Tree-Treiber verwaltet. Das heißt, dass die StorageClass überprüft werden muss:
kubectl get sc <SC_NAME> -o yaml
Wenn nötig, muss der Anwender den PVC löschen und mit CSI-StorageClass neu erstellen. Allgemein sollte sichergestellt werden, dass das AKS-Cluster auf Kubernetes 1.23 und jünger läuft, da diese Versionen weitaus stabiler sind.
Permission denied bei Azure Files Mount
Wird bei Azure Files Mount die Erlaubnis verweigert, kann es sein, dass der SMB-/NFS-Mount Point nicht korrekt ist oder die Secrets für Azure Storage Account fehlen. In diesem Fall prüfen Sie Secret mit Storage-Account-Name und Key:
kubectl get secret azure-storage-secret -o yaml
Die StorageClass muss secretName korrekt referenzieren.
Bei NFS-Freigaben muss der Administrator prüfen, dass die AKS-Nodes in derselben VNet-Region und Subnet liegen wie die File-Share-Ressource.
Fehler beim Snapshot und Restore
In diesem Fall ist häufig der Snapshot-Controller nicht installiert oder CRDs nicht vorhanden. Dies lässt sich mit folgendem Befehl kontrollieren:
kubectl get crd | grep snapshot
Falls hier kein Ergebnis angezeigt wird, muss in der Regel der Snapshot-Controller nachinstalliert oder mit --enable-csi-snapshot-controller im AKS-Cluster aktiviert werden, was je nach Version unterschiedlich sein kann.
Praktische YAML-Beispiele
Im Folgenden einige vollständige Manifeste für gängige Anwendungsfälle bei der Installation.
StorageClass für Premium Managed Disks
apiVersion: storage.k8s.io/v1
kind: StorageClass
metadata:
name: managed-csi-premium
provisioner: disk.csi.azure.com
parameters:
skuname: Premium_LRS
kind: Managed
cachingmode: ReadOnly
reclaimPolicy: Delete
volumeBindingMode: WaitForFirstConsumer
allowVolumeExpansion: true
PersistentVolumeClaim für Azure Disk
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
name: azure-disk-pvc
spec:
accessModes:
- ReadWriteOnce
storageClassName: managed-csi-premium
resources:
requests:
storage: 20Gi
Test-Pod mit Disk-Mount
apiVersion: v1
kind: Pod
metadata:
name: disk-test-pod
spec:
containers:
- name: test-container
image: ubuntu
command: ["sleep", "3600"]
volumeMounts:
- name: azure-disk
mountPath: /mnt/data
volumes:
- name: azure-disk
persistentVolumeClaim:
claimName: azure-disk-pvc
Azure Files mit Secret (SMB-Freigabe)
apiVersion: v1
kind: Secret
metadata:
name: azure-storage-secret
type: Opaque
stringData:
azurestorageaccountname: <STORAGE_ACCOUNT_NAME>
azurestorageaccountkey: <STORAGE_ACCOUNT_KEY>
---
apiVersion: storage.k8s.io/v1
kind: StorageClass
metadata:
name: azurefile-csi
provisioner: file.csi.azure.com
parameters:
skuName: Premium_LRS
protocol: smb
secretName: azure-storage-secret
reclaimPolicy: Delete
allowVolumeExpansion: true
---
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
name: azurefile-pvc
spec:
accessModes:
- ReadWriteMany
storageClassName: azurefile-csi
resources:
requests:
storage: 100Gi
---
apiVersion: v1
kind: Pod
metadata:
name: azurefile-test
spec:
containers:
- name: app
image: nginx
volumeMounts:
- name: azurefile-vol
mountPath: /usr/share/nginx/html
volumes:
- name: azurefile-vol
persistentVolumeClaim:
claimName: azurefile-pvc
Snapshot eines Azure Disk PVC
apiVersion: snapshot.storage.k8s.io/v1
kind: VolumeSnapshotClass
metadata:
name: csi-snapshot-class
driver: disk.csi.azure.com
deletionPolicy: Delete
---
apiVersion: snapshot.storage.k8s.io/v1
kind: VolumeSnapshot
metadata:
name: disk-snapshot
spec:
volumeSnapshotClassName: csi-snapshot-class
source:
persistentVolumeClaimName: azure-disk-pvc
Ob der Snapshot erfolgreich eingerichtet wurde, lässt sich einfach überprüfen:
kubectl get volumesnapshot
Wiederherstellung aus Snapshot
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
name: restored-disk-pvc
spec:
dataSource:
name: disk-snapshot
kind: VolumeSnapshot
apiGroup: snapshot.storage.k8s.io
accessModes:
- ReadWriteOnce
storageClassName: managed-csi-premium
resources:
requests:
storage: 20Gi
Azure Blob CSI mit Blobfuse2
apiVersion: storage.k8s.io/v1
kind: StorageClass
metadata:
name: azureblob-fuse2
provisioner: blob.csi.azure.com
parameters:
skuName: Premium_LRS
containerName: kube-blobs
protocol: fuse2
reclaimPolicy: Delete
allowVolumeExpansion: false
---
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
name: azureblob-pvc
spec:
accessModes:
- ReadWriteMany
storageClassName: azureblob-fuse2
resources:
requests:
storage: 50Gi
Hier ist die Voraussetzung, dass der Blob-CSI-Treiber im AKS-Cluster aktiviert und der Storage Account vorhanden ist.
Auf einen Blick: Den CSI Treiber in Azure Storage nutzen
Die Implementierung von CSI-Treibern in Azure AKS ermöglicht eine native, deklarative und automatisierte Verwaltung persistenten Speichers in Kubernetes. Der Azure Disk CSI-Treiber deckt Blockspeicher mit Managed Disks ab, während Azure Files (SMB/NFS) und Azure Blob CSI ergänzende Optionen für Dateifreigaben oder Objektzugriff bieten.
Wichtige Designentscheidungen betreffen StorageClasses (Typ, Zonen, Caching), PVCs, Topologie-Strategien (WaitForFirstConsumer), Snapshots und Erweiterbarkeit. Außerdem ist eine saubere Migration von In-Tree-Treibern zu CSI essenziell in Umgebungen, die älter sind.