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:

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

  1. 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.

  2. 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}
    
  3. Ö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.

  1. 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.

  2. 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