Hinweis
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, sich anzumelden oder das Verzeichnis zu wechseln.
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, das Verzeichnis zu wechseln.
Wenn mehrere Pods gleichzeitigen Zugriff auf dasselbe Speichervolume benötigen, können Sie Azure Blob Storage verwenden, um eine Verbindung mit Blobfuse oder Network File System (NFS) herzustellen.
In diesem Artikel erfahren Sie, wie Sie Azure Blob Storage-Container dynamisch und statisch erstellen, die von mehreren Pods in einem Azure Kubernetes Service (AKS)-Cluster verwendet werden.
Voraussetzungen
Der Azure Blob Storage CSI-Treiber , der auf Ihrem AKS-Cluster aktiviert ist.
Ein Speicherkonto, das NFS v3 aktiviert ist, damit Sie ein persistentes Volume mithilfe des NFS-Protokolls bereitstellen können. Sie können NFS v3 nicht für ein vorhandenes Speicherkonto aktivieren. Weitere Informationen finden Sie unter Erstellen eines NFS v3-Kontos.
Führen Sie die folgenden Aufgaben aus, um ein Azure Data Lake Storage Konto bei Verwendung der Blobfuse-Bereitstellung zu unterstützen:
- Geben Sie
isHnsEnabled: "true"zum Erstellen eines Data Lake Storage Kontos mithilfe des Treibers in der dynamischen Bereitstellung in den Parametern der Speicherklasse an. - Wenn Sie den Blobfuse-Zugriff auf ein Data Lake Storage Konto in der statischen Bereitstellung aktivieren möchten, geben Sie die Bereitstellungsoption
--use-adls=trueim persistenten Volume an. - Wenn Sie ein Speicherkonto mit hierarchischem Namespace aktivieren möchten, sollten vorhandene persistente Volumes mittels der Einbindungsoption
--use-adls=trueerneut eingebunden werden.
- Geben Sie
Standardmäßig befindet sich der Blobfuse-Cache im
/mntVerzeichnis. Wenn die VM-SKU einen temporären Datenträger bereitstellt, wird das/mntVerzeichnis auf dem temporären Datenträger bereitgestellt. Wenn die VM-SKU jedoch keinen temporären Datenträger bereitstellt, wird das/mntVerzeichnis auf dem Betriebssystemdatenträger bereitgestellt, können Sie die Mount-Option--tmp-path=festlegen, um ein anderes Cacheverzeichnis anzugeben.
Verwenden von integrierten Speicherklassen zum Erstellen dynamischer PVs mit Azure Blob Storage
Eine Speicherklasse wird verwendet, um zu definieren, wie ein Azure-Blobspeichercontainer erstellt wird. In der Knotenressourcengruppe wird automatisch ein Speicherkonto erstellt, das mit der Speicherklasse verwendet wird, um den Azure-Blobspeichercontainer aufzunehmen. Wenn Sie CSI-Speichertreiber in AKS verwenden, gibt es zwei zusätzliche integrierte Speicherklassen StorageClasses, die den Azure Blob Storage-CSI-Treiber verwenden.
Die Freigaberichtlinie für beide Speicherklassen stellt sicher, dass beim Löschen eines persistenten Volumes auch der zugrunde liegende Azure-Blobspeicher gelöscht wird. Die Speicherklassen konfigurieren den Container auch so, dass er standardmäßig erweiterbar ist, da der Parameter set allowVolumeExpansion auf true festgelegt ist.
Hinweis
Das Verkleinern persistenter Volumes wird nicht unterstützt.
Sie können einen der folgenden Azure Storage-Redundanz-SKUs für den skuname Parameter in der Speicherklassendefinition auswählen:
- Standard_LRS: Lokal redundanter Standardspeicher
- Premium_LRS: Lokal redundanter Premium-Speicher
- Standard_ZRS: Standard – zonenredundanter Speicher
- Premium_ZRS: zonenredundanter Premiumspeicher (ZRS)
- Standard_GRS: Standardmäßiger georedundanter Speicher
- Standard_RAGRS: Standardmäßiger georedundanter Lesezugriffsspeicher
Erstellen benutzerdefinierter Speicherklassen für dynamische PVs mit Azure Blob Storage
Die Standardspeicherklassen eignen sich für die meisten Szenarien. In einigen Fällen sollten Sie ihre eigene Speicherklasse mit Ihren eigenen Parametern anpassen lassen. In diesem Abschnitt stellen wir zwei Beispiele bereit: eine mit DEM NFS-Protokoll und eine mit Blobfuse.
Beispiel für eine benutzerdefinierte Speicherklasse mithilfe des NFS-Protokolls
Das Manifest in diesem Beispiel bindet einen Blob-Speichercontainer mithilfe des NFS-Protokolls ein. Sie können ihn verwenden, um den tags Parameter hinzuzufügen.
Erstellen Sie eine Datei namens
blob-nfs-sc.yamlund fügen Sie sie in das folgende Beispielmanifest ein:apiVersion: storage.k8s.io/v1 kind: StorageClass metadata: name: blob-nfs provisioner: blob.csi.azure.com parameters: protocol: nfs tags: environment=Development volumeBindingMode: Immediate allowVolumeExpansion: trueErstellen Sie die Speicherklasse mit dem
kubectl applyBefehl:kubectl apply -f blob-nfs-sc.yamlIhre Ausgabe sollte in etwa wie die folgende Beispielausgabe aussehen:
storageclass.storage.k8s.io/blob-nfs created
Beispiel für eine benutzerdefinierte Speicherklasse mit Blobfuse
Das Manifest in diesem Beispiel verwendet Blobfuse und bindet einen Blob-Speichercontainer ein. Sie können ihn verwenden, um den skuName Parameter zu aktualisieren.
Erstellen Sie eine Datei namens
blobfuse-sc.yamlund fügen Sie sie in das folgende Beispielmanifest ein:apiVersion: storage.k8s.io/v1 kind: StorageClass metadata: name: blob-fuse provisioner: blob.csi.azure.com parameters: skuName: Standard_GRS # available values: Standard_LRS, Premium_LRS, Standard_GRS, Standard_RAGRS reclaimPolicy: Delete volumeBindingMode: Immediate allowVolumeExpansion: true mountOptions: - -o allow_other - --file-cache-timeout-in-seconds=120 - --use-attr-cache=true - --cancel-list-on-mount-seconds=10 # prevent billing charges on mounting - -o attr_timeout=120 - -o entry_timeout=120 - -o negative_timeout=120 - --log-level=LOG_WARNING # LOG_WARNING, LOG_INFO, LOG_DEBUG - --cache-size-mb=1000 # Default will be 80% of available memory, eviction will happen beyond that.Erstellen Sie die Speicherklasse mit dem
kubectl applyBefehl:kubectl apply -f blobfuse-sc.yamlIhre Ausgabe sollte in etwa wie die folgende Beispielausgabe aussehen:
storageclass.storage.k8s.io/blob-fuse created
Speicherklassenparameter für dynamische PVs mit Azure Blob Storage
Verwenden Sie die folgenden Parametergruppen, um eine benutzerdefinierte Speicherklasse für Ihre persistenten Volumeansprüche (PVCs) mit Azure Blob-Speicher zu definieren:
-
Speicherkonto:
skuName, ,location,resourceGroup,storageAccountsubscriptionID,networkEndpointType,accessTier,allowBlobPublicAccesspublicNetworkAccesstagsallowSharedKeyAccessrequireInfraEncryptionund .matchTags -
Container und Endpunkt:
protocol, ,containerNamePrefixuseDataPlaneAPIservercontainerNamestorageEndpointSuffix,softDeleteBlobs, und .softDeleteContainersenableBlobVersioning -
BlobFuse:
storeAccountKey, ,getLatestAccountKey,secretName,secretNamespace, undisHnsEnabled. -
NFS:
mountPermissionsundfsGroupChangePolicy. -
Virtuelles Netzwerk:
vnetResourceGroup,vnetName, ,subnetNameundvnetLinkName.
Konfigurieren von Speicherkontoparametern für dynamische PVs mit Azure Blob-Speicher
Verwenden Sie die folgenden Parameter, um das Azure Speicherkonto für ein dynamisch bereitgestelltes PV zu konfigurieren:
| Name | Bedeutung | Verfügbare Werte | Erforderlich | Standardwert |
|---|---|---|---|---|
skuName |
Geben Sie einen Azure-Speicherkontotyp an (Alias: storageAccountType). |
Standard_LRS, Premium_LRS, Standard_GRS, Standard_RAGRS, , Standard_ZRS, Premium_ZRS |
Nein | Standard_LRS |
location |
Geben Sie einen Azure-Speicherort an. | eastus |
Nein | Wenn er leer ist, verwendet der Treiber denselben Speicherortnamen wie der aktuelle Cluster. |
resourceGroup |
Geben Sie einen Azure-Ressourcengruppennamen an. | myResourceGroup | Nein | Ohne Angabe verwendet der Treiber den gleichen Ressourcengruppennamen wie der aktuelle Cluster. |
subscriptionID |
Geben Sie die Azure-Abonnement-ID an, in der das BLOB-Speicherverzeichnis erstellt wird. | Azure-Abonnement-ID | Nein | Ist dieser Wert nicht leer, muss resourceGroup angegeben werden. |
storageAccount |
Geben Sie einen Azure-Speicherkontonamen an. | storageAccountName | Nein | Wenn kein bestimmter Speicherkontoname angegeben wird, sucht der Treiber nach einem geeigneten Speicherkonto, das den Kontoeinstellungen innerhalb derselben Ressourcengruppe entspricht. Wenn ein übereinstimmende Speicherkonto nicht gefunden werden kann, wird ein neues Konto erstellt. Falls jedoch ein Speicherkontoname angegeben wird, muss das Speicherkonto bereits vorhanden sein. |
networkEndpointType |
Geben Sie den Netzwerkendpunkttyp für das vom Treiber erstellte Speicherkonto an. Wenn Sie angeben privateEndpoint, erstellt der Treiber einen privaten Endpunkt für das Speicherkonto. In anderen Fällen erstellt der Treiber einen Dienstendpunkt für das NFS-Protokoll. |
"", privateEndpoint |
Nein |
"". Für einen AKS-Cluster fügen Sie den Namen des AKS-Clusters der Contributor-Rolle in der Ressourcengruppe hinzu, die das virtuelle Netzwerk hostet. |
accessTier |
Geben Sie die Zugriffsebene für das Speicherkonto an. |
Hot, CoolPremium |
Nein | Verwendet die Standardebene für den ausgewählten Speicherkontotyp. Premium-Konten unterstützen nur Premium. |
allowBlobPublicAccess |
Zulassen oder Verbieten des öffentlichen Zugriffs auf alle Blobs oder Container für ein vom Treiber erstelltes Speicherkonto. |
true, false |
Nein | false |
allowSharedKeyAccess |
Zulassen oder Verbieten des Zugriffs auf gemeinsam genutzte Schlüssel für ein speicherkonto, das vom Treiber erstellt wurde. Dieser Parameter gilt für NFS-Bereitstellungen und BlobFuse-Bereitstellungen, die verwaltete Identität verwenden. |
true, false |
Nein | true |
requireInfraEncryption |
Erfordert eine sekundäre Ebene der plattformverwalteten Verschlüsselung für ruhende Daten in einem Speicherkonto, das vom Treiber erstellt wurde. |
true, false |
Nein | false |
publicNetworkAccess |
Legen Sie die Eigenschaft für den Zugriff auf das öffentliche Netzwerk für ein Speicherkonto fest, das vom Treiber erstellt wurde. |
Enabled, DisabledSecuredByPerimeter |
Nein | Verwendet die Azure Storage Standardeinstellung. |
tags |
Erstellen Sie Tags für ein neues Speicherkonto. | Tagformat: foo=aaa,bar=bbb |
Nein | "" |
matchTags |
Stimmen Sie Tags ab, wenn der Treiber nach einem geeigneten Speicherkonto sucht. |
true, false |
Nein | false |
Konfigurieren von Container- und Endpunktparametern für dynamische PVs mit Azure Blob Storage
Verwenden Sie die folgenden Parameter, um den Container, das Bereitstellungsprotokoll, den Speicherendpunkt und tags für eine dynamisch bereitgestellte PV zu konfigurieren:
| Name | Beschreibung | Verfügbare Werte | Erforderlich | Standardwert |
|---|---|---|---|---|
protocol |
Geben Sie BlobFuse, BlobFuse2 oder NFS v3 mount an. |
fuse, fuse2nfs |
Nein | fuse |
containerName |
Geben Sie den Namen des vorhandenen Containers (Verzeichnisses) an. | container | Nein | Wenn der Treiber leer ist, erstellt der Treiber einen neuen Containernamen, beginnend mit pvc-fuse blobfuse oder pvc-nfs für NFS v3. |
containerNamePrefix |
Geben Sie das Vom Treiber erstellte Azure-Speicherverzeichnispräfix an. | Darf nur Kleinbuchstaben, Zahlen und Bindestriche enthalten und darf maximal 21 Zeichen lang sein. | Nein | |
server |
Geben Sie den Domänennamen des Azure-Speicherkontos an. | Vorhandener DNS-Domänenname des Speicherkontos, z. B <storage-account>.blob.core.windows.net. . |
Nein | Wenn leer, verwendet der Treiber standardmäßige <storage-account>.blob.core.windows.net oder andere souveräne Cloudspeicherkonto-DNS-Domänennamen. |
storageEndpointSuffix |
Geben Sie das Suffix für den Azure-Speicherendpunkt an. | core.windows.net |
Nein | Ohne Angabe verwendet der Treiber das Standardsuffix für den Speicherendpunkt gemäß der Cloudumgebung. |
useDataPlaneAPI |
Verwenden Sie die Azure Storage Datenebenen-API zum Erstellen und Löschen von Containern. Diese Option kann die Drosselung von Speicherressourcenanbietern vermeiden, schlägt jedoch fehl, wenn die Firewall des Speicherkontos oder virtuelle Netzwerkregeln den Zugriff auf die Datenebene blockieren. |
true, false |
Nein | false |
softDeleteBlobs |
Aktivieren Sie das vorläufige Löschen für Blobs, und geben Sie den Aufbewahrungszeitraum in Tagen an. | Ein Aufbewahrungszeitraum, z. B. 7 |
Nein | Deaktiviert |
softDeleteContainers |
Aktivieren Sie das vorläufige Löschen für Container, und geben Sie den Aufbewahrungszeitraum in Tagen an. | Ein Aufbewahrungszeitraum, z. B. 7 |
Nein | Deaktiviert |
enableBlobVersioning |
Blob-Versionsverwaltung aktivieren. Sie können die Versionsverwaltung nicht aktivieren, wenn protocol das ist nfs oder isHnsEnabled ist true. |
true, false |
Nein | false |
Konfigurieren von BlobFuse-Parametern für dynamische PVs mit Azure Blob Storage
Die folgenden Parameter gelten nur, wenn Sie BlobFuse für eine dynamisch bereitgestellte PV verwenden:
| Name | Beschreibung | Verfügbare Werte | Erforderlich | Standardwert |
|---|---|---|---|---|
storeAccountKey |
Geben Sie den Speicherkontoschlüssel für Kubernetes geheim an. Hinweis: false bedeutet, dass der Treiber die Kubelet-Identität verwendet, um den Kontoschlüssel zu erhalten. |
true,false |
Nein | true |
getLatestAccountKey |
Rufen Sie den neuesten Speicherkontoschlüssel basierend auf der Erstellungszeit ab, anstatt den ersten Schlüssel zu verwenden. |
true, false |
Nein | false |
secretName |
Geben Sie den geheimen Namen zum Speichern des Kontoschlüssels an. | Nein | ||
secretNamespace |
Geben Sie den Namespace des Geheimnisses zum Speichern des Kontoschlüssels an. |
default,kube-system, usw. |
Nein | PVC-Namespace |
isHnsEnabled |
Aktivieren Hierarchical namespace sie für ein Azure Data Lake Storage Konto. |
true,false |
Nein | false |
Konfigurieren von NFS-Parametern für dynamische PVs mit Azure Blob Storage
Der folgende Parameter gilt nur, wenn Sie NFS für eine dynamisch bereitgestellte PV verwenden:
| Name | Beschreibung | Verfügbare Werte | Erforderlich | Standardwert |
|---|---|---|---|---|
mountPermissions |
Geben Sie Berechtigungen für bereitgestellte Ordner an. | Der Standardwert lautet 0777. Wenn auf 0 gesetzt, führt der Treiber chmod nach dem Mounten nicht aus. |
Nein | 0777 |
fsGroupChangePolicy |
Geben Sie an, wie der Treiber den Volumenbesitz ändert. Der Treiber ignoriert securityContext.fsGroupChangePolicy in der Podspezifikation. |
OnRootMismatch, AlwaysNone |
Nein | OnRootMismatch |
Konfigurieren von Parametern für virtuelle Netzwerke für dynamische PVs mit Azure Blob-Speicher
Verwenden Sie die folgenden Parameter, wenn der Treiber den Virtuellen Netzwerkzugriff für eine dynamisch bereitgestellte PV konfiguriert:
| Name | Beschreibung | Verfügbare Werte | Erforderlich | Standardwert |
|---|---|---|---|---|
vnetResourceGroup |
Geben Sie die Ressourcengruppe an, die das virtuelle Netzwerk enthält. | Vorhandener Ressourcengruppenname | Nein | Verwendet den vnetResourceGroup Wert in der Azure Cloudkonfiguration. |
vnetName |
Geben Sie den Namen des virtuellen Netzwerks an. | Vorhandener Name des virtuellen Netzwerks | Nein | Verwendet den vnetName Wert in der Azure Cloudkonfiguration. |
subnetName |
Geben Sie ein oder mehrere vorhandene AKS-Knoten-Subnetze an. Trennen Sie mehrere Subnetznamen durch Kommas. | Vorhandene Subnetznamen | Nein | Aktualisiert alle Subnetze im virtuellen Clusternetzwerk. |
vnetLinkName |
Geben Sie die virtuelle Netzwerkverbindung an, die der privaten DNS-Zone zugeordnet ist. | Vorhandener oder neuer Name der virtuellen Netzwerkverbindung | Nein | <vnetName>-vnetlink |
Konfigurieren privater Endpunkte für dynamische PVs mit Azure Blob-Speicher
Hinweis
Wenn das Speicherkonto vom Treiber erstellt wird, müssen Sie nur den Parameter in der Speicherklasse angeben networkEndpointType: privateEndpoint . Der CSI-Treiber erstellt zusammen mit dem Konto den privaten Endpunkt und die private DNS-Zone (benannt privatelink.blob.core.windows.net). Wenn Sie Ihr eigenes Speicherkonto verwenden, müssen Sie den privaten Endpunkt für das Speicherkonto erstellen. Wenn Sie Azure Blob Storage in einem isolierten Netzwerkcluster verwenden, müssen Sie eine benutzerdefinierte Speicherklasse mit "networkEndpointType: privateEndpoint" erstellen. Sie können das folgende Beispielmanifest als Verweis verwenden:
apiVersion: storage.k8s.io/v1
kind: StorageClass
metadata:
name: blob-fuse
provisioner: blob.csi.azure.com
parameters:
skuName: Premium_LRS # available values: Standard_LRS, Premium_LRS, Standard_GRS, Standard_RAGRS, Standard_ZRS, Premium_ZRS
protocol: fuse2
networkEndpointType: privateEndpoint
reclaimPolicy: Delete
volumeBindingMode: Immediate
allowVolumeExpansion: true
mountOptions:
- -o allow_other
- --file-cache-timeout-in-seconds=120
- --use-attr-cache=true
- --cancel-list-on-mount-seconds=10 # prevent billing charges on mounting
- -o attr_timeout=120
- -o entry_timeout=120
- -o negative_timeout=120
- --log-level=LOG_WARNING # LOG_WARNING, LOG_INFO, LOG_DEBUG
- --cache-size-mb=1000 # Default will be 80% of available memory, eviction will happen beyond that.
Erstellen eines PVC für dynamische Bereitstellung
Ein PVC verwendet das Speicherklassenobjekt, um einen Azure Blob Storage dynamisch bereitzustellen. Sie können das Beispiel-YAML-Manifest in diesem Abschnitt verwenden, um ein PVC zu erstellen, das mit ReadWriteMany-Zugriff5 GB groß ist. Weitere Informationen zu Zugriffsmodi finden Sie unter Kubernetes PV-Zugriffsmodi.
Erstellen Sie eine Datei mit dem Namen
blob-nfs-pvc.yamlund fügen Sie das folgende YAML-Manifest darin ein:apiVersion: v1 kind: PersistentVolumeClaim metadata: name: azure-blob-storage spec: accessModes: - ReadWriteMany storageClassName: azureblob-nfs-premium resources: requests: storage: 5GiErstellen Sie das PVC mit dem
kubectl createBefehl:kubectl create -f blob-nfs-pvc.yamlSehen Sie sich den Status des PVC mit dem
kubectl getBefehl an:kubectl get pvc azure-blob-storageIhre Ausgabe sollte der folgenden Beispielausgabe ähneln, die zeigt, dass sich das PVC in einem
BoundZustand befindet:NAME STATUS VOLUME CAPACITY ACCESS MODES STORAGECLASS AGE azure-blob-storage Bound pvc-aaaaaaaa-0000-1111-2222-bbbbbbbbbbbb 5Gi RWX azureblob-nfs-premium 92m
Bereitstellen eines dynamisch bereitgestellten BLOB-Speichervolumes in einem Pod
Mit der folgenden YAML wird ein Pod erstellt, der den Anspruch azure-blob-storage verwendet, um den Azure Blob Storage unter dem Pfad /mnt/blob zu mounten.
Erstellen Sie eine Datei namens
blob-nfs-pv, und fügen Sie das folgende YAML-Manifest ein. Stellen Sie sicher, dass dieclaimNameÜbereinstimmung mit dem PVC übereinstimmt, das Sie zuvor erstellt haben (azure-blob-storage).kind: Pod apiVersion: v1 metadata: name: mypod spec: containers: - name: mypod image: mcr.microsoft.com/oss/nginx/nginx:1.17.3-alpine resources: requests: cpu: 100m memory: 128Mi limits: cpu: 250m memory: 256Mi volumeMounts: - mountPath: "/mnt/blob" name: volume readOnly: false volumes: - name: volume persistentVolumeClaim: claimName: azure-blob-storageErstellen Sie den Pod mithilfe des
kubectl applyBefehls:kubectl apply -f blob-nfs-pv.yamlNachdem der Pod erfolgreich ausgeführt wurde, erstellen Sie eine neue Datei
test.txtmit dem folgenden Befehl:kubectl exec mypod -- touch /mnt/blob/test.txtÜberprüfen Sie, ob der Datenträger ordnungsgemäß bereitgestellt wird, indem Sie den folgenden Befehl verwenden, um die Dateien im bereitgestellten Verzeichnis auflisten zu können:
kubectl exec mypod -- ls /mnt/blobIhre Ausgabe sollte der folgenden Beispielausgabe ähneln, die die
test.txtDatei zeigt, die Sie im eingebundenen Azure Blob Storage erstellt haben.test.txt
Verwenden eines StatefulSet zum Verwalten des Lebenszyklus eines Volumes mit Azure Blob Storage
Sie können ein StatefulSet verwenden, um ein Speichervolumen für Ihre Workload beizubehalten. Dieser Status erleichtert die Zuordnung vorhandener Volumes zu neuen Pods, die ausgefallene Volumes ersetzen. Die folgenden Beispiele veranschaulichen, wie Ein StatefulSet für Blob-Speicher mit dem NFS-Protokoll oder Blobfuse eingerichtet wird.
Hinweis
Wenn Sie das NFS-Protokoll verwenden, muss Ihre AKS-Cluster-Steuerebene-Identität (Ihr AKS-Cluster-Name) der Mitwirkenden-Rolle in der virtuellen Netzwerk- und Netzwerksicherheitsgruppe hinzugefügt werden.
Erstellen Sie eine Datei mit dem Namen
azure-blob-nfs-ss.yamlund fügen Sie das folgende YAML-Manifest darin ein:apiVersion: apps/v1 kind: StatefulSet metadata: name: statefulset-blob-nfs labels: app: nginx spec: serviceName: statefulset-blob-nfs replicas: 1 template: metadata: labels: app: nginx spec: nodeSelector: "kubernetes.io/os": linux containers: - name: statefulset-blob-nfs image: mcr.microsoft.com/azurelinux/base/nginx:1.25 volumeMounts: - name: persistent-storage mountPath: /mnt/blob updateStrategy: type: RollingUpdate selector: matchLabels: app: nginx volumeClaimTemplates: - metadata: name: persistent-storage spec: storageClassName: azureblob-nfs-premium accessModes: ["ReadWriteMany"] resources: requests: storage: 100GiErstellen Sie das StatefulSet mithilfe des
kubectl createBefehls:kubectl create -f azure-blob-nfs-ss.yaml
Erstellen einer statischen PV mit Azure Blob Storage
Die folgenden Abschnitte enthalten Anweisungen zum Erstellen einer statischen PV mit Azure Blob Storage. Ein statisches PV ist ein persistentes Volume, das ein Administrator manuell erstellt. Diese PV ist für die Verwendung durch Pods im Cluster verfügbar. Um eine statische PV zu verwenden, erstellen Sie ein PVC, das auf die PV verweist, und dann erstellen Sie einen Pod, der auf das PVC verweist.
CSI-Volumeparameter für statische PVs mit Azure Blob-Speicher
In der folgenden Tabelle sind Parameter aufgeführt, die Sie in der CSI-Volumequelle für eine statische PV mit Azure Blob-Speicher verwenden können:
| Name | Bedeutung | Verfügbare Werte | Erforderlich | Standardwert |
|---|---|---|---|---|
volumeHandle |
Geben Sie einen Wert an, den der Treiber verwenden kann, um den Speicher-BLOB-Container im Cluster eindeutig zu identifizieren. | Eine empfohlene Möglichkeit zum Erstellen eines eindeutigen Werts besteht darin, den Namen und den Containernamen des global eindeutigem Speicherkontos zu kombinieren: {account-name}_{container-name}.Hinweis: Die #, / Zeichen sind für die interne Verwendung reserviert und können nicht in einem Volume-Handle verwendet werden. |
Ja | |
volumeAttributes.subscriptionID |
Geben Sie die Azure Abonnement-ID an, in der sich das Speicherkonto befindet. | Azure-Abonnement-ID | Nein | Ist dieser Wert nicht leer, muss volumeAttributes.resourceGroup angegeben werden. |
volumeAttributes.resourceGroup |
Geben Sie den Namen der Azure-Ressourcengruppe an. | myResourceGroup | Nein | Ohne Angabe verwendet der Treiber den gleichen Ressourcengruppennamen wie der aktuelle Cluster. |
volumeAttributes.storageAccount |
Geben Sie den Namen eines vorhandenen Azure-Speicherkontos an. | storageAccountName | Ja | |
volumeAttributes.containerName |
Geben Sie den vorhandenen Containernamen an. | container | Ja | |
volumeAttributes.protocol |
Geben Sie BlobFuse, BlobFuse2 oder NFS v3 mount an. |
fuse, fuse2nfs |
Nein | fuse |
volumeAttributes.server |
Geben Sie die Serveradresse des Azure-Speicherkontos an. | Vorhandene Serveradresse, z. B. <storage-account>.blob.core.windows.net |
Nein | Verwendet die Standardserveradresse für die aktuelle Cloudumgebung. |
volumeAttributes.storageEndpointSuffix |
Geben Sie das Suffix des Azure Speicherendpunkts an. |
core.windows.netoder das Suffix für eine andere Azure Cloud |
Nein | Verwendet das Standardsuffix für die aktuelle Cloudumgebung. |
| --- | Die folgenden Parameter gelten nur für Blobfuse | --- | --- | --- |
volumeAttributes.secretName |
Geheimer Name, der den Speicherkontonamen und den Schlüssel speichert (gilt nur für SMB). | Nein | ||
volumeAttributes.secretNamespace |
Geben Sie den Namespace des Secrets zum Speichern des Kontoschlüssels an. | default |
Nein | PVC-Namespace |
volumeAttributes.getLatestAccountKey |
Rufen Sie den neuesten Speicherkontoschlüssel basierend auf der Erstellungszeit ab, anstatt den ersten Schlüssel zu verwenden. |
true, false |
Nein | false |
nodeStageSecretRef.name |
Geben Sie den Namen des geheimen Kubernetes-Schlüssels an, der Anmeldeinformationen für das Staging des Volumes enthält. | Vorhandener Kubernetes geheimer Name. Das Geheimnis muss einen der folgenden Schlüssel enthalten: azurestorageaccountkey, , azurestorageaccountsastoken, , msisecretoder azurestoragespnclientsecret. |
Nein | |
nodeStageSecretRef.namespace |
Geben Sie den Namespace des Secrets an. | Kubernetes-Namespace | Ja | |
| --- | Die folgenden Parameter gelten nur für das NFS-Protokoll. | --- | --- | --- |
volumeAttributes.mountPermissions |
Geben Sie Berechtigungen für bereitgestellte Ordner an. | 0777 |
Nein | |
volumeAttributes.fsGroupChangePolicy |
Geben Sie an, wie der Treiber den Volumenbesitz ändert. Der Treiber ignoriert securityContext.fsGroupChangePolicy in der Podspezifikation. |
OnRootMismatch, AlwaysNone |
Nein | OnRootMismatch |
| --- |
Die folgenden Parameter gelten nur für das Feature: blobfuse Verwaltete Identitäts- und Dienstprinzipalnamenauthentifizierung |
--- | --- | --- |
volumeAttributes.AzureStorageAuthType |
Gibt den Authentifizierungstyp an. |
Key
SAS
MSI
SPN
|
Nein | Key |
volumeAttributes.AzureStorageIdentityClientID |
Geben Sie die Identitätsclient-ID an. | Nein | ||
volumeAttributes.AzureStorageIdentityObjectID |
Geben Sie die Id des Identitätsobjekts an. Dieser Parameter ist veraltet. | Nein | ||
volumeAttributes.AzureStorageIdentityResourceID |
Geben Sie die Identitätsressourcen-ID an. | Nein | ||
volumeAttributes.MSIEndpoint |
Geben Sie den MSI-Endpunkt an. | Nein | ||
volumeAttributes.AzureStorageSPNClientID |
Geben Sie die Azure Service Principal Name (SPN)-Client-ID an. | Nein | ||
volumeAttributes.AzureStorageSPNTenantID |
Geben Sie die Mandanten-ID von Azure SPN an. | Nein | ||
volumeAttributes.AzureStorageAADEndpoint |
Geben Sie den Microsoft Entra-Endpunkt an. | Nein | ||
| --- | Die folgenden Parameter gelten nur für die Identitätsauthentifizierung der Blobfuse-Workload | --- | --- | --- |
volumeAttributes.ClientID |
Geben Sie die Client-ID der verwalteten Identität an, die für die Workloadidentitätsauthentifizierung verwendet wird. | Client-ID für verwaltete Identität | Nein | |
volumeAttributes.mountWithWorkloadIdentityToken |
Mount BlobFuse with a workload identity token. Diese Funktion befindet sich in der Vorschauphase. Geben Sie den Wert als Zeichenfolge an. |
"true", "false" |
Nein | "false" |
| --- | Die folgenden Parameter gelten nur für das Feature: Blobfuse liest den Kontoschlüssel oder SAS-Token aus dem Schlüsseltresor | --- | --- | --- |
volumeAttributes.keyVaultURL |
Geben Sie den DNS-Namen des Azure Key Vault an. | {vault-name}.vault.azure.net | Nein | |
volumeAttributes.keyVaultSecretName |
Geben Sie den geheimen Azure Key Vault-Namen an. | Vorhandener geheimer Name von Azure Key Vault. | Nein | |
volumeAttributes.keyVaultSecretVersion |
Version des Azure Key Vault-Geheimnisses. | Vorhandene Version | Nein | Wenn leer, verwendet der Treiber die aktuelle Version. |
Erstellen eines Blobspeichercontainers
Wenn Sie eine Azure Blob Storage-Ressource für die Verwendung mit AKS erstellen, können Sie die Ressource in der Knotenressourcengruppe erstellen. Mit diesem Ansatz kann der AKS-Cluster auf die BLOB-Speicherressource zugreifen und diese verwalten.
Rufen Sie den Namen der Knotenressourcengruppe Ihres AKS-Clusters mithilfe des
az aks showBefehls mit dem--query nodeResourceGroupParameter ab.az aks show --resource-group myResourceGroup --name myAKSCluster --query nodeResourceGroup -o tsvDie Ausgabe des Befehls sieht in etwa wie im folgenden Beispiel aus:
MC_myResourceGroup_myAKSCluster_eastusWenn Sie das Speicherkonto in der Knotenressourcengruppe erstellen, verwenden Sie den im vorherigen Schritt zurückgegebenen Knotenressourcengruppennamen (z. B
MC_myResourceGroup_myAKSCluster_eastus. ). Führen Sie dann die Schritte unter "Blob-Speicher verwalten " aus, um den Zugriff zu autorisieren und einen Container in diesem Speicherkonto zu erstellen.
Volume einbinden
In diesem Abschnitt binden Sie ein persistentes Volume mithilfe des NFS-Protokolls oder Blobfuse ein.
Für das Speicherkonto muss NFS v3 und hierarchischer Namespace aktiviert sein. Das Einbinden von BLOB-Speicher mithilfe des NFS v3-Protokolls authentifiziert sich nicht mithilfe eines Kontoschlüssels. Das Subnetz des AKS-Knotens muss netzwerkzugriff auf das NFS-fähige Speicherkonto über ein ausgewähltes virtuelles Netzwerk oder einen privaten Endpunkt verfügen. Stellen Sie sicher, dass Netzwerksicherheitsgruppen NFS-Datenverkehr an den Ports 111 und 2048 zulassen. Weitere Informationen zum Einrichten des NFS-Zugriffs auf Ihr Speicherkonto finden Sie unter Mount Blob Storage mithilfe des Network File System (NFS) 3.0-Protokolls.
Im folgenden Beispiel wird veranschaulicht, wie sie einen BLOB-Speichercontainer mithilfe des NFS-Protokolls als persistentes Volume bereitstellen.
Erstellen Sie eine Datei mit dem Namen
pv-blob-nfs.yaml, und fügen Sie den folgenden YAML-Code ein. Unterspec.csi.volumeAttributes, aktualisieren SieresourceGroup,storageAccountundcontainerName.Hinweis
Der Wert
volumeHandlesollte eine eindeutige volumeID für jeden identischen Speicherblobcontainer im Cluster sein. Das Zeichen#und/sind für die interne Verwendung reserviert und können nicht verwendet werden.apiVersion: v1 kind: PersistentVolume metadata: annotations: pv.kubernetes.io/provisioned-by: blob.csi.azure.com name: pv-blob spec: capacity: storage: 1Pi accessModes: - ReadWriteMany persistentVolumeReclaimPolicy: Retain # If set as "Delete" container would be removed after pvc deletion storageClassName: azureblob-nfs-premium csi: driver: blob.csi.azure.com # make sure volumeid is unique for every identical storage blob container in the cluster # character `#` and `/` are reserved for internal use and cannot be used in volumehandle volumeHandle: account-name_container-name volumeAttributes: resourceGroup: resourceGroupName storageAccount: storageAccountName containerName: containerName protocol: nfsHinweis
Während das Kubernetes-API-Kapazitätsattribut obligatorisch ist, verwendet der Azure Blob Storage CSI-Treiber diesen Wert nicht, da Sie Daten flexibel schreiben können, bis Sie das Kapazitätslimit Ihres Speicherkontos erreicht haben. Der Wert wird nur für den Größenabgleich zwischen PVs und PVCs verwendet. Im Beispiel wird ein fiktiver Wert von
1Pi; dieser Wert legt nicht die Kapazität des Blob-Speichercontainers fest.Erstellen Sie das PV mithilfe des
kubectl createBefehls:kubectl create -f pv-blob-nfs.yamlErstellen Sie eine Datei namens
pvc-blob-nfs.yaml, und fügen Sie sie in das folgende YAML ein. Aktualisieren Sie untervolumeNameden Wert so, dass er dem Namen der PV entspricht, die im vorherigen Schritt erstellt wurde.kind: PersistentVolumeClaim apiVersion: v1 metadata: name: pvc-blob spec: accessModes: - ReadWriteMany resources: requests: storage: 10Gi volumeName: pv-blob storageClassName: azureblob-nfs-premiumErstellen Sie das PVC mit dem
kubectl createBefehl:kubectl create -f pvc-blob-nfs.yaml
Verwenden Sie das persistente Volume
Mit dem folgenden YAML wird ein Pod erstellt, der das zuvor erstellte PV oder PVC mit dem Namen pvc-blob verwendet, um den Azure Blob-Speicher im Pfad /mnt/blob einzubinden.
Erstellen Sie eine Datei mit dem Namen
nginx-pod-blob.yaml, und fügen Sie sie im folgenden YAML-Manifest ein. Stellen Sie sicher, dass dieclaimNameÜbereinstimmung mit dem zuvor erstellten PVC (pvc-blob) übereinstimmt.kind: Pod apiVersion: v1 metadata: name: nginx-blob spec: nodeSelector: "kubernetes.io/os": linux containers: - image: mcr.microsoft.com/oss/nginx/nginx:1.17.3-alpine name: nginx-blob volumeMounts: - name: blob01 mountPath: "/mnt/blob" readOnly: false volumes: - name: blob01 persistentVolumeClaim: claimName: pvc-blobErstellen Sie den Pod, und fügen Sie das PVC mit dem
kubectl createBefehl an:kubectl create -f nginx-pod-blob.yamlErstellen Sie eine interaktive Shellsitzung mit dem Pod, um zu überprüfen, ob der Blob-Speicher ordnungsgemäß bereitgestellt wird, indem Sie den folgenden
kubectl execBefehl verwenden:kubectl exec -it nginx-blob -- df -hDie Ausgabe sollte der folgenden Beispielausgabe ähneln, die zeigt, dass der Blob-Speicher am
/mnt/blobPfad bereitgestellt wird:Filesystem Size Used Avail Use% Mounted on ... blobfuse 14G 41M 13G 1% /mnt/blob ...