Manuelles Erstellen und Verwenden eines Linux-NFS-Servers (Network File System) mit Azure Kubernetes Service (AKS)
Die Datenfreigabe zwischen Containern ist häufig eine notwendige Komponente containerbasierter Dienste und Anwendungen. Sie haben in der Regel verschiedene Pods, die Zugriff auf die gleichen Informationen auf einem externen permanenten Datenträger benötigen. Während Azure Files infrage kommt, kann persistenter freigegebener Speicher auch durch Erstellen eines NFS-Servers auf einer Azure-VM bereitgestellt werden.
In diesem Artikel wird gezeigt, wie Sie einen NFS-Server auf einer Azure-VM mit Ubuntu erstellen und Ihren AKS-Cluster mit Zugriff auf dieses freigegebene Dateisystem als persistentes Volume einrichten.
Voraussetzungen
In diesem Artikel wird davon ausgegangen, dass Sie Folgendes haben, um diese Konfiguration zu unterstützen:
- Ein vorhandener AKS-Cluster. Wenn Sie nicht über ein AKS-Cluster verfügen, finden Sie Anleitungen zum Entwerfen einer Implementierung von AKS im Unternehmensmaßstab unter Plan Sie Ihr AKS-Design.
- Ihr AKS-Cluster muss sich im gleichen oder einem Azure-Peer-VNet (Virtual Network) wie der NFS-Server befinden. Der Cluster muss in einem vorhandenen VNet erstellt werden. Dies kann dasselbe VNet sein, zu dem auch Ihre VM mit dem NFS-Server gehört. Die Schritte zum Konfigurieren mit einem vorhandenen VNet werden in den folgenden Artikeln beschrieben: Erstellen eines AKS-Clusters in einem vorhandenen virtuellen Netzwerk und Tutorial: Herstellen von Verbindungen zwischen virtuellen Netzwerken durch Peerings für virtuelle Netzwerke mit dem Azure-Portal.
- Eine Azure-VM mit Ubuntu Linux der Version 18.04 oder höher. Informationen zum Bereitstellen einer Linux-VM in Azure finden Sie unter Erstellen und Verwalten von Linux-VMs.
Wenn Sie Ihren AKS-Cluster zuerst bereitstellen, füllt Azure bei der Bereitstellung Ihrer Azure-Ubuntu-VM automatisch die Einstellungen des virtuellen Netzwerks auf und ordnet die Ubuntu-VM demselben VNet zu. Wenn Sie stattdessen mit mittels Peering verknüpften Netzwerken arbeiten möchten, nutzen Sie die obige Dokumentation.
Bereitstellen des NFS-Servers auf einer VM
Um einen NFS-Server auf der Azure-VM mit Ubuntu bereitzustellen, kopieren Sie das folgende Bash-Skript und speichern es auf Ihrem lokalen Computer. Ersetzen Sie den Wert für die Variable AKS_SUBNET durch den richtigen aus Ihrem AKS-Cluster. Andernfalls wird durch den angegebenen Standardwert Ihr NFS-Server für alle Ports und Verbindungen geöffnet. In diesem Artikel lautet der Dateiname
nfs-server-setup.sh
.#!/bin/bash # This script should be executed on Linux Ubuntu Virtual Machine EXPORT_DIRECTORY=${1:-/export/data} DATA_DIRECTORY=${2:-/data} AKS_SUBNET=${3:-*} echo "Updating packages" apt-get -y update echo "Installing NFS kernel server" apt-get -y install nfs-kernel-server echo "Making data directory ${DATA_DIRECTORY}" mkdir -p ${DATA_DIRECTORY} echo "Making new directory to be exported and linked to data directory: ${EXPORT_DIRECTORY}" mkdir -p ${EXPORT_DIRECTORY} echo "Mount binding ${DATA_DIRECTORY} to ${EXPORT_DIRECTORY}" mount --bind ${DATA_DIRECTORY} ${EXPORT_DIRECTORY} echo "Giving 777 permissions to ${EXPORT_DIRECTORY} directory" chmod 777 ${EXPORT_DIRECTORY} parentdir="$(dirname "$EXPORT_DIRECTORY")" echo "Giving 777 permissions to parent: ${parentdir} directory" chmod 777 $parentdir echo "Appending bound directories into fstab" echo "${DATA_DIRECTORY} ${EXPORT_DIRECTORY} none bind 0 0" >> /etc/fstab echo "Appending localhost and Kubernetes subnet address ${AKS_SUBNET} to exports configuration file" echo "/export ${AKS_SUBNET}(rw,async,insecure,fsid=0,crossmnt,no_subtree_check)" >> /etc/exports echo "/export localhost(rw,async,insecure,fsid=0,crossmnt,no_subtree_check)" >> /etc/exports nohup service nfs-kernel-server restart
Das Skript initiiert einen Neustart des NFS-Servers. Danach können Sie mit dem Herstellen der Verbindung mit dem NFS-Server in Ihrem AKS-Cluster fortfahren.
Kopieren Sie nach dem Erstellen Ihrer Linux-VM die im vorherigen Schritt erstellte Datei vom lokalen Computer auf die VM, indem Sie den folgenden Befehl verwenden:
scp /path/to/nfs-server-setup.sh username@vm-ip-address:/home/{username}
Öffnen Sie nach dem Kopieren der Datei eine SSH-Verbindung (Secure Shell) mit der VM, und führen Sie den folgenden Befehl aus:
sudo ./nfs-server-setup.sh
Wenn bei der Ausführung ein Fehler aufgrund einer Berechtigungsverweigerung auftritt, legen Sie für alles die Ausführungsberechtigung mit dem folgenden Befehl fest:
chmod +x ~/nfs-server-setup.sh
Herstellen einer Verbindung des AKS-Clusters mit dem NFS-Server
Sie können durch Bereitstellung eines persistenten Volumes und des Anspruchs auf ein permanentes Volume, der angibt, wie auf das Volume zugegriffen wird, eine Verbindung des NFS-Servers von Ihrem AKS-Cluster herstellen. Das Verbinden der beiden Ressourcen im gleichen Netzwerk oder in mittels Peering verknüpften virtuellen Netzwerken ist erforderlich. Informationen zum Einrichten des Clusters im selben VNet finden Sie unter: Erstellen von AKS-Clustern in einem vorhandenen VNet.
Nachdem sich beide Ressourcen im selben VNet oder in mittels Peering verknüpften VNets befinden, stellen Sie ein persistentes Volume und einen Anspruch auf das persistente Volume in Ihrem AKS-Cluster bereit. Die Container können dann das NFS-Laufwerk in ihr lokales Verzeichnis einbinden.
Erstellen Sie ein YAML-Manifest namens pv-azurefilesnfs.yaml mit einem PersistentVolume. Beispiel:
apiVersion: v1 kind: PersistentVolume metadata: name: NFS_NAME labels: type: nfs spec: capacity: storage: 1Gi accessModes: - ReadWriteMany nfs: server: NFS_INTERNAL_IP path: NFS_EXPORT_FILE_PATH
Ersetzen Sie die Werte für NFS_INTERNAL_IP, NFS_NAME und NFS_EXPORT_FILE_PATH durch die tatsächlichen Einstellungen Ihres NFS-Servers.
Erstellen Sie ein YAML-Manifest namens pvc-azurefilesnfs.yaml mit einem PersistentVolumeClaim, der PersistentVolume verwendet. Beispiel:
Wichtig
Der Wert von storageClassName muss eine leere Zeichenfolge bleiben, andernfalls funktioniert der Anspruch nicht.
apiVersion: v1 kind: PersistentVolumeClaim metadata: name: NFS_NAME spec: accessModes: - ReadWriteMany storageClassName: "" resources: requests: storage: 1Gi selector: matchLabels: type: nfs
Ersetzen Sie den Wert für NFS_NAME durch die tatsächliche Einstellung Ihres NFS-Servers.
Problembehandlung
Wenn Sie von einem AKS-Cluster aus keine Verbindung mit dem Server herstellen können, verfügt möglicherweise das exportierte Verzeichnis oder das ihm übergeordnete Verzeichnis nicht über ausreichende Berechtigungen für den Zugriff auf die VM mit dem NFS-Server.
Stellen Sie sicher, dass sowohl Ihr Exportverzeichnis als auch das übergeordnete Verzeichnis über 777-Berechtigungen verfügt.
Sie können die Berechtigungen überprüfen, indem Sie den folgenden Befehl ausführen, dabei sollten die Verzeichnisse die Berechtigungen drwxrwxrwx aufweisen:
ls -l
Nächste Schritte
- Entsprechenden bewährte Methoden finden Sie unter Bewährte Methoden für die Speicherung und Sicherungen in AKS.
- Weitere Informationen zum Einrichten Ihres NFS-Servers oder zum Debuggen von Problemen finden Sie im folgenden Tutorial der Ubuntu-Community NFS-Tutorial.
Azure Kubernetes Service