Handmatig een Linux NFS-server (Network File System) maken en gebruiken met Azure Kubernetes Service (AKS)

Het delen van gegevens tussen containers is vaak een noodzakelijk onderdeel van op containers gebaseerde services en toepassingen. Meestal hebt u verschillende pods die toegang nodig hebben tot dezelfde informatie op een extern permanent volume. Hoewel Azure Files een optie is, is het maken van een NFS-server op een Azure-VM een andere vorm van permanente gedeelde opslag.

In dit artikel wordt beschreven hoe u een NFS-server maakt op een virtuele Machine van Azure Ubuntu en hoe u uw AKS-cluster instelt met toegang tot dit gedeelde bestandssysteem als permanent volume.

Voordat u begint

In dit artikel wordt ervan uitgegaan dat u het volgende hebt ter ondersteuning van deze configuratie:

  • Een bestaand AKS-cluster. Als u geen AKS-cluster hebt, raadpleegt u Uw AKS-ontwerp plannen voor hulp bij het ontwerpen van een zakelijke implementatie van AKS.
  • Uw AKS-cluster moet zich in hetzelfde virtuele Azure-netwerk (VNet) bevinden als de NFS-server. Het cluster moet worden gemaakt op een bestaand VNet, dat hetzelfde VNet kan zijn als uw NFS Server-VM. De stappen voor het configureren met een bestaand VNet worden beschreven in de volgende artikelen: het maken van een AKS-cluster in een bestaand VNET en het verbinden van virtuele netwerken met VNET-peering.
  • Een virtuele Azure Ubuntu Linux-machine met versie 18.04 of hoger. Zie Linux-VM's maken en beheren om een Virtuele Linux-machine in Azure te implementeren.

Als u uw AKS-cluster eerst implementeert, worden in Azure automatisch de instellingen van het virtuele netwerk ingevuld bij het implementeren van uw Azure Ubuntu-VM, waarbij de Ubuntu-VM wordt gekoppeld aan hetzelfde VNet. Als u in plaats daarvan wilt werken met gekoppelde netwerken, raadpleegt u de bovenstaande documentatie.

De NFS-server implementeren op een virtuele machine

  1. Als u een NFS-server wilt implementeren op de virtuele Machine van Azure Ubuntu, kopieert u het volgende Bash-script en slaat u het op uw lokale computer op. Vervang de waarde voor de variabele AKS_SUBNET door de juiste waarde uit uw AKS-cluster, anders wordt de NFS-server geopend met alle poorten en verbindingen. In dit artikel heeft het bestand de naam 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
    

    Met het script wordt de NFS-server opnieuw opgestart. Daarna kunt u doorgaan met het maken van verbinding met de NFS-server vanuit uw AKS-cluster.

  2. Nadat u de Virtuele Linux-machine hebt gemaakt, kopieert u het bestand dat u in de vorige stap hebt gemaakt van uw lokale computer naar de VM met behulp van de volgende opdracht:

    scp /path/to/nfs-server-setup.sh username@vm-ip-address:/home/{username}
    
  3. Nadat het bestand is gekopieerd, opent u een SSH-verbinding (Secure Shell) met de VIRTUELE machine en voert u de volgende opdracht uit:

    sudo ./nfs-server-setup.sh
    

    Als de uitvoering mislukt vanwege een fout met de machtiging geweigerd, stelt u de uitvoeringsmachtiging voor iedereen in door de volgende opdracht uit te voeren:

    chmod +x ~/nfs-server-setup.sh
    

AKS-cluster Verbinding maken naar NFS-server

U kunt verbinding maken met de NFS-server vanuit uw AKS-cluster door een permanent volume en permanente volumeclaim in te richten waarmee wordt aangegeven hoe u toegang krijgt tot het volume. Verbinding maken het maken van de twee resources in dezelfde of gekoppelde virtuele netwerken is nodig. Zie: AKS-cluster maken in een bestaand VNet voor meer informatie over het instellen van het cluster in hetzelfde VNet.

Zodra beide resources zich op hetzelfde virtuele of gekoppelde VNet bevinden, richt u een permanent volume en een permanente volumeclaim in uw AKS-cluster in. De containers kunnen het NFS-station vervolgens koppelen aan hun lokale map.

  1. Maak een YAML-manifest met de naam pv-azurefilesnfs.yaml met een PersistentVolume. Voorbeeld:

    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
    

    Vervang de waarden voor NFS_INTERNAL_IP, NFS_NAME en NFS_EXPORT_FILE_PATH door de werkelijke instellingen van uw NFS-server.

  2. Maak een YAML-manifest met de naam pvc-azurefilesnfs.yaml met een PersistentVolumeClaim die gebruikmaakt van het PersistentVolume. Voorbeeld:

    Belangrijk

    de waarde storageClassName moet een lege tekenreeks blijven of de claim werkt niet.

    apiVersion: v1
    kind: PersistentVolumeClaim
    metadata:
      name: NFS_NAME
    spec:
      accessModes:
        - ReadWriteMany
      storageClassName: ""
      resources:
        requests:
          storage: 1Gi
      selector: 
        matchLabels:
          type: nfs
    

    Vervang de waarde voor NFS_NAME door de werkelijke instelling van uw NFS-server.

Problemen oplossen

Als u geen verbinding kunt maken met de server vanuit uw AKS-cluster, is het probleem mogelijk de geƫxporteerde map of de bovenliggende map, niet over voldoende machtigingen voor toegang tot de NFS-server-VM.

Controleer of zowel uw exportmap als de bovenliggende map 777 machtigingen hebben.

U kunt machtigingen controleren door de volgende opdracht uit te voeren en de mappen moeten beschikken over de machtigingen drwxrwxrwx :

ls -l

Volgende stappen