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.
Der CSI-Treiber (Container Storage Interface) für Azure Blob Storage ist ein mit der CSI-Spezifikation konformer Treiber, mit dem Azure Kubernetes Service (AKS) den Lebenszyklus von Azure Blob Storage verwaltet. CSI ist ein Standard für die Bereitstellung beliebiger Block- und Dateispeichersysteme für containerisierte Workloads in Kubernetes.
Durch die Einführung und Verwendung von CSI kann AKS nun Plug-Ins schreiben, bereitstellen und durchlaufen, um neue Speichersysteme in Kubernetes verfügbar zu machen oder vorhandene Speichersysteme in Kubernetes zu verbessern. Bei Verwendung von CSI-Treibern in AKS muss weder der Kerncode von Kubernetes geändert noch auf dessen Releasezyklen gewartet werden.
Wenn Sie Azure Blob Storage als Dateisystem in einem Container oder Pod bereitstellen, können Sie BLOB-Speicher mit vielen Anwendungen verwenden, die massive Mengen unstrukturierter Daten verwenden. Beispiel:
- Protokolldateidaten
- Bilder, Dokumente und Streaming von Video oder Audio
- Notfallwiederherstellungsdaten
Anwendungen greifen auf Daten zu, die in Azure Blob Storage gespeichert sind, indem sie entweder BlobFuse oder das Network File System (NFS) 3.0-Protokoll verwenden. Vor Einführung des CSI-Treibers für Azure Blob Storage bestand die einzige Möglichkeit darin, einen nicht unterstützten Treiber manuell zu installieren, um in Ihrer in AKS ausgeführten Anwendung auf Blob Storage zugreifen zu können. Wenn der Azure Blob Storage CSI-Treiber auf AKS aktiviert ist, gibt es zwei integrierte Speicherklassen:
- azureblob-fuse-premium
- azureblob-nfs-premium
Informationen zum Erstellen eines AKS-Clusters mit CSI-Treiberunterstützung finden Sie unter CSI-Treiber in AKS. Weitere Informationen zu den Unterschieden beim Zugriff auf die einzelnen Azure-Speichertypen mithilfe des NFS-Protokolls finden Sie unter Vergleich des Zugriffs auf Azure Files, Azure Blob Storage und Azure NetApp Files mit NFS.
Der Azure Disks Container Storage Interface (CSI)-Treiber ist ein CSI-spezifikationskonformer Treiber, der von Azure Kubernetes Service (AKS) zum Verwalten des Lebenszyklus von Azure Disk verwendet wird.
CSI ist ein Standard für die Bereitstellung beliebiger Block- und Dateispeichersysteme für containerisierte Workloads in Kubernetes. Durch die Einführung und Verwendung von CSI kann AKS nun Plug-Ins schreiben, bereitstellen und durchlaufen, um neue Speichersysteme in Kubernetes verfügbar zu machen oder vorhandene Speichersysteme in Kubernetes zu verbessern. Bei Verwendung von CSI-Treibern in AKS muss weder der Kerncode von Kubernetes geändert noch auf dessen Releasezyklen gewartet werden. Informationen zum Erstellen eines AKS-Clusters mit CSI-Treiberunterstützung finden Sie unter Aktivieren des CSI-Treibers auf AKS.
Weitere Informationen zu Kubernetes-Volumes finden Sie unter Speicheroptionen für Anwendungen in AKS.
Hinweis
In-Tree-Treiber beziehen sich auf die aktuellen Speichertreiber, die Teil des Kubernetes-Kerncodes sind, im Vergleich zu den neuen CSI-Treibern, die Plug-Ins sind.
Der CSI-Treiber (Azure Files Container Storage Interface) ist ein CSI-spezifikationskonformer Treiber, der von Azure Kubernetes Service (AKS) zum Verwalten des Lebenszyklus von Azure-Dateifreigaben verwendet wird. CSI ist ein Standard für die Bereitstellung beliebiger Block- und Dateispeichersysteme für containerisierte Workloads in Kubernetes.
Durch die Einführung und Verwendung von CSI kann AKS nun Plug-Ins schreiben, bereitstellen und durchlaufen, um neue Speichersysteme in Kubernetes verfügbar zu machen oder vorhandene Speichersysteme in Kubernetes zu verbessern. Bei Verwendung von CSI-Treibern in AKS muss weder der Kerncode von Kubernetes geändert noch auf dessen Releasezyklen gewartet werden.
Informationen zum Erstellen eines AKS-Clusters mit CSI-Treiberunterstützung finden Sie unter Aktivieren von CSI-Treibern (Container Storage Interface) für Azure-Datenträger und Azure Files in Azure Kubernetes Service (AKS).
Hinweis
In-Tree-Treiber beziehen sich auf die aktuellen Speichertreiber, die Teil des Kubernetes-Kerncodes sind, im Vergleich zu den neuen CSI-Treibern, die Plug-Ins sind.
Azure CSI-Treiberfunktionen
Der CSI-Treiber für Azure Blob Storage unterstützt die folgenden Features:
- BlobFuse
- NFS 3.0-Protokoll
Zusätzlich zu den In-Tree-Treiberfunktionen unterstützt der Azure Disk CSI-Treiber die folgenden Funktionen:
Leistungsverbesserungen während der gleichzeitigen Datenträgeranfügung und -trennung
- In-Tree-Treiber fügen Datenträger seriell an, während CSI-Treiber Datenträger in Batches anfügen oder trennen. Es gibt eine erhebliche Verbesserung, wenn eine Vielzahl von Datenträgern mit einem Knoten verbunden sind.
Premium SSD v1 und v2 werden unterstützt.
-
PremiumV2_LRSunterstütztNonenur den Cachemodus.
-
Unterstützung für zonenredundanten Speicher (ZRS)
-
Premium_ZRS,StandardSSD_ZRSDatenträgertypen werden unterstützt. ZRS-Datenträger können auf dem Zonen- oder Nicht-Zonenknoten zugewiesen werden, ohne die Einschränkung, dass das Datenträgervolume in derselben Zone wie ein bestimmter Knoten zusammengefasst werden muss. Weitere Informationen, einschließlich der unterstützten Regionen, finden Sie unter Zonenredundanter Speicher für verwaltete Datenträger.
-
Ändern der Größe des persistenten Datenträgervolumes ohne Ausfallzeit
Hinweis
Je nach verwendeter VM-SKU verfügt der Azure Disk CSI-Treiber möglicherweise über ein Volumenlimit pro Knoten. Bei einigen leistungsfähigen VMs (z. B. 16 Kernen) beträgt der Grenzwert 64 Volumes pro Knoten. Um das Limit pro VM-SKU zu ermitteln, überprüfen Sie die Spalte Max. Datenträger für jede angebotene VM-SKU. Eine Liste der angebotenen VM-SKUs mit den entsprechenden detaillierten Kapazitätslimits finden Sie unter Universelle VM-Größen.
Voraussetzungen
Sie müssen die Azure CLI-Version 2.42 oder höher installiert und konfiguriert haben. Führen Sie
az --versionaus, um die Version zu finden. Wenn Sie eine Installation oder ein Upgrade durchführen müssen, finden Sie weitere Informationen unter Azure CLI installieren. Wenn Sie die Azure CLI-Erweiterungaks-previewinstalliert haben, stellen Sie sicher, dass Sie die Erweiterung durch Aufrufenaz extension update --name aks-previewauf die neueste Version aktualisieren.Führen Sie die folgenden Schritte aus, um den Open Source-Treiber zu bereinigen , wenn Sie zuvor den Open-Source-Treiber für CSI Blob Storage installiert haben, um von Ihrem Cluster aus auf Azure Blob Storage zuzugreifen.
Ihre AKS-Clustersteuerungsebenenidentität (Ihr AKS-Clustername) wird der Rolle "Mitwirkender " in der VNet- und Netzwerksicherheitsgruppe hinzugefügt.
Führen Sie die folgenden Aktionen aus, um ein [Azure Data Lake Storage Gen2-Konto][azure-datalake-storage-account] (ADLS) bei Verwendung des BlobFuse-Mounts zu unterstützen:
- Geben Sie
isHnsEnabled: "true"in den Parametern der Speicherklasse an, um mit dem Treiber in der dynamischen Bereitstellung ein ADLS-Konto zu erstellen. - Um BlobFuse-Zugriff auf ein ADLS-Konto in der statischen Bereitstellung zu aktivieren, geben Sie die Mount-Option
--use-adls=trueim persistenten Volume an. - Wenn Sie ein Speicherkonto mit hierarchischem Namespace aktivieren möchten, sollten vorhandene persistente Volumes (PVs) mit
--use-adls=trueder Bereitstellungsoption erneut bereitgestellt werden.
- Geben Sie
Standardmäßig befindet sich der BlobFuse-Cache im
/mntVerzeichnis. Wenn die SKU des virtuellen Computers (VM) einen temporären Datenträger bereitstellt, wird das/mntVerzeichnis auf dem temporären Datenträger bereitgestellt. Jedoch, wenn die VM-SKU keinen temporären Datenträger bietet, wird das/mntVerzeichnis auf dem Betriebssystemdatenträger eingebunden. Sie können die Bereitstellungsoption--tmp-path=festlegen, um ein anderes Cache-Verzeichnis anzugeben.
Hinweis
Wenn der Blobfuse-Proxy während der Installation des Open Source-Treibers nicht aktiviert ist, stört die Deinstallation des Open Source-Treibers vorhandene Blobfuse-Bereitstellungen. NFS-Mounts bleiben jedoch unberührt.
Sie benötigen einen AKS-Cluster mit aktiviertem Azure Disk CSI-Treiber. Der CSI-Treiber ist standardmäßig auf AKS-Clustern mit Kubernetes Version 1.21 oder höher aktiviert.
Azure CLI Version 2.37.0 oder höher wird installiert und konfiguriert. Führen Sie
az --versionaus, um die Version zu ermitteln. Wenn Sie eine Installation oder ein Upgrade durchführen müssen, finden Sie weitere Informationen unter Azure CLI installieren.Das
kubectlBefehlszeilentool ist installiert und für die Verbindung mit Ihrem AKS-Cluster konfiguriert.Eine Speicherklasse, die für die Verwendung des Azure Disk CSI-Treibers (
disk.csi.azure.com) konfiguriert ist.Der Azure Disk-CSI-Treiber weist ein Volumenlimit pro Knoten auf. Die Volumeanzahl ändert sich basierend auf der Größe des Knotens/Knotenpools. Führen Sie den Befehl kubectl get aus, um die Anzahl der Volumes zu ermitteln, die pro Knoten zugeordnet werden können:
kubectl get CSINode <nodename> -o yamlWenn das Volumenlimit pro Knoten ein Problem für Ihre Workload darstellt, sollten Sie anstelle von CSI-Treibern Azure Container Storage für persistente Volumes verwenden.
Allgemeine Anforderungen:
Sie benötigen einen AKS-Cluster mit aktiviertem Azure Files CSI-Treiber. Der CSI-Treiber von Azure Files ist standardmäßig auf AKS-Clustern mit Kubernetes Version 1.21 oder höher aktiviert.
Azure CLI Version 2.37.0 oder höher wird installiert und konfiguriert. Führen Sie zum Überprüfen der Version
az --versionaus. Wenn Sie eine Installation oder ein Upgrade durchführen müssen, finden Sie weitere Informationen unter Azure CLI installieren.Das
kubectlBefehlszeilentool ist installiert und für die Verbindung mit Ihrem AKS-Cluster konfiguriert.Eine Speicherklasse, die für die Verwendung des Azure Files CSI-Treibers (
file.csi.azure.com) konfiguriert ist.Bei der Wahl zwischen Standard- und Premium-Dateifreigaben ist es wichtig, das Bereitstellungsmodell und die Anforderungen des erwarteten Nutzungsmusters zu verstehen, das Sie in Azure Files ausführen möchten. Weitere Informationen finden Sie unter Auswählen einer Azure Files-Leistungsstufe basierend auf Nutzungsmustern.
Anforderungen für die Netzwerkdateifreigabe (NETWORK File Share, NFS):
Die Identität der AKS-Clustersteuerungsebene (Ihr AKS-Clustername) wird der Rolle Mitwirkender im VNet und in der Netzwerksicherheitsgruppe hinzugefügt.
Der Dienstprinzipal oder die verwaltete Dienstidentität (MSI) Ihres AKS-Clusters muss der Rolle "Mitwirkender" im Speicherkonto hinzugefügt werden.
Anforderungen für verwaltete Identitäten:
Stellen Sie sicher, dass die vom Benutzer zugewiesene Kubelet-Identität die
Storage File Data SMB MI AdminRolle für das Speicherkonto erhält. Wenn Sie Ihr eigenes Speicherkonto verwenden, müssen Sie der vom Benutzer zugewiesenen Kubelet-Identität auf diesem Speicherkonto die RolleStorage File Data SMB MI Adminzuweisen.Wenn der CSI-Treiber das Speicherkonto erstellt, erteilen Sie der Ressourcengruppe, in der sich das Speicherkonto befindet, die
Storage File Data SMB MI AdminRolle.Wenn Sie die standardmäßige, vom Benutzer zugewiesene Kubelet-Identität verwenden, verfügt sie bereits über die erforderliche
Storage File Data SMB MI AdminRolle in der Ressourcengruppe für verwaltete Knoten.
Hinweis
Der Azure File CSI-Treiber erlaubt nur die Bereitstellung von SMB-Dateifreigaben mit schlüsselbasierter Authentifizierung (NTLM v2) und unterstützt daher nicht das maximale Sicherheitsprofil der Einstellungen für Azure-Dateifreigaben. Andererseits erfordert das Einbinden von NFS-Dateifreigaben keine schlüsselbasierte Authentifizierung.
Aktivieren des CSI-Treibers auf einem neuen oder bestehenden AKS-Cluster
Mithilfe der Azure CLI können Sie den CSI-Treiber für Blob Storage für einen neuen oder bestehenden AKS-Cluster aktivieren, bevor Sie ein persistentes Volume zur Verwendung durch Pods im Cluster konfigurieren.
Um den Treiber auf einem neuen Cluster zu aktivieren, beziehen Sie den Parameter
--enable-blob-drivermit dem Befehlaz aks createein, wie im folgenden Beispiel gezeigt:az aks create \ --enable-blob-driver \ --name myAKSCluster \ --resource-group myResourceGroup \ --generate-ssh-keysUm den Treiber auf einem vorhandenen Cluster zu aktivieren, beziehen Sie den Parameter
--enable-blob-drivermit dem Befehlaz aks updateein, wie im folgenden Beispiel gezeigt:az aks update --enable-blob-driver --name myAKSCluster --resource-group myResourceGroup
Sie werden aufgefordert, zu bestätigen, dass kein Open-Source-CSI-Treiber für Blobspeicher installiert ist. Nach der Bestätigung kann es mehrere Minuten dauern, bis diese Aktion abgeschlossen ist. Sobald der Vorgang abgeschlossen ist, sollten Sie in der Ausgabe den Status der Aktivierung des Treibers auf Ihrem Cluster sehen. Das folgende Beispiel ähnelt dem Abschnitt, der die Ergebnisse des vorherigen Befehls anzeigt:
"storageProfile": {
"blobCsiDriver": {
"enabled": true
},
...
}
Deaktivieren des CSI-Treibers auf einem vorhandenen AKS-Cluster
Mithilfe der Azure CLI können Sie den CSI-Treiber für Blobspeicher auf einem vorhandenen AKS-Cluster deaktivieren, nachdem Sie das persistente Volume aus dem Cluster entfernt haben.
Um den Treiber auf einem vorhandenen Cluster zu deaktivieren, beziehen Sie den Parameter
--disable-blob-drivermit dem Befehlaz aks updateein, wie im folgenden Beispiel gezeigt:az aks update --disable-blob-driver --name myAKSCluster --resource-group myResourceGroup
Verwenden eines persistenten Volumes für den Speicher
Kubernetes weist einem oder mehreren Pods ein persistentes Volume (PV) als Speicherressource zu. Sie können PVs dynamisch über Kubernetes oder statisch als Administrator bereitstellen.
Wenn mehrere Pods gleichzeitigen Zugriff auf dasselbe Speichervolume benötigen, können Sie Azure Blob Storage verwenden, um mithilfe von NFS oder BlobFuse eine Verbindung herzustellen. In diesem Artikel wird gezeigt, wie Sie dynamisch einen Azure-Blobspeichercontainer erstellen, der von mehreren Pods in einem AKS-Cluster verwendet werden kann.
Weitere Informationen zu Kubernetes-Volumes finden Sie unter Speicheroptionen für Anwendungen in AKS.
In diesem Artikel wird erläutert, wie Sie dynamisch ein PV mit Azure-Datenträger für die Verwendung durch einen einzelnen Pod in einem AKS-Cluster erstellen.
Wenn mehrere Pods gleichzeitigen Zugriff auf dasselbe Speichervolume benötigen, können Sie Azure Files verwenden, um eine Verbindung mit dem Server Message Block (SMB) oder Network File System (NFS) herzustellen. In diesem Artikel wird gezeigt, wie Sie dynamisch eine Azure Files-Freigabe erstellen, die von mehreren Pods in einem AKS-Cluster verwendet wird.
Dynamisch bereitgestelltes Volume: Verwenden Sie diesen Ansatz, wenn Kubernetes Speicherressourcen automatisch erstellen und verwalten soll. Es eignet sich ideal für Szenarien, in denen Sie eine Bedarfsskalierung benötigen, Infrastruktur-as-Code bevorzugen und manuelle Konfigurationsschritte minimieren möchten.
Statisch bereitgestelltes Volume: Wählen Sie diese Methode aus, wenn Sie bereits über ein Azure Blob Storage-Konto oder einen Container verfügen, das Sie verwenden möchten. Sie bietet mehr Kontrolle über die Speichereinrichtung, den Zugriff und den Lebenszyklus und ist geeignet, wenn Sie eine Verbindung mit vorhandenen Ressourcen herstellen oder Speicher über mehrere Cluster oder Workloads hinweg wiederverwenden müssen.
Dieser Abschnitt enthält Anleitungen für Clusteradministratoren, die ein oder mehrere persistente Volumes bereitstellen möchten, die Details des Blob-Speichers für die Verwendung durch eine Workload enthalten. Ein persistenter Volumeanspruch (PVC) verwendet das Speicherklassenobjekt, um einen Azure Blob Storage-Container dynamisch bereitzustellen.
Führen Sie die folgenden Schritte aus, um ein persistentes Volume mit Azure Blob Storage mit der bereitgestellten Speicherklasse bereitzustellen:
Erstellen Sie das
StorageClassManifest, indem Sie das folgende YAML in einer Datei namensblob-fuse-sc.yamlspeichern: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 specified value.Um die Speicherklasse in Ihrem Cluster zu erstellen, wenden Sie den
StorageClassfolgenden Befehl an:kubectl apply -f blob-fuse-sc.yaml
Erstellen Sie ein PVC mit integrierter Speicherklasse
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. Wählen Sie für skuName eine der folgenden Azure-Speicherredundanz-SKUs aus:
- Standard_LRS: Lokal redundanter Standardspeicher
- Premium_LRS: Lokal redundanter Premium-Speicher
- Standard_ZRS: zonenredundanter Standardspeicher
- Premium_ZRS: zonenredundanter Premiumspeicher
- Standard_GRS: Standardmäßiger georedundanter Speicher
- Standard_RAGRS: Standardmäßiger georedundanter Lesezugriffsspeicher
Wenn Sie Speicher-CSI-Treiber StorageClasses auf AKS verwenden, gibt es zwei andere integrierte Treiber, die den Azure Blob CSI-Speichertreiber 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.
Mit dem Befehl kubectl get sc können Sie die Speicherklassen anzeigen. Im folgenden Beispiel werden die in einem AKS-Cluster verfügbaren Speicherklassen azureblob-fuse-premium und azureblob-nfs-premium angezeigt:
NAME PROVISIONER RECLAIMPOLICY VOLUMEBINDINGMODE ALLOWVOLUMEEXPANSION AGE
azureblob-fuse-premium blob.csi.azure.com Delete Immediate true 23h
azureblob-nfs-premium blob.csi.azure.com Delete Immediate true 23h
Um diese Speicherklassen zu verwenden, erstellen Sie einen PVC und den entsprechenden Pod, der auf diesen verweist und ihn verwendet. Ein PVC wird verwendet, um die Lagerung basierend auf einer Speicherklasse automatisch zuzuordnen. Sie können ein PVC entweder mit einer der integrierten Speicherklassen oder mit einer benutzerdefinierten Speicherklasse erstellen. Dieser PVC erstellt einen Azure Blob-Speichercontainer mit der von Ihnen angegebenen SKU, Größe und Protokoll. Wenn Sie eine Poddefinition erstellen, wird der Anspruch auf ein persistentes Volume angegeben, um den gewünschten Speicher anzufordern.
Ein PVC verwendet das Speicherklassenobjekt, um einen Azure Blob Storage-Container dynamisch bereitzustellen. Mit der integrierten Speicherklasse können Sie ein 5 GB PVC mit ReadWriteMany-Zugriff erstellen. Weitere Informationen zu Zugriffsmodi finden Sie in der Dokumentation zum persistenten Kubernetes-Volume .
Erstellen Sie eine Datei namens
blob-nfs-pvc.yamlund kopieren Sie die folgende YAML: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 Create-Befehl :
kubectl create -f blob-nfs-pvc.yaml
Nach Abschluss des Vorgangs wird der Blob-Speichercontainer erstellt. Sie können den Befehl kubectl get verwenden, um den Status des PVC anzuzeigen:
kubectl get pvc azure-blob-storage
Die Ausgabe des Befehls sieht in etwa wie im folgenden Beispiel aus:
NAME STATUS VOLUME CAPACITY ACCESS MODES STORAGECLASS AGE
azure-blob-storage Bound pvc-b88e36c5-c518-4d38-a5ee-337a7dda0a68 5Gi RWX azureblob-nfs-premium 92m
Montage des PVC
Im folgenden YAML wird ein Pod erstellt, das den PVC-Azure-Blob-Speicher verwendet, um den Azure Blob Storage auf dem /mnt/blob Pfad zu mounten.
Erstellen Sie eine Datei mit dem Namen
blob-nfs-pv, und kopieren Sie die folgende YAML. Stellen Sie sicher, dass der ClaimName mit dem im vorherigen Schritt erstellten PVC übereinstimmt.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 mit dem Befehl "kubectl apply":
kubectl apply -f blob-nfs-pv.yamlNachdem sich der Pod im Ausgeführten Zustand befindet, führen Sie den folgenden Befehl aus, um eine neue Datei namens
test.txtzu erstellen.kubectl exec mypod -- touch /mnt/blob/test.txtUm zu überprüfen, ob der Datenträger ordnungsgemäß bereitgestellt ist, führen Sie den folgenden Befehl aus, und überprüfen Sie, ob die
test.txtDatei in der Ausgabe angezeigt wird:kubectl exec mypod -- ls /mnt/blobDie Ausgabe des Befehls sieht in etwa wie im folgenden Beispiel aus:
test.txt
Erstellen einer benutzerdefinierten Azure Blob-Speicherklasse
Die Standardspeicherklassen eignen sich für die gängigsten Szenarien, aber nicht für alle. In einigen Fällen sollten Sie ihre eigene Speicherklasse mit Ihren eigenen Parametern anpassen lassen. In diesem Abschnitt stellen wir zwei Beispiele mit dem ersten mit dem NFS-Protokoll und dem zweiten mit BlobFuse bereit.
In diesem Beispiel konfiguriert das folgende Manifest das Einbinden eines BLOB-Speichercontainers mithilfe des NFS-Protokolls. Verwenden Sie ihn, um den tags Parameter hinzuzufügen.
Erstellen Sie eine Datei mit dem Namen
blob-nfs-sc.yaml, und fügen Sie das folgende Beispielmanifest ein:apiVersion: storage.k8s.io/v1 kind: StorageClass metadata: name: azureblob-nfs-premium provisioner: blob.csi.azure.com parameters: protocol: nfs tags: environment=Development volumeBindingMode: Immediate allowVolumeExpansion: true mountOptions: - nconnect=4Erstellen Sie die Speicherklasse mit dem Befehl "kubectl apply ":
kubectl apply -f blob-nfs-sc.yamlDie Ausgabe des Befehls sieht in etwa wie im folgenden Beispiel aus:
storageclass.storage.k8s.io/blob-nfs-premium created
Mount ein NFS und/oder BlobFuse PV
In diesem Abschnitt stellen Sie das PV mithilfe des NFS-Protokolls oder BlobFuse ein.
Das Einbinden von Blob-Speicher mithilfe des NFS v3-Protokolls nutzt keinen Kontoschlüssel zur Authentifizierung. Ihr AKS-Cluster muss sich im selben oder einem vernetzten virtuellen Netzwerk wie der Agentknoten befinden. Die einzige Möglichkeit zum Sichern der Daten in Ihrem Speicherkonto besteht darin, ein virtuelles Netzwerk und andere Netzwerksicherheitseinstellungen zu verwenden. 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 namens „
pv-blob-nfs.yaml“, und fügen Sie den folgenden YAML-Code ein. UnterstorageClass, aktualisieren SieresourceGroup,storageAccountundcontainerName.Hinweis
Der
volumeHandleWert in Ihrem YAML sollte eine eindeutige VolumeID für jeden identischen Speicher-BLOB-Container im Cluster sein.Die 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 mountOptions: - nconnect=4 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
Obwohl das Kubernetes-API-Kapazitätsattribut obligatorisch ist, wird dieser Wert nicht vom Azure Blob Storage CSI-Treiber verwendet, da Sie Daten flexibel schreiben können, bis Sie die Kapazitätsgrenze Ihres Speicherkontos erreichen. Der Wert des
capacityAttributs wird nur für größenvergleiche zwischen PVs und PVCs verwendet. Wir empfehlen die Verwendung eines fiktiven hohen Werts. Der Pod sieht ein eingebundenes Laufwerk mit einer fiktiven Größe von 5 Petabytes.Führen Sie den folgenden Befehl aus, um das persistente Volume mithilfe des kubectl create-Befehls zu erstellen, der auf die zuvor erstellte YAML-Datei verweist:
kubectl create -f pv-blob-nfs.yamlErstellen Sie eine
pvc-blob-nfs.yamlDatei mit einem PersistentVolumeClaim. Beispiel:kind: PersistentVolumeClaim apiVersion: v1 metadata: name: pvc-blob spec: accessModes: - ReadWriteMany resources: requests: storage: 10Gi volumeName: pv-blob storageClassName: azureblob-nfs-premiumFühren Sie den folgenden Befehl aus, um den persistenten Volumeanspruch mithilfe des kubectl create-Befehls zu erstellen, der auf die zuvor erstellte YAML-Datei verweist:
kubectl create -f pvc-blob-nfs.yaml
Pod erstellen
Mit dem folgenden YAML wird ein Pod erstellt, der das ZUVOR erstellte PV- oder PVC-Blob verwendet, um den Azure Blob Storage auf dem /mnt/blob Pfad zu installieren.
Erstellen Sie eine Datei mit dem Namen
nginx-pod-blob.yaml, und fügen Sie den folgenden YAML-Code ein. Stellen Sie sicher, dass der ClaimName mit dem im vorherigen Schritt erstellten PVC übereinstimmt, wenn ein PV für NFS oder BlobFuse erstellt wird.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-blobFühren Sie den folgenden Befehl aus, um den Pod zu erstellen und das PVC mithilfe des Kubectl-Erstellungsbefehls zu montieren:
kubectl create -f nginx-pod-blob.yamlFühren Sie den folgenden Befehl aus, um eine interaktive Shellsitzung mit dem Pod zu erstellen, um zu überprüfen, ob der Blob-Speicher bereitgestellt wird:
kubectl exec -it nginx-blob -- df -hDie Ausgabe des Befehls sieht in etwa wie im folgenden Beispiel aus:
Filesystem Size Used Avail Use% Mounted on ... blobfuse 14G 41M 13G 1% /mnt/blob ...
Erstellen Sie ein StatefulSet
Um sicherzustellen, dass Ihr Workload sein Speichervolumen bei Pod-Neustarts oder -Ersetzungen beibehält, verwenden Sie ein StatefulSet. StatefulSets vereinfachen das Zuordnen des beständigen Speichers zu Pods, sodass neue Pods, die zum Ersetzen von fehlerhaften Pods erstellt wurden, automatisch auf dieselben Speichervolumes zugreifen können. Die folgenden Beispiele veranschaulichen, wie Sie ein StatefulSet für Blob Storage mit BlobFuse oder dem NFS-Protokoll einrichten.
Erstellen Sie eine Datei namens „
azure-blob-nfs-ss.yaml“, und fügen Sie den folgenden YAML-Code 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 "StatefulSet" mit dem
kubectl createBefehl:kubectl create -f azure-blob-nfs-ss.yaml
Dynamische PVC-Speicherklassenparameter
Die folgende Tabelle enthält Parameter, mit deren Hilfe Sie eine benutzerdefinierte Speicherklasse für Ihr dynamisches PVC definieren können.
| Name | Description | Example | Obligatorisch. | Standardwert |
|---|---|---|---|---|
| skuName | Geben Sie einen Azure-Speicherkontotyp an (Alias: storageAccountType). |
Standard_LRS
Premium_LRS
Standard_GRS
Standard_RAGRS
|
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 | Wenn leer, verwendet der Treiber denselben Ressourcengruppennamen wie der aktuelle Cluster. |
| 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 1 | Geben Sie den Netzwerkendpunkttyp für das vom Treiber erstellte Speicherkonto an. Wenn "privateEndpoint" angegeben ist, wird ein privater Endpunkt für das Speicherkonto erstellt. Für andere Fälle wird ein Dienstendpunkt für das NFS-Protokoll erstellt. | privateEndpoint |
Nein | Fügen Sie für einen AKS-Cluster den Namen des AKS-Clusters der Rolle "Mitwirkender" in der Ressourcengruppe hinzu, welche das VNet hostet. |
| protocol | Geben Sie blobFuse-Mount oder NFSv3-Mount an. |
fuse, nfs |
Nein | fuse |
| containerName | Geben Sie den Namen des vorhandenen Containers (Verzeichnisses) an. | container | Nein | Wenn leer, 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. | mein | Nein | Darf nur Kleinbuchstaben, Zahlen, Bindestriche enthalten und eine Länge von weniger als 21 Zeichen haben. |
| 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. |
| allowBlobPublicAccess | Erlauben oder verweigern Sie den öffentlichen Zugriff auf alle Blobs oder Container für das vom Treiber erstellte Speicherkonto. |
true,false |
Nein | false |
| storageEndpointSuffix | Geben Sie das Suffix für den Azure-Speicherendpunkt an. | core.windows.net |
Nein | Wenn er leer ist, verwendet der Treiber standardmäßiges Speicherendpunktsuffix gemäß Cloudumgebung. |
| tags | [Tags][az-tags] würde in einem neuen Speicherkonto erstellt werden. | Tagformat: „foo=aaa,bar=bbb“ | Nein | "" |
| matchTags | Tags abgleichen, wenn der Treiber versucht, ein geeignetes Speicherkonto zu finden. |
true,false |
Nein | false |
1 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 Cluster verwenden, müssen Sie eine benutzerdefinierte Speicherklasse mit networkEndpointType: privateEndpoint erstellen.
Statische PV-Bereitstellungsparameter
Die folgende Tabelle enthält Parameter, die Sie zum Definieren Ihrer statischen PV verwenden können.
| Name | Description | Example | Obligatorisch. | 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}. Die Zeichen # und / sind für die interne Verwendung reserviert und können nicht in einem Volumengriff verwendet werden. |
Yes | |
| 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 | Yes | |
| volumeAttributes.containerName | Geben Sie den vorhandenen Containernamen an. | container | Yes | |
| volumeAttributes.protocol | Geben Sie BlobFuse-Mount oder NFS v3-Mount an. |
fuse, nfs |
Nein | fuse |
Erstellen von Azure Disk-PVs mit integrierten Speicherklassen
Eine Speicherklasse wird verwendet, um zu definieren, wie eine Speichereinheit dynamisch mit einer PV erstellt wird. Weitere Informationen zu Kubernetes-Speicherklassen finden Sie unter Kubernetes-Speicherklassen.
Wenn Sie den Azure Disk CSI-Treiber StorageClasses auf AKS verwenden, gibt es zwei weitere integrierte Treiber, die den Azure Disk CSI-Speichertreiber verwenden. Die anderen CSI-Speicherklassen werden zusammen mit dem Cluster und zusätzlich zu den Standardspeicherklassen in der Struktur erstellt.
managed-csi: Erstellt verwaltete Datenträger mit Azure Standard SSD mit lokal redundantem Speicher (LRS). Mit Kubernetes Version 1.29 für AKS-Cluster, die in mehreren Verfügbarkeitszonen bereitgestellt werden, verwendet diese Speicherklasse Azure Standard SSD-zonenredundanten Speicher (ZRS), um verwaltete Datenträger bereitzustellen.managed-csi-premium: Stellt verwaltete Datenträger mithilfe von Azure Premium LRS bereit. Ab Kubernetes, Version 1.29, für AKS-Cluster, die mehrere Verfügbarkeitszonen umfassen, verwendet diese Speicherklasse automatisch Azure Premium ZRS, um verwaltete Datenträger zu erstellen.
Ab Kubernetes-Version 1.29 verwendet AKS bei der Bereitstellung von Azure Kubernetes Service-Clustern (AKS) über mehrere Verfügbarkeitszonen hinweg jetzt zonenredundanten Speicher (ZRS), um verwaltete Datenträger innerhalb integrierter Speicherklassen zu erstellen.
ZRS stellt die synchrone Replikation Ihrer von Azure verwalteten Datenträger in mehreren Azure-Verfügbarkeitszonen in Ihrer ausgewählten Region sicher. Diese Redundanzstrategie verbessert die Resilienz Ihrer Anwendungen und schützt Ihre Daten vor Rechenzentrumsfehlern.
Es ist jedoch wichtig zu beachten, dass zonenredundanter Speicher (ZRS) im Vergleich zu lokal redundantem Speicher (LRS) höhere Kosten verursacht. Wenn die Kostenoptimierung Priorität hat, können Sie eine neue Speicherklasse mit dem LRS-SKU-Namensparameter erstellen und in Ihrem Anspruch auf ein persistentes Volume (Persistent Volume Claim, PVC) verwenden.
Die Verringerung der Größe eines PVC wird aufgrund des Risikos von Datenverlusten nicht unterstützt. Sie können eine vorhandene Speicherklasse mit dem Befehl kubectl edit sc bearbeiten, oder Sie können eine eigene benutzerdefinierte Speicherklasse erstellen. Wenn Sie beispielsweise einen Datenträger mit der Größe 4 TiB verwenden möchten, müssen Sie eine Speicherklasse erstellen, die cachingmode: None definiert, da die Zwischenspeicherung für Datenträger ab 4 TiB nicht unterstützt wird[disk-host-cache-setting]. Weitere Informationen zu Speicherklassen und der Erstellung eigener Speicherklassen finden Sie unter Speicheroptionen für Anwendungen in AKS.
Die Zurückforderungsrichtlinie in beiden Speicherklassen stellt sicher, dass die zugrunde liegenden Azure-Datenträger gelöscht werden, wenn die jeweilige PV gelöscht wird. Die Speicherklassen konfigurieren auch die PVs, um erweiterbar zu sein. Sie brauchen nur das PVC mit der neuen Größe zu bearbeiten.
Um diese Speicherklassen zu verwenden, erstellen Sie ein PVC und einen entsprechenden Pod, der auf sie verweist und verwendet. Ein PVC wird verwendet, um die Lagerung basierend auf einer Speicherklasse automatisch bereitzustellen. Ein PVC kann eine der vordefinierten Speicherklassen oder eine benutzerdefinierte Speicherklasse verwenden, um einen azureverwalteten Datenträger für die gewünschte SKU und Größe zu erstellen. Wenn Sie eine Poddefinition erstellen, wird der Anspruch auf ein persistentes Volume angegeben, um den gewünschten Speicher anzufordern.
Hinweis
Persistent Volume-Anforderungen werden in GiB angegeben, aber Azure Managed Disks werden basierend auf dem SKU für eine bestimmte Größe abgerechnet. Diese SKUs reichen von 32 GiB für S4- oder P4-Datenträger bis 32 TiB für S80- oder P80-Datenträger (in der Vorschau). Der Durchsatz und die IOPS-Leistung eines verwalteten Premium-Datenträgers hängen sowohl von der SKU als auch von der Instanzgröße der Knoten im AKS-Cluster ab. Weitere Informationen finden Sie unter Verwaltete Datenträger – Preise und Leistung.
Sie können die vordefinierten Speicherklassen mithilfe des Befehls kubectl get sc anzeigen. Im folgenden Beispiel werden die in einem AKS-Cluster verfügbaren vorab erstellten Speicherklassen gezeigt:
kubectl get sc
Die Ausgabe des Befehls sieht in etwa wie im folgenden Beispiel aus:
NAME PROVISIONER AGE
default (default) disk.csi.azure.com 1h
managed-csi disk.csi.azure.com 1h
Ein PVC stellt die Lagerung basierend auf einer Lagerklasse automatisch fest. In diesem Fall kann ein PVC eine der zuvor erstellten Speicherklassen verwenden, um einen verwalteten Azure Standard- oder Premium-Datenträger zu erstellen.
Erstellen Sie eine Datei namens
azure-pvc.yaml, und fügen Sie das folgende Manifest ein. Der Anspruch fordert einen Datenträger mit dem Namenazure-managed-diskund der Größe5 GBmitReadWriteOnceZugriff an. Als Speicherklasse ist managed-csi angegeben.apiVersion: v1 kind: PersistentVolumeClaim metadata: name: azure-managed-disk spec: accessModes: - ReadWriteOnce storageClassName: managed-csi resources: requests: storage: 5GiTipp
Verwenden Sie zum Erstellen eines Datenträgers, der den Premium-Speicher verwendet,
storageClassName: managed-csi-premiumstatt managed-csi.Erstellen Sie mit dem Befehl
kubectl applyeinen Anspruch auf ein persistentes Volume, und geben Sie die Datei azure-pvc.yaml an.kubectl apply -f azure-pvc.yamlDie Ausgabe des Befehls sieht in etwa wie im folgenden Beispiel aus:
persistentvolumeclaim/azure-managed-disk created
Anwenden eines PVC auf eine Kapsel
Nachdem Sie den Anspruch für ein persistentes Volume erstellt haben, müssen Sie überprüfen, ob es den Status Pending hat. Der Status Pending gibt an, dass es bereit ist, von einem Pod verwendet zu werden.
Überprüfen Sie mit dem Befehl
kubectl describe pvcden Status des PVC.kubectl describe pvc azure-managed-diskDie Ausgabe des Befehls sieht in etwa wie im folgenden verknappten Beispiel aus:
Name: azure-managed-disk Namespace: default StorageClass: managed-csi Status: Pending [...]Erstellen Sie eine Datei namens
azure-pvc-disk.yaml, und fügen Sie das folgende Manifest ein. Dieses Manifest erstellt einen einfachen NGINX-Pod, der den persistenten Volume Claim mit dem Namenazure-managed-diskverwendet, um den Azure-Datenträger am Pfad/mnt/azurebereitzustellen. Geben Sie für Windows Server-Container einemountPathVerwendung der Windows-Pfadkonvention an, z. B. "D:".kind: Pod apiVersion: v1 metadata: name: mypod spec: containers: - name: mypod image: mcr.microsoft.com/oss/nginx/nginx:1.15.5-alpine resources: requests: cpu: 100m memory: 128Mi limits: cpu: 250m memory: 256Mi volumeMounts: - mountPath: "/mnt/azure" name: volume readOnly: false volumes: - name: volume persistentVolumeClaim: claimName: azure-managed-diskErstellen Sie den Pod mit dem Befehl
kubectl apply.kubectl apply -f azure-pvc-disk.yamlDie Ausgabe des Befehls sieht in etwa wie im folgenden Beispiel aus:
pod/mypod createdSie verfügen nun über einen ausgeführten Pod mit Ihrem Azure-Datenträger, der im Verzeichnis
/mnt/azureeingebunden wurde. Überprüfen Sie die Pod-Konfiguration mit dem Befehlkubectl describe.kubectl describe pod mypodDie Ausgabe des Befehls sieht in etwa wie im folgenden Beispiel aus:
[...] Volumes: volume: Type: PersistentVolumeClaim (a reference to a PersistentVolumeClaim in the same namespace) ClaimName: azure-managed-disk ReadOnly: false default-token-smm2n: Type: Secret (a volume populated by a Secret) SecretName: default-token-smm2n Optional: false [...] Events: Type Reason Age From Message ---- ------ ---- ---- ------- Normal Scheduled 2m default-scheduler Successfully assigned mypod to aks-nodepool1-79590246-0 Normal SuccessfulMountVolume 2m kubelet, aks-nodepool1-79590246-0 MountVolume.SetUp succeeded for volume "default-token-smm2n" Normal SuccessfulMountVolume 1m kubelet, aks-nodepool1-79590246-0 MountVolume.SetUp succeeded for volume "pvc-faf0f176-8b8d-11e8-923b-deb28c58d242" [...]
Dynamische Speicherklassenparameter für PVCs
Die folgende Tabelle enthält Parameter, die Sie zum Definieren einer benutzerdefinierten Speicherklasse für Ihre PVCs verwenden können.
| Name | Bedeutung | Verfügbarer Wert | Obligatorisch. | Standardwert |
|---|---|---|---|---|
| skuName | Speicherkontotyp für Azure-Datenträger (Alias: storageAccountType) |
Standard_LRS, , Premium_LRSStandardSSD_LRS, PremiumV2_LRS, UltraSSD_LRS, , Premium_ZRSStandardSSD_ZRS |
Nein | StandardSSD_LRS |
| fsType | Dateisystemtyp |
ext4, ext3, ext2, xfs, btrfs für Linux, ntfs für Windows |
Nein |
ext4 für Linux, ntfs für Windows |
| cachingMode | [Azure Data Disk Host Cache Setting][disk-host-cache-setting](PremiumV2_LRS und UltraSSD_LRS unterstützen None nur den Cachemodus) |
None, ReadOnlyReadWrite |
Nein | ReadOnly |
| resourceGroup | Angeben der Ressourcengruppe für die Azure Disks | Vorhandener Ressourcengruppenname | Nein | Ohne Angabe verwendet der Treiber den gleichen Ressourcengruppennamen wie der aktuelle AKS-Cluster. |
| DiskIOPSReadWrite | [UltraSSD-Datenträger][Ultra-SSD-Datenträger] oder [Premium SSD v2][premiumv2_lrs_disks] IOPS-Kapazität (Minimum: 2 IOPS/GiB) | 100~160.000 | Nein | 500 |
| DiskMBpsReadWrite | [UltraSSD-Datenträger] [ultra-ssd-disks] oder [Premium SSD v2] [premiumv2_lrs_disks] Durchsatzkapazität (mindestens: 0.032/GiB) | 1~2.000 | Nein | 100 |
| LogicalSectorSize | Logische Sektorgröße in Bytes für Disk Ultra. Unterstützte Werte: 512 und 4.096. 4.096 ist der Standardwert. |
512, 4096 |
Nein | 4096 |
| tags | Azure Disk [tags][azure-tags] | Tagformat: key1=val1,key2=val2 |
Nein | "" |
| diskEncryptionSetID | ResourceId des Datenträgerverschlüsselungssatzes, der für [Aktivieren der Verschlüsselung im Ruhezustand][Datenträgerverschlüsselung] verwendet werden soll | Format: /subscriptions/{subs-id}/resourceGroups/{rg-name}/providers/Microsoft.Compute/diskEncryptionSets/{diskEncryptionSet-name} |
Nein | "" |
| diskEncryptionType | Verschlüsselungstyp des Datenträgerverschlüsselungssatzes. |
EncryptionAtRestWithCustomerKey (standardmäßig) EncryptionAtRestWithPlatformAndCustomerKeys |
Nein | "" |
| writeAcceleratorEnabled | [Write Accelerator auf Azure-Datenträgern][azure-disk-write-accelerator] |
true, false |
Nein | "" |
| networkAccessPolicy | Eigenschaft „networkAccessPolicy“ zur Vermeidung der Generierung des SAS-URI für einen Datenträger oder für eine Momentaufnahme |
AllowAll, DenyAllAllowPrivate |
Nein | AllowAll |
| diskAccessID | Azure-Ressourcen-ID der Ressource „DiskAccess“ zur Verwendung privater Endpunkte auf Datenträgern | Nein | `` | |
| enableBursting | [On-Demand-Bursting aktivieren][On-Demand-Bursting] über das bereitgestellte Leistungsziel des Datenträgers hinaus. Bedarfsgesteuertes Bursting sollte nur für Premium-Datenträger und bei einer Datenträgergröße > 512 GB verwendet werden. Ultra-Datenträger und freigegebene Datenträger werden nicht unterstützt. Bursting ist standardmäßig deaktiviert. |
true, false |
Nein | false |
| userAgent | Der User Agent wird für [Customer Usage Attribution][customer-usage-attribution] verwendet. | Nein | Der generierte Benutzer-Agent ist formatiert als driverName/driverVersion compiler/version (OS-ARCH) |
|
| subscriptionID | Angeben der Azure-Abonnement-ID, unter der die Azure-Datenträger erstellt werden. | Azure-Abonnement-ID | Nein | Ist dieser Wert nicht leer, muss resourceGroup angegeben werden. |
Statische Bereitstellungsparameter für eine Photovoltaikanlage
Die folgende Tabelle enthält Parameter, die Sie zum Definieren einer PV verwenden können.
| Name | Bedeutung | Verfügbarer Wert | Obligatorisch. | Standardwert |
|---|---|---|---|---|
| volumeHandle | Azure-Datenträger-URI | /subscriptions/{sub-id}/resourcegroups/{group-name}/providers/microsoft.compute/disks/{disk-id} |
Yes | N/A |
| volumeAttributes.fsType | Dateisystemtyp |
ext4, ext3, ext2, xfs, btrfs für Linux, ntfs für Windows |
Nein |
ext4 für Linux, ntfs für Windows |
| volumeAttributes.partition | Partitionsnummer des vorhandenen Datenträgers (nur unter Linux unterstützt) |
1, 23 |
Nein | Leer (keine Partition) - Stellen Sie sicher, dass das folgende Partitionsformat verwendet wird: -part1. |
| volumeAttributes.cachingMode | [Einstellung des Datenträgerhostcaches][disk-host-cache-setting] |
None, ReadOnlyReadWrite |
Nein | ReadOnly |
Erstellen einer benutzerdefinierten Azure Disk-Speicherklasse
Die Standardspeicherklassen eignen sich für die meisten gängigen Szenarien. In einigen Fällen möchten Sie möglicherweise Ihre eigene Speicherklasse mit eigenen Parametern anpassen. Sie können beispielsweise die volumeBindingMode Klasse ändern.
Sie können eine volumeBindingMode: Immediate Klasse verwenden, die garantiert, dass sie sofort auftritt, sobald der persistente Volumenanspruch (PVC) erstellt wird. Wenn Ihre Knotenpools topologiebedingt sind, z. B. bei Verwendung von Verfügbarkeitszonen, würden PVs gebunden oder bereitgestellt, ohne Kenntnis der Planungsanforderungen des Pods.
Um dieses Szenario zu beheben, können Sie verwenden volumeBindingMode: WaitForFirstConsumer, was die Bindung und Bereitstellung einer PV verzögert, bis ein Pod erstellt wird, das das PVC verwendet. Dieser Ansatz stellt sicher, dass das persistente Volume (PV) in derselben Verfügbarkeitszone oder Topologie wie erforderlich gemäß den Planungseinschränkungen des Pods bereitgestellt wird. Die Standardspeicherklassen verwenden volumeBindingMode: WaitForFirstConsumer Klasse.
Erstellen Sie eine Datei mit dem Namen
sc-azuredisk-csi-waitforfirstconsumer.yaml, und fügen Sie dann das folgende Manifest ein. Die Speicherklasse ist identisch mit unserermanaged-csiSpeicherklasse, aber mit einer anderenvolumeBindingModeKlasse. Beispiel: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: WaitForFirstConsumerErstellen Sie die Speicherklasse, indem Sie den Befehl "kubectl apply" ausführen, und geben Sie Die
sc-azuredisk-csi-waitforfirstconsumer.yamlDatei an:kubectl apply -f sc-azuredisk-csi-waitforfirstconsumer.yamlDie Ausgabe des Befehls sieht in etwa wie im folgenden Beispiel aus:
storageclass.storage.k8s.io/azuredisk-csi-waitforfirstconsumer created
Informationen zu Volumenschnappschüssen
Der Azure Disk CSI-Treiber unterstützt Volumemomentaufnahmen, sodass Sie den Status persistenter Volumes zu bestimmten Zeitpunkten für Sicherungs- und Wiederherstellungsvorgänge erfassen können. Mithilfe von Volumesnapshots können Sie zeitpunktbezogene Kopien Ihrer persistenten Daten erstellen, ohne laufende Anwendungen zu unterbrechen. Sie können diese Momentaufnahmen verwenden, um neue Volumen zu erstellen oder vorhandene in einen vorherigen Zustand zu versetzen.
Sie können zwei Arten von Momentaufnahmen erstellen:
Vollständige Momentaufnahmen: Erfassen Sie den vollständigen Zustand des Datenträgers.
Inkrementelle Momentaufnahmen: Erfassen Sie nur die Änderungen seit der letzten Momentaufnahme, was eine bessere Speichereffizienz und Kosteneinsparungen bietet. Inkrementelle Momentaufnahmen sind das Standardverhalten, wenn der
incrementalParameter in Ihrer VolumeSnapshotClass festgelegttrueist.
Die folgende Tabelle enthält Details zu diesen Parametern.
| Name | Bedeutung | Verfügbarer Wert | Obligatorisch. | Standardwert |
|---|---|---|---|---|
| resourceGroup | Ressourcengruppe zum Speichern von Momentaufnahmen | VORHANDENE RESSOURCENGRUPPE | Nein | Wenn nicht angegeben, werden Momentaufnahmen in derselben Ressourcengruppe wie Azure-Quelldatenträger gespeichert. |
| inkremental | Erstellen einer vollständigen oder inkrementellen Momentaufnahme |
true, false |
Nein | true |
| tags | Azure Disks Tags | Tagformat: 'key1=val1,key2=val2' | Nein | "" |
| userAgent | Benutzer-Agent für die Zuordnung der Nutzung durch Kunden | Nein | Generierter Benutzer-Agent im Format driverName/driverVersion compiler/version (OS-ARCH) |
|
| subscriptionID | Angeben der Azure-Abonnement-ID, in der Azure-Datenträger erstellt werden | Azure-Abonnement-ID | Nein | Wenn nicht leer, muss resourceGroup angegeben werden und incremental muss als false gesetzt werden. |
Volumesnapshots unterstützen die folgenden Szenarien:
- Sicherung und Wiederherstellung: Erstellen Von Point-in-Time-Sicherungen zustandsbehafteter Anwendungsdaten und Wiederherstellung bei Bedarf.
- Datenklonen: Klonen Sie vorhandene Volumes, um neue persistente Volumes mit denselben Daten zu erstellen.
- Notfallwiederherstellung: Schnelle Wiederherstellung bei Datenverlust oder Beschädigung.
Erstellen einer Volumemomentaufnahme
Hinweis
Stellen Sie vor dem Fortfahren sicher, dass die Anwendung keine Daten auf den Quelldatenträger schreibt.
Erstellen Sie als Beispiel für diese Fähigkeit eine Volumemomentaufnahmeklasse mit dem Befehl kubectl apply:
kubectl apply -f https://raw.githubusercontent.com/kubernetes-sigs/azuredisk-csi-driver/master/deploy/example/snapshot/storageclass-azuredisk-snapshot.yamlDie Ausgabe des Befehls sieht in etwa wie im folgenden Beispiel aus:
volumesnapshotclass.snapshot.storage.k8s.io/csi-azuredisk-vsc createdErstellen Sie eine Volumenmomentaufnahme aus dem PVC, das zuvor in diesem Artikel erstellt wurde.
kubectl apply -f https://raw.githubusercontent.com/kubernetes-sigs/azuredisk-csi-driver/master/deploy/example/snapshot/azuredisk-volume-snapshot.yamlDie Ausgabe des Befehls sieht in etwa wie im folgenden Beispiel aus:
volumesnapshot.snapshot.storage.k8s.io/azuredisk-volume-snapshot createdFühren Sie den folgenden Befehl aus, um zu überprüfen, ob die Momentaufnahme ordnungsgemäß erstellt wurde:
kubectl describe volumesnapshot azuredisk-volume-snapshotDie Ausgabe des Befehls sieht in etwa wie im folgenden Beispiel aus:
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>
Erstellen eines neuen PVC basierend auf einer Volumenmomentaufnahme
Sie können ein neues PVC basierend auf einem Volumensnapshot erstellen.
Verwenden Sie die im vorherigen Schritt erstellte Momentaufnahme, und erstellen Sie ein neues PVC und einen neuen Pod , um ihn zu verbrauchen:
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.yamlDie Ausgabe des Befehls sieht in etwa wie im folgenden Beispiel aus:
persistentvolumeclaim/pvc-azuredisk-snapshot-restored created pod/nginx-restored createdUm sicherzustellen, dass es sich um denselben PVC handelt, der zuvor erzeugt wurde, überprüfen Sie den Inhalt, indem Sie den folgenden Befehl ausführen:
kubectl exec nginx-restored -- ls /mnt/azurediskDie Ausgabe des Befehls sieht in etwa wie im folgenden Beispiel aus:
lost+found outfile test.txt
Wir können unsere zuvor erstellte test.txt Datei weiterhin erwartungsgemäß sehen.
Klonen von Volumes
Ein geklontes Volume wird als Duplikat eines vorhandenen Kubernetes-Volumes definiert. Weitere Informationen zum Klonen von Volumes in Kubernetes finden Sie unter Volume Cloning.
Erstellen Sie ein geklontes Volume des zuvor erstellten
azuredisk-pvcund einen neuen Pod, um es zu verwenden.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.yamlDie Ausgabe des Befehls sieht in etwa wie im folgenden Beispiel aus:
persistentvolumeclaim/pvc-azuredisk-cloning created pod/nginx-restored-cloning createdSie können den Inhalt des geklonten Volumes überprüfen, indem Sie den folgenden Befehl ausführen und bestätigen, dass die Datei
test.txterstellt wird:kubectl exec nginx-restored-cloning -- ls /mnt/azurediskDie Ausgabe des Befehls sieht in etwa wie im folgenden Beispiel aus:
lost+found outfile test.txt
Ändern der Größe einer Azure Disk PV ohne Ausfallzeiten
Sie können ein größeres Volume für einen Anspruch auf ein persistentes Volume anfordern. Bearbeiten Sie das PVC-Objekt, und geben Sie eine höhere Größe an. Diese Änderung löst die Erweiterung des zugrunde liegenden Volumes für den Anspruch auf ein persistentes Volume aus.
Hinweis
Für den Anspruch wird nie ein neues persistentes Volume erstellt. Stattdessen wird die Größe eines vorhandenen Volumes geändert.
In AKS unterstützt die integrierte managed-csi Speicherklasse bereits die Erweiterung, daher verwenden Sie die zuvor erstellte. Das PVC verlangte ein 10-Gi Persistent Volume. Sie können bestätigen, indem Sie den folgenden Befehl ausführen:
kubectl exec -it nginx-azuredisk -- df -h /mnt/azuredisk
Die Ausgabe des Befehls sieht in etwa wie im folgenden Beispiel aus:
Filesystem Size Used Avail Use% Mounted on
/dev/sdc 9.8G 42M 9.8G 1% /mnt/azuredisk
Erweitern Sie das PVC, indem Sie das
spec.resources.requests.storageFeld erhöhen, das den folgenden Befehl ausführt:kubectl patch pvc pvc-azuredisk --type merge --patch '{"spec": {"resources": {"requests": {"storage": "15Gi"}}}}'Hinweis
Das Verkleinern von PVs wird derzeit nicht unterstützt. Wenn Sie versuchen, ein vorhandenes PVC mit einer kleineren Größe als dem aktuellen zu patchen, führt zu der folgenden Fehlermeldung:
The persistentVolumeClaim "pvc-azuredisk" is invalid: spec.resources.requests.storage: Forbidden: field can not be less than previous value.Die Ausgabe des Befehls sieht in etwa wie im folgenden Beispiel aus:
persistentvolumeclaim/pvc-azuredisk patchedFühren Sie den folgenden Befehl aus, um zu bestätigen, dass die Volumengröße erhöht wurde:
kubectl get pvDie Ausgabe des Befehls sieht in etwa wie im folgenden Beispiel aus:
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 (...)Führen Sie nach ein paar Minuten die folgenden Befehle aus, um die Größe des PVC zu bestätigen:
kubectl get pvc pvc-azurediskDie Ausgabe des Befehls sieht in etwa wie im folgenden Beispiel aus:
NAME STATUS VOLUME CAPACITY ACCESS MODES STORAGECLASS AGE pvc-azuredisk Bound pvc-391ea1a6-0191-4022-b915-c8dc4216174a 15Gi RWO managed-csi 2d2hFühren Sie den folgenden Befehl aus, um die Größe des Datenträgers innerhalb des Pods zu bestätigen:
kubectl exec -it nginx-azuredisk -- df -h /mnt/azurediskDie Ausgabe des Befehls sieht in etwa wie im folgenden Beispiel aus:
Filesystem Size Used Avail Use% Mounted on /dev/sdc 15G 46M 15G 1% /mnt/azuredisk
Wenn Ihr Pod über mehrere Container verfügt, können Sie mithilfe des folgenden Befehls angeben, welcher Container gemeint ist.
kubectl exec -it nginx-azuredisk -c <ContainerName> -- df -h /mnt/azuredisk
Windows-Container
Der Azure Disk CSI-Treiber unterstützt Windows-Knoten und -Container. Wenn Sie Windows-Container verwenden möchten, folgen Sie den Windows-Containern schnellstart , um einen Windows-Knotenpool hinzuzufügen.
Nachdem Sie über einen Windows-Knotenpool verfügen, können Sie jetzt die integrierten Speicherklassen wie
managed-csi, z. B. verwenden. Sie können ein Windows-basiertes StatefulSet-Beispiel bereitstellen, das Zeitstempel in der Dateidata.txtspeichert, indem Sie den folgenden kubectl apply-Befehl ausführen:kubectl apply -f https://raw.githubusercontent.com/kubernetes-sigs/azuredisk-csi-driver/master/deploy/example/windows/statefulset.yamlDie Ausgabe des Befehls sieht in etwa wie im folgenden Beispiel aus:
statefulset.apps/busybox-azuredisk createdFühren Sie den folgenden Befehl aus, um den Inhalt des Volumes zu überprüfen:
kubectl exec -it statefulset-azuredisk-win-0 -- powershell -c "type c:/mnt/azuredisk/data.txt"Die Ausgabe des Befehls sieht in etwa wie im folgenden Beispiel aus:
2020-08-27 08:13:41Z 2020-08-27 08:13:42Z 2020-08-27 08:13:44Z (...)
On-Demand-Platzung
Beim bedarfsgesteuerten Festplatten-Ausbruchsmodell können Festplatten-Ausbrüche immer dann ausgeführt werden, wenn die Anforderungen der Festplatte ihre aktuelle Kapazität überschreiten. Dieses Modell generiert jederzeit zusätzliche Gebühren, wenn die Festplatte burstet. On-Demand-Bursting ist nur für Premium-SSDs verfügbar, die größer als 512 GiB sind. Weitere Informationen zu Premium-SSDs, die IOPS und Durchsatz pro Datenträger bereitgestellt haben, finden Sie unter Premium SSD-Größe. Alternativ ist kreditbasiertes Bursting der Ort, an dem der Datenträger nur dann platzt, wenn es Guthaben in seinem Kredit-Bucket angesammelt hat. Kreditbasiertes Bursting generiert keine zusätzlichen Gebühren, wenn der Datenträger platzt. Credit-based Bursting ist nur für Premium-SSDs 512 GiB und kleiner und Standard-SSDs 1,024 GiB und kleiner verfügbar. Weitere Informationen zum On-Demand-Bursting finden Sie unter "On-Demand-Bursting".
Von Bedeutung
Die Standardspeicherklasse managed-csi-premium hat "On-Demand-Bursting" deaktiviert und verwendet kreditbasiertes Bursting. Jede Premium-SSD, die dynamisch durch einen persistenten Volume-Claim basierend auf der Standard-Speicherklasse managed-csi-premium erstellt wird, hat auch das On-Demand-Bursting deaktiviert.
Um ein Premium SSD-persistentes Volume mit aktiviertem On-Demand-Bursting zu erstellen, können Sie eine neue Speicherklasse erstellen, wobei der Parameter enableBursting in der folgenden YAML-Vorlage auf true festgelegt ist. Weitere Informationen zum Aktivieren von On-Demand-Bursting finden Sie unter "On-Demand-Bursting". Weitere Informationen zum Erstellen Ihrer eigenen Speicherklasse mit aktiviertem On-Demand-Bursting finden Sie unter Create a Burstable Managed CSI Premium Storage Class.
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
Bereinigen von Ressourcen
Wenn Sie mit den in diesem Artikel erstellten Ressourcen fertig sind, können Sie sie mithilfe des Befehls kubectl delete entfernen.
# Remove the pod
kubectl delete -f azure-pvc-disk.yaml
# Remove the persistent volume claim
kubectl delete -f azure-pvc.yaml
Bereitstellen von Azure Files-PVs
Azure Files unterstützt Azure Premium-Dateifreigaben. Die kleinstmögliche Kapazität für Dateifreigaben beträgt 100 GiB. Wir empfehlen, Azure Premium-Dateifreigaben anstelle von Standarddateifreigaben zu verwenden, da Premium-Dateifreigaben höhere Leistung und niedriglatenzige Festplattenunterstützung für E/A-intensive Workloads bieten. Bei Azure Files-Freigaben gibt es keine Beschränkung, wie viele auf einem Knoten bereitgestellt werden können. Weitere Informationen zu Kubernetes-Volumes finden Sie unter Speicheroptionen für Anwendungen in AKS.
Wenn Sie CSI-Speichertreiber in AKS verwenden, gibt es zwei zusätzliche integrierte Speicherklassen (StorageClasses), die die Azure Files-CSI-Speichertreiber verwenden. Die anderen CSI-Speicherklassen werden zusammen mit dem Cluster und zusätzlich zu den Standardspeicherklassen in der Struktur erstellt.
azurefile-csi: Verwendet Azure Storage Standard zum Erstellen einer Azure-Dateifreigabe.azurefile-csi-premium: Verwendet Azure Storage Premium zum Erstellen einer Azure-Dateifreigabe.
Die Freigaberichtlinie für beide Speicherklassen stellt sicher, dass beim Löschen eines persistenten Volumes auch die zugrunde liegende Azure Files Freigabe gelöscht wird. Da die Speicherklassen auch die Dateifreigaben so konfigurieren, dass sie erweiterbar sind, müssen Sie nur das PVC mit der neuen Größe bearbeiten.
Hinweis
Um die beste Erfahrung mit Azure Files zu erhalten, befolgen Sie diese bewährten Methoden. Der Speicherort zum Konfigurieren der Bereitstellungsoptionen (mountOptions) hängt davon ab, ob Sie dynamische oder statische persistente Volumes bereitstellen.
- Wenn Sie ein Volume dynamisch mit einer Speicherklasse bereitstellen, geben Sie die Bereitstellungsoptionen für das Speicherklassenobjekt an (Art:
StorageClass). - Wenn Sie ein Volume statisch bereitstellen, geben Sie die Bereitstellungsoptionen für das PersistentVolume-Objekt an (Art:
PersistentVolume). - Wenn Sie die Dateifreigabe als Inline-Volume bereitstellen, geben Sie die Mount-Optionen für das Pod-Objekt an (Typ:
Pod).
Wir empfehlen FIO bei der Durchführung von Benchmarking-Tests. Weitere Informationen finden Sie unter Benchmarking-Tools und -Tests.
Mit einer Speicherklasse wird festgelegt, wie eine Azure-Dateifreigabe erstellt wird. Es wird automatisch ein Speicherkonto in der Knotenressourcengruppe für die Verwendung mit der Speicherklasse erstellt, in dem die Azure-Dateifreigabe gespeichert wird. Wählen Sie für skuName eine der folgenden Azure-Speicherredundanz-SKUs aus:
- Standard_LRS: Lokal redundanter Standardspeicher
- Standard_GRS: Standardmäßiger georedundanter Speicher
- Standard_ZRS: Standardzonenredundanter Speicher
- Standard_RAGRS: Standardmäßiger georedundanter Lesezugriffsspeicher
- Standard_RAGZRS: Standardmäßiger geozonenredundanter Lesezugriffsspeicher
- Premium_LRS: Lokal redundanter Premium-Speicher
- Premium_ZRS: Premium-zonenredundanter Speicher
Weitere Informationen zu Kubernetes-Speicherklassen für Azure Files finden Sie unter Kubernetes-Speicherklassen.
Erstellen Sie eine Datei mit dem Namen
azure-file-sc.yaml, und fügen Sie das folgende Beispielmanifest ein. Weitere InformationenmountOptionsfinden Sie im Abschnitt " Mount options ".kind: StorageClass apiVersion: storage.k8s.io/v1 metadata: name: my-azurefile provisioner: file.csi.azure.com # replace with "kubernetes.io/azure-file" if aks version is less than 1.21 allowVolumeExpansion: true mountOptions: - dir_mode=0777 - file_mode=0777 - uid=0 - gid=0 - mfsymlinks - cache=strict - actimeo=30 - nobrl # disable sending byte range lock requests to the server and for applications which have challenges with posix locks parameters: skuName: Premium_LRSErstellen Sie die Speicherklasse mit dem Befehl
kubectl apply.kubectl apply -f azure-file-sc.yaml
Erstellen Sie ein PVC
Ein PVC verwendet das Speicherklassenobjekt, um eine Azure-Dateifreigabe dynamisch bereitzustellen. Mit dem folgenden YAML können Sie ein PVC mit 100 GB Größe mit ReadWriteMany-Zugriff erstellen. Weitere Informationen zu Zugriffsmodi finden Sie unter Persistentes Kubernetes-Volume.
Erstellen Sie eine Datei namens „
azure-file-pvc.yaml“, und fügen Sie den folgenden YAML-Code ein. Stellen Sie sicher, dassstorageClassNameder Speicherklasse, die Sie im vorherigen Schritt erstellt haben, entspricht.apiVersion: v1 kind: PersistentVolumeClaim metadata: name: my-azurefile spec: accessModes: - ReadWriteMany storageClassName: my-azurefile resources: requests: storage: 100GiHinweis
Wenn Sie die
Premium_LRS-SKU für die Speicherklasse verwenden, muss der Wert fürstoragemindestens100Gibetragen.Erstellen Sie das PVC mit dem
kubectl applyBefehl.kubectl apply -f azure-file-pvc.yamlNach Abschluss des Vorgangs wird die Dateifreigabe erstellt. Außerdem wird ein Kubernetes-Geheimnis erstellt, das die Verbindungs- und Anmeldeinformationen enthält. Mit dem Befehl
kubectl getkönnen Sie den Status des PVC anzeigen:kubectl get pvc my-azurefileDie Ausgabe des Befehls sieht in etwa wie im folgenden Beispiel aus:
NAME STATUS VOLUME CAPACITY ACCESS MODES STORAGECLASS AGE my-azurefile Bound pvc-8436e62e-a0d9-11e5-8521-5a8664dc0477 100Gi RWX my-azurefile 5m
Montage des PVC
Im folgenden YAML wird ein Pod erstellt, das das PVC my-azurefile verwendet, um die Azure Files-Dateifreigabe auf dem Pfad /mnt/azure zu mounten. Geben Sie für Windows Server-Container einen Pfad nach der Windows-Pfadkonvention an, z. B. "D:".
Erstellen Sie eine Datei mit dem Namen
azure-pvc-files.yaml, und fügen Sie den folgenden YAML-Code ein. Stellen Sie sicher, dass derclaimNamemit dem PVC übereinstimmt, den Sie im vorherigen Schritt erstellt haben.kind: Pod apiVersion: v1 metadata: name: mypod spec: containers: - name: mypod image: mcr.microsoft.com/oss/nginx/nginx:1.15.5-alpine resources: requests: cpu: 100m memory: 128Mi limits: cpu: 250m memory: 256Mi volumeMounts: - mountPath: /mnt/azure name: volume readOnly: false volumes: - name: volume persistentVolumeClaim: claimName: my-azurefileErstellen Sie den Pod mit dem Befehl
kubectl apply.kubectl apply -f azure-pvc-files.yamlSie verfügen jetzt über einen ausgeführten Pod mit Ihrer Azure Files-Dateifreigabe, die im Verzeichnis "/mnt/azure " bereitgestellt ist. Diese Konfiguration wird angezeigt, wenn Sie Ihren Pod mit dem Befehl
kubectl describeüberprüfen. In der folgenden verkürzten Beispielausgabe ist das im Container eingebundene Volume angegeben.Containers: mypod: Container ID: docker://053bc9c0df72232d755aa040bfba8b533fa696b123876108dec400e364d2523e Image: mcr.microsoft.com/oss/nginx/nginx:1.15.5-alpine Image ID: docker-pullable://nginx@sha256:d85914d547a6c92faa39ce7058bd7529baacab7e0cd4255442b04577c4d1f424 State: Running Started: Fri, 01 Mar 2019 23:56:16 +0000 Ready: True Mounts: /mnt/azure from volume (rw) /var/run/secrets/kubernetes.io/serviceaccount from default-token-8rv4z (ro) [...] Volumes: volume: Type: PersistentVolumeClaim (a reference to a PersistentVolumeClaim in the same namespace) ClaimName: my-azurefile ReadOnly: false [...]
Einbindungsoptionen
Für Kubernetes-Versionen 1.13.0 und höher sind die Standardwerte für fileMode und dirMode sind 0777. Wenn Sie PVs dynamisch mithilfe einer Speicherklasse bereitstellen, können Sie Bereitstellungsoptionen direkt im Speicherklassenmanifest definieren. Ausführliche Informationen finden Sie unter Bereitstellungsoptionen. Das folgende Beispiel veranschaulicht das Festlegen dieser Berechtigungen auf 0777:
kind: StorageClass
apiVersion: storage.k8s.io/v1
metadata:
name: my-azurefile
provisioner: file.csi.azure.com # replace with "kubernetes.io/azure-file" if aks version is less than 1.21
allowVolumeExpansion: true
mountOptions:
- dir_mode=0777
- file_mode=0777
- uid=0
- gid=0
- mfsymlinks
- cache=strict
- actimeo=30
- nobrl # disable sending byte range lock requests to the server and for applications which have challenges with posix locks
parameters:
skuName: Premium_LRS
Speicherklassenparameter für dynamische Volumes
Die folgende Tabelle enthält Parameter, die Sie zum Definieren einer benutzerdefinierten Speicherklasse für Ihr PVC verwenden können.
| Name | Bedeutung | Verfügbarer Wert | Obligatorisch. | Standardwert |
|---|---|---|---|---|
| accountAccessTier | Zugriffsebene für das Speicherkonto | Für das Standard-Konto kann Hot oder Cool und für das Premium-Konto nur Premium ausgewählt werden. |
Nein | Leer. Verwenden Sie die Standardeinstellung für verschiedene Speicherkontotypen. |
| accountQuota | Hiermit wird das Kontingent für ein Konto eingeschränkt. Sie können ein maximales Kontingent in GB angeben (standardmäßig 102.400 GB). Wenn das Konto das angegebene Kontingent überschreitet, überspringt der Treiber die Auswahl des Kontos. | Nein | 102400 |
|
| allowBlobPublicAccess | Erlauben oder verweigern Sie den öffentlichen Zugriff auf alle Blobs oder Container für das vom Treiber erstellte Speicherkonto. |
true oder false |
Nein | false |
| disableDeleteRetentionPolicy | Angabe, ob DeleteRetentionPolicy für das vom Treiber erstellte Speicherkonto deaktiviert werden soll |
true oder false |
Nein | false |
| folderName | Angabe des Ordnernamens in der Azure-Dateifreigabe | Vorhandener Ordnername in der Azure-Dateifreigabe | Nein | Ist der Ordnername in der Dateifreigabe nicht vorhanden, ist die Einbindung nicht erfolgreich. |
| getLatestAccount | Bestimmt, ob der neueste Kontoschlüssel basierend auf der Erstellungszeit abgerufen werden soll. Dieser Treiber ruft standardmäßig den ersten Schlüssel ab. |
true oder false |
Nein | false |
| location | Geben Sie die Azure-Region des Azure-Speicherkontos an. | Beispiel: eastus. |
Nein | Ohne Angabe verwendet der Treiber den gleichen Standortnamen wie der aktuelle AKS-Cluster. |
| matchTags | Tags abgleichen, wenn der Treiber versucht, ein geeignetes Speicherkonto zu finden. |
true oder false |
Nein | false |
| networkEndpointType 1 | Geben Sie den Netzwerkendpunkttyp für das vom Treiber erstellte Speicherkonto an. Wird privateEndpoint angegeben, wird ein privater Endpunkt für das Speicherkonto erstellt. In anderen Fällen wird standardmäßig ein Dienstendpunkt erstellt. |
"",privateEndpoint |
Nein | "" |
| protocol | Geben Sie das Dateifreigabeprotokoll an. |
smb, nfs |
Nein | smb |
| requireInfraEncryption | Angabe, ob der Dienst eine sekundäre Verschlüsselungsebene mit plattformseitig verwalteten Schlüsseln für ruhende Daten für das vom Treiber erstellte Speicherkonto anwendet |
true oder false |
Nein | false |
| resourceGroup | Geben Sie die Ressourcengruppe für die Azure Disks an. | Vorhandener Ressourcengruppenname | Nein | Ohne Angabe verwendet der Treiber den gleichen Ressourcengruppennamen wie der aktuelle AKS-Cluster. |
| selectRandomMatchingAccount | Hiermit wird bestimmt, ob ein übereinstimmendes Konto nach dem Zufallsprinzip ausgewählt werden soll. Standardmäßig wählt der Treiber immer das erste übereinstimmende Konto in alphabetischer Reihenfolge aus. (Hinweis: Dieser Treiber verwendet den Kontosuchcache, was zu einer ungleichen Verteilung der Dateierstellung bei mehreren Konten führt.) |
true oder false |
Nein | false |
| server | Geben Sie die Serveradresse des Azure-Speicherkontos an. | Vorhandene Serveradresse, z. B. accountname.privatelink.file.core.windows.net |
Nein | Ohne Angabe verwendet der Treiber standardmäßig accountname.file.core.windows.net oder eine andere Sovereign Cloud-Kontoadresse. |
| shareAccessTier | Zugriffsebene für die Dateifreigabe | Für ein Konto vom Typ „Allgemein, Version 2“ kann zwischen TransactionOptimized (Standardwert), Hot und Cool gewählt werden. Kontotyp „Premium Storage“ nur für Dateifreigaben. |
Nein | Leer. Verwenden Sie die Standardeinstellung für verschiedene Speicherkontotypen. |
| shareName | Geben Sie einen Azure-Dateifreigabenamen an. | Vorhandener oder neuer Name der Azure-Dateifreigabe | Nein | Ohne Angabe generiert der Treiber einen Namen für die Azure-Dateifreigabe. |
| shareNamePrefix | Angabe des vom Treiber erstellten Präfixes für den Namen der Azure-Dateifreigabe | Der Freigabename darf nur Kleinbuchstaben, Ziffern und Bindestriche enthalten und sollte weniger als 21 Zeichen lang sein. | Nein | |
| skuName | Azure Files-Speicherkontotyp (Alias: storageAccountType) |
Standard_LRS, Standard_ZRS, Standard_GRS, Standard_RAGRS, Standard_RAGZRS, Premium_LRS, Premium_ZRS, StandardV2_LRS, StandardV2_ZRS, StandardV2_GRS, StandardV2_GZRS, PremiumV2_LRS, PremiumV2_ZRS |
Nein | Standard_LRSDie Mindestgröße der Dateifreigabe für den Kontotyp „Premium“ beträgt 100 GB. Der ZRS-Kontotyp wird in einer begrenzten Anzahl von Regionen unterstützt. Die NFS-Dateifreigabe unterstützt nur den Kontotyp „Premium“. Standard-V2-SKU-Namen gelten für das v2-Modell von Azure Files. |
| 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. |
| storageEndpointSuffix | Geben Sie das Suffix für den Azure-Speicherendpunkt an. |
core.windows.net, core.chinacloudapi.cn usw. |
Nein | Ohne Angabe verwendet der Treiber das Standardsuffix für den Speicherendpunkt gemäß der Cloudumgebung. Beispiel: core.windows.net. |
| tags | Tags werden in einem neuen Speicherkonto erstellt. | Tagformat: „foo=aaa,bar=bbb“ | Nein | "" |
1 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.file.core.windows.net). Wenn Sie Ihr eigenes Speicherkonto verwenden, müssen Sie den privaten Endpunkt für das Speicherkonto erstellen. Wenn Sie den Azure Files-Speicher in einem isolierten Netzwerkcluster verwenden, müssen Sie eine benutzerdefinierte Speicherklasse mit "networkEndpointType: privateEndpoint" erstellen. Sie können diesem Beispiel zur Referenz folgen:
apiVersion: storage.k8s.io/v1
kind: StorageClass
metadata:
name: azurefile-csi
provisioner: file.csi.azure.com
allowVolumeExpansion: true
parameters:
skuName: Premium_LRS # available values: Premium_LRS, Premium_ZRS, Standard_LRS, Standard_GRS, Standard_ZRS, Standard_RAGRS, Standard_RAGZRS
networkEndpointType: privateEndpoint
reclaimPolicy: Delete
volumeBindingMode: Immediate
mountOptions:
- dir_mode=0777 # modify this permission if you want to enhance the security
- file_mode=0777
- mfsymlinks
- cache=strict # https://linux.die.net/man/8/mount.cifs
- nosharesock # reduce probability of reconnect race
- actimeo=30 # reduce latency for metadata-heavy workload
- nobrl # disable sending byte range lock requests to the server and for applications which have challenges with posix locks
Statische Bereitstellungsparameter für PVs
Die folgende Tabelle enthält Parameter, die Sie zum Definieren einer PV verwenden können.
| Name | Bedeutung | Verfügbarer Wert | Obligatorisch. | Standardwert |
|---|---|---|---|---|
| volumeAttributes.resourceGroup | Geben Sie einen Azure-Ressourcengruppennamen 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 | Yes | |
| volumeAttributes.shareName | Geben Sie einen Azure-Dateifreigabenamen an. | fileShareName | Yes | |
| volumeAttributes.folderName | Geben Sie einen Ordnernamen in der Azure-Dateifreigabe an. | folderName | Nein | Ist der Ordnername in der Dateifreigabe nicht vorhanden, ist die Einbindung nicht erfolgreich. |
| volumeAttributes.protocol | Geben Sie das Dateifreigabeprotokoll an. |
smb, nfs |
Nein | smb |
| volumeAttributes.server | Angabe der Serveradresse des Azure-Speicherkontos | Vorhandene Serveradresse, z. B. accountname.privatelink.file.core.windows.net |
Nein | Ohne Angabe verwendet der Treiber standardmäßig accountname.file.core.windows.net oder eine andere Sovereign Cloud-Kontoadresse. |
Erstellen einer PV-Momentaufnahmeklasse
Der Azure Files-CSI-Treiber unterstützt das Erstellen von Momentaufnahmen von permanenten Volumes und den zugrunde liegenden Dateifreigaben.
Verwenden Sie den Befehl kubectl apply zum Erstellen einer Momentaufnahmeklasse für das Volume:
kubectl apply -f https://raw.githubusercontent.com/kubernetes-sigs/azurefile-csi-driver/master/deploy/example/snapshot/volumesnapshotclass-azurefile.yamlDie Ausgabe des Befehls sieht in etwa wie im folgenden Beispiel aus:
volumesnapshotclass.snapshot.storage.k8s.io/csi-azurefile-vsc createdErstellen Sie einen Volumesnapshot aus dem zuvor erstellten PVC (
pvc-azurefile).kubectl apply -f https://raw.githubusercontent.com/kubernetes-sigs/azurefile-csi-driver/master/deploy/example/snapshot/volumesnapshot-azurefile.yamlDie Ausgabe des Befehls sieht in etwa wie im folgenden Beispiel aus:
volumesnapshot.snapshot.storage.k8s.io/azurefile-volume-snapshot createdFühren Sie den folgenden Befehl aus, um sich zu vergewissern, dass die Momentaufnahme ordnungsgemäß erstellt wurde:
kubectl describe volumesnapshot azurefile-volume-snapshotDie Ausgabe des Befehls sieht in etwa wie im folgenden Beispiel aus:
Name: azurefile-volume-snapshot Namespace: default Labels: <none> Annotations: API Version: snapshot.storage.k8s.io/v1beta1 Kind: VolumeSnapshot Metadata: Creation Timestamp: 2020-08-27T22:37:41Z Finalizers: snapshot.storage.kubernetes.io/volumesnapshot-as-source-protection snapshot.storage.kubernetes.io/volumesnapshot-bound-protection Generation: 1 Resource Version: 955091 Self Link: /apis/snapshot.storage.k8s.io/v1beta1/namespaces/default/volumesnapshots/azurefile-volume-snapshot UID: c359a38f-35c1-4fb1-9da9-2c06d35ca0f4 Spec: Source: Persistent Volume Claim Name: pvc-azurefile Volume Snapshot Class Name: csi-azurefile-vsc Status: Bound Volume Snapshot Content Name: snapcontent-c359a38f-35c1-4fb1-9da9-2c06d35ca0f4 Ready To Use: false Events: <none>
Ändern der Größe einer Azure Files PV
Sie können ein größeres Volume für einen Anspruch auf ein persistentes Volume anfordern. Bearbeiten Sie das PVC-Objekt, und geben Sie eine höhere Größe an. Diese Änderung löst die Erweiterung des zugrunde liegenden Volumes für den Anspruch auf ein persistentes Volume aus.
Hinweis
Für den Anspruch wird nie ein neues persistentes Volume erstellt. Stattdessen wird die Größe eines vorhandenen Volumes geändert. Das Verkleinern persistenter Volumes wird derzeit nicht unterstützt.
In AKS unterstützt die integrierte azurefile-csi Speicherklasse bereits die Erweiterung, daher verwenden Sie das PVC, das wir zuvor mit dieser Speicherklasse erstellt haben. Der Anspruch auf ein persistentes Volume hat eine 100 GiB große Dateifreigabe angefordert. Sie können dies überprüfen, indem Sie Folgendes ausführen:
kubectl exec -it nginx-azurefile -- df -h /mnt/azurefile
Die Ausgabe des Befehls sieht in etwa wie im folgenden Beispiel aus:
Filesystem Size Used Avail Use% Mounted on
//f149b5a219bd34caeb07de9.file.core.windows.net/pvc-5e5d9980-da38-492b-8581-17e3cad01770 100G 128K 100G 1% /mnt/azurefile
Vergrößern Sie das Feld
spec.resources.requests.storage, um den Anspruch auf ein persistentes Volume zu erweitern:kubectl patch pvc pvc-azurefile --type merge --patch '{"spec": {"resources": {"requests": {"storage": "200Gi"}}}}'Die Ausgabe des Befehls sieht in etwa wie im folgenden Beispiel aus:
persistentvolumeclaim/pvc-azurefile patchedÜberprüfen Sie, ob sowohl der Anspruch auf ein persistentes Volume als auch das Dateisystem im Pod die neue Größe aufweisen:
kubectl get pvc pvc-azurefile NAME STATUS VOLUME CAPACITY ACCESS MODES STORAGECLASS AGE pvc-azurefile Bound pvc-5e5d9980-da38-492b-8581-17e3cad01770 200Gi RWX azurefile-csi 64m kubectl exec -it nginx-azurefile -- df -h /mnt/azurefile Filesystem Size Used Avail Use% Mounted on //f149b5a219bd34caeb07de9.file.core.windows.net/pvc-5e5d9980-da38-492b-8581-17e3cad01770 200G 128K 200G 1% /mnt/azurefile
Verwenden eines PV mit privatem Azure Files-Speicher (privater Endpunkt)
Wenn Ihre Azure Files-Ressourcen durch einen privaten Endpunkt geschützt sind, müssen Sie Ihre eigene Speicherklasse erstellen. Stellen Sie sicher, dass Sie Ihre DNS-Einstellungen so konfigurieren, dass die IP-Adresse des privaten Endpunkts in den FQDN der Verbindungszeichenfolge aufgelöst wird.
Passen Sie die folgenden Parameter an:
resourceGroup: Die Ressourcengruppe, in der das Speicherkonto bereitgestellt wurde.storageAccount: Der Name des Speicherkontos.server: Der FQDN des privaten Endpunkts des Speicherkontos.
Erstellen Sie eine Datei mit dem Namen
private-azure-file-sc.yaml, und fügen Sie dann das folgende Beispielmanifest in die Datei ein. Ersetzen Sie die Werte für<resourceGroup>und<storageAccountName>. Beispiel:apiVersion: storage.k8s.io/v1 kind: StorageClass metadata: name: private-azurefile-csi provisioner: file.csi.azure.com allowVolumeExpansion: true parameters: resourceGroup: <resourceGroup> storageAccount: <storageAccountName> server: <storageAccountName>.file.core.windows.net reclaimPolicy: Delete volumeBindingMode: Immediate mountOptions: - dir_mode=0777 - file_mode=0777 - uid=0 - gid=0 - mfsymlinks - cache=strict # https://linux.die.net/man/8/mount.cifs - nosharesock # reduce probability of reconnect race - actimeo=30 # reduce latency for metadata-heavy workloadVerwenden Sie den Befehl
kubectl apply, um die Speicherklasse zu erstellen:kubectl apply -f private-azure-file-sc.yamlDie Ausgabe des Befehls sieht in etwa wie im folgenden Beispiel aus:
storageclass.storage.k8s.io/private-azurefile-csi createdErstellen Sie eine Datei mit dem Namen
private-pvc.yaml, und fügen Sie dann das folgende Beispielmanifest in die Datei ein:apiVersion: v1 kind: PersistentVolumeClaim metadata: name: private-azurefile-pvc spec: accessModes: - ReadWriteMany storageClassName: private-azurefile-csi resources: requests: storage: 100GiErstellen Sie das PVC mit dem Befehl "kubectl apply" :
kubectl apply -f private-pvc.yaml
Verwenden der verwalteten Identität für den Zugriff auf den Azure Files-Speicher (Vorschau)
Azure Files unterstützt jetzt die verwaltete identitätsbasierte Authentifizierung für den SMB-Zugriff. Mit dieser Funktion können Ihre Anwendungen, die in AKS ausgeführt werden, sicher auf Azure Files-Freigaben zugreifen, ohne dass Speicherkontoschlüssel oder Anmeldeinformationen gespeichert oder verwaltet werden müssen. Verwaltete Identitäten bieten einen optimierten und sicheren Authentifizierungsmechanismus, vereinfachen die Zugriffsverwaltung und verringern das Risiko, das mit der Gefährdung von Anmeldeinformationen verbunden ist. Sie können ein dynamisches Volume oder ein statisches Volume erstellen.
Hinweis
Die Vorschauversion von AKS unterstützt verwaltete Identitäten für Azure Files ab Version 1.34 auf Linux-Knoten.
Führen Sie die folgenden Schritte aus, um verwaltete Identität für dynamisch bereitgestellte Volumes zu aktivieren:
Erstellen Sie eine Speicherklasse mit aktivierter verwalteter Identität mithilfe einer YAML-Datei,
azurefile-csi-managed-identity.yamlz. B. mit dem folgenden Beispielinhalt. Platzieren SiemountWithManagedIdentity: "true"unterparameters:apiVersion: storage.k8s.io/v1 kind: StorageClass metadata: name: azurefile-csi provisioner: file.csi.azure.com parameters: resourceGroup: EXISTING_RESOURCE_GROUP_NAME # optional, node resource group by default if it's not provided storageAccount: EXISTING_STORAGE_ACCOUNT_NAME # optional, a new account will be created if it's not provided mountWithManagedIdentity: "true" # optional, clientID of the managed identity, kubelet identity would be used by default if it's not provided clientID: "xxxxx-xxxx-xxx-xxx-xxxxxxx" reclaimPolicy: Delete volumeBindingMode: Immediate allowVolumeExpansion: true mountOptions: - dir_mode=0777 # modify this permission if you want to enhance the security - file_mode=0777 - uid=0 - gid=0 - mfsymlinks - cache=strict # https://linux.die.net/man/8/mount.cifs - nosharesock # reduce probability of reconnect race - actimeo=30 # reduce latency for metadata-heavy workload - nobrl # disable sending byte range lock requests to the serverWenden Sie diese Speicherklasse an, indem Sie den folgenden Befehl ausführen:
kubectl apply -f azurefile-csi-managed-identity.yamlStellen Sie Ihr StatefulSet oder Ihre Workload mithilfe der neuen Speicherklasse bereit, die auf dieses PVC verweist, um sicherzustellen, dass das Volume mithilfe der verwalteten Identitätsauthentifizierung bereitgestellt wird. Legen Sie
storageClassName: azurefile-csi-managed-identityin Ihrem PVC-Manifest fest. Beispiel:apiVersion: v1 kind: PersistentVolumeClaim metadata: name: azurefile-managed-identity-pvc spec: accessModes: - ReadWriteMany storageClassName: azurefile-csi-managed-identity resources: requests: storage: 100Gi
Informationen zu Azure Files NFS
Azure Files unterstützt das NFS v4.1-Protokoll. Die Unterstützung von NFS Version 4.1 für Azure Files bietet Ihnen ein vollständig verwaltetes NFS-System als Dienst, das auf einer hochverfügbaren, hochresistenten, verteilten und resilienten Speicherplattform basiert.
Diese Option ist für Workloads mit zufälligem Zugriff und direkten Datenaktualisierungen optimiert und bietet vollständige Unterstützung für POSIX-Dateisysteme. In diesem Abschnitt erfahren Sie, wie Sie NFS-Freigaben mit dem Azure Files-CSI-Treiber in einem AKS-Cluster verwenden.
Hinweis
Sie können einen privaten Endpunkt verwenden, anstatt den Zugriff auf das ausgewählte VNet zuzulassen.
In diesem Abschnitt wird erläutert, wie Sie die Leistung und Sicherheit bei Verwendung von Azure Files NFS 4.1 mit AKS maximieren. Erfahren Sie, wie Sie Folgendes tun können:
Optimieren von NFS-Lese- und Schreibgrößeneinstellungen
Erstellen und Konfigurieren einer NFS-Speicherklasse
Bereitstellen von Workloads, die NFS-unterstützte Volumen verwenden
Aktivieren Sie Verschlüsselung während der Übertragung (EiT), um Daten zu schützen, während sie zwischen Ihrem AKS-Cluster und Azure Files verschoben wird.
Dieser Abschnitt enthält Informationen zum Ansatz zur Leistungsoptimierung von NFS mit dem Azure Files CSI-Treiber mit den rsize Optionen (Lesegröße) und wsize (Schreibgröße). Die Optionen rsize und wsize legen gemeinsam die maximale Übertragungsgröße eines NFS-Vorgangs fest. Wenn rsize oder wsize beim Einbinden nicht angegeben werden, handeln Client und Server die höchste von beiden unterstützte Größe aus. Derzeit unterstützen sowohl Azure Files als auch moderne Linux-Distributionen Lese- und Schreibgrößen von bis zu 1.048.576 Bytes (1 MiB).
Für eine optimale Leistung muss die Client-Server-Kommunikation möglichst effizient sein. Das Erhöhen oder Verringern der Werte für Lese- und Schreibgröße der Bereitstellung kann die NFS-Leistung verbessern. Die Standardgröße der zwischen Client und Server übertragenen Lese-/Schreibpakete beträgt 8 KB für NFS Version 2 und 32 KB für NFS Version 3 und 4. Diese Standardwerte sind möglicherweise zu groß oder zu klein. Das Reduzieren von rsize und wsize könnte die NFS-Leistung in einem überlasteten Netzwerk verbessern, indem kleinere Pakete für jede NFS-Leseantwort und -schreibanforderung gesendet werden. Diese Reduzierung kann jedoch die Anzahl der Pakete erhöhen, die zum Senden von Daten über das Netzwerk benötigt werden, wodurch der gesamte Netzwerkdatenverkehr und die CPU-Auslastung auf dem Client und server erhöht werden.
Es ist wichtig, dass Sie Tests durchführen, um eine rsize effiziente Paketübertragung zu finden und wsize aufrechtzuerhalten, bei der der Durchsatz nicht verringert und die Latenz erhöht wird.
Um beispielsweise ein Maximum von rsize und wsize auf 256 KiB festzulegen, konfigurieren Sie die Speicherklasse mountOptions wie folgt:
apiVersion: storage.k8s.io/v1
kind: StorageClass
metadata:
name: azurefile-csi-nfs
provisioner: file.csi.azure.com
allowVolumeExpansion: true
parameters:
protocol: nfs
mountOptions:
- nconnect=4
- noresvport
- actimeo=30
- rsize=262144
- wsize=262144
Beispiele für andere Speicherklassen
Windows-Container
Der Azure Files-CSI-Treiber unterstützt auch Windows-Knoten und -Container. Wenn Sie Windows-Container verwenden möchten, gehen Sie wie in der Schnellstartanleitung für Windows-Container beschrieben vor, um einen Windows-Knotenpool hinzuzufügen.
Wenn Sie über einen Windows-Knotenpool verfügen, können Sie die integrierten Speicherklassen wie
azurefile-csiverwenden oder eine benutzerdefinierte Speicherklasse erstellen. Sie können ein exemplarisches Windows-basiertes StatefulSet-Objekt bereitstellen, das Zeitstempel in einer Datei (data.txt) speichert, indem Sie den Befehl kubectl apply ausführen:kubectl apply -f https://raw.githubusercontent.com/kubernetes-sigs/azurefile-csi-driver/master/deploy/example/windows/statefulset.yamlDie Ausgabe des Befehls sieht in etwa wie im folgenden Beispiel aus:
statefulset.apps/busybox-azurefile createdÜberprüfen Sie den Inhalt des Volumes, indem Sie den folgenden Kubectl-exec-Befehl ausführen:
kubectl exec -it busybox-azurefile-0 -- cat c:\\mnt\\azurefile\\data.txt # on Linux or MacOS Bash kubectl exec -it busybox-azurefile-0 -- cat c:\mnt\azurefile\data.txt # on Windows Powershell or CMDDie Ausgabe der Befehle sieht in etwa wie im folgenden Beispiel aus:
2020-08-27 22:11:01Z 2020-08-27 22:11:02Z 2020-08-27 22:11:04Z (...)
Nächste Schritte
- Informationen zu CSI-Treiberparametern für Azure Files finden Sie unter CSI-Treiberparameter.
- Weitere Informationen zu datenträgerbasierten Speicherlösungen finden Sie unter Datenträgerbasierte Lösungen in AKS.
- Weitere Informationen zu bewährten Speichermethoden finden Sie unter Bewährte Methoden für Speicher und Sicherungen in Azure Kubernetes Service.
- Weitere Informationen zu Azure Ultra Disk finden Sie unter [Verwenden von Ultradatenträgern auf Azure Kubernetes Service (AKS)][use-ultra-disks].
- Weitere Informationen zu Azure-Tags finden Sie unter Verwenden von Azure-Tags in Azure Kubernetes Service (AKS).