Skapa och använda en Linux NFS-server (Network File System) manuellt med Azure Kubernetes Service (AKS)

Att dela data mellan containrar är ofta en nödvändig komponent i containerbaserade tjänster och program. Du har vanligtvis olika poddar som behöver åtkomst till samma information på en extern beständig volym. Även om Azure Files är ett alternativ är skapandet av en NFS-server på en virtuell Azure-dator en annan form av beständig delad lagring.

Den här artikeln visar hur du skapar en NFS-server på en virtuell Azure Ubuntu-dator och konfigurerar AKS-klustret med åtkomst till det här delade filsystemet som en beständig volym.

Innan du börjar

Den här artikeln förutsätter att du har följande stöd för den här konfigurationen:

Om du distribuerar AKS-klustret först fyller Azure automatiskt i inställningarna för det virtuella nätverket när du distribuerar den virtuella Azure Ubuntu-datorn och associerar den virtuella Ubuntu-datorn på samma virtuella nätverk. Om du vill arbeta med peer-kopplade nätverk i stället kan du läsa dokumentationen ovan.

Distribuera NFS-servern till en virtuell dator

  1. Om du vill distribuera en NFS-server på den virtuella Azure Ubuntu-datorn kopierar du följande Bash-skript och sparar det på den lokala datorn. Ersätt värdet för variabeln AKS_SUBNET med rätt från AKS-klustret, annars öppnas NFS-servern för alla portar och anslutningar. I den här artikeln heter nfs-server-setup.shfilen .

    #!/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
    

    Skriptet initierar en omstart av NFS-servern och därefter kan du fortsätta med att ansluta till NFS-servern från AKS-klustret.

  2. När du har skapat den virtuella Linux-datorn kopierar du filen som skapades i föregående steg från den lokala datorn till den virtuella datorn med följande kommando:

    scp /path/to/nfs-server-setup.sh username@vm-ip-address:/home/{username}
    
  3. När filen har kopierats över öppnar du en SSH-anslutning (Secure Shell) till den virtuella datorn och kör följande kommando:

    sudo ./nfs-server-setup.sh
    

    Om körningen misslyckas på grund av ett nekad behörighet anger du körningsbehörighet för alla genom att köra följande kommando:

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

Anslut AKS-kluster till NFS Server

Du kan ansluta till NFS-servern från AKS-klustret genom att etablera en beständig volym och ett beständiga volymanspråk som anger hur du får åtkomst till volymen. Anslut måste du använda de två resurserna i samma eller peer-kopplade virtuella nätverk. Information om hur du konfigurerar klustret i samma virtuella nätverk finns i: Skapa AKS-kluster i ett befintligt virtuellt nätverk.

När båda resurserna finns på samma virtuella eller peerkopplade virtuella nätverk etablerar du en beständig volym och ett beständiga volymanspråk i AKS-klustret. Containrarna kan sedan montera NFS-enheten i sin lokala katalog.

  1. Skapa ett YAML-manifest med namnet pv-azurefilesnfs.yaml med en PersistentVolume. Till exempel:

    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
    

    Ersätt värdena för NFS_INTERNAL_IP, NFS_NAME och NFS_EXPORT_FILE_PATH med de faktiska inställningarna från NFS-servern.

  2. Skapa ett YAML-manifest med namnet pvc-azurefilesnfs.yaml med en PersistentVolumeClaim som använder PersistentVolume. Till exempel:

    Viktigt!

    storageClassName-värdet måste förbli en tom sträng, annars fungerar inte anspråket.

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

    Ersätt värdet för NFS_NAME med den faktiska inställningen från NFS-servern.

Felsökning

Om du inte kan ansluta till servern från ditt AKS-kluster kan problemet vara den exporterade katalogen eller dess överordnade, som inte har tillräcklig behörighet för att komma åt den virtuella NFS Server-datorn.

Kontrollera att både exportkatalogen och dess överordnade katalog har 777 behörigheter.

Du kan kontrollera behörigheter genom att köra följande kommando och katalogerna ska ha behörigheten "drwxrwxrwx" :

ls -l

Nästa steg