Ręczne tworzenie i używanie serwera systemu plików NFS z systemem Linux za pomocą usługi Azure Kubernetes Service (AKS)

Udostępnianie danych między kontenerami jest często niezbędnym składnikiem usług i aplikacji opartych na kontenerach. Zwykle masz różne zasobniki, które wymagają dostępu do tych samych informacji na zewnętrznym woluminie trwałym. Chociaż usługa Azure Files jest opcją, utworzenie serwera NFS na maszynie wirtualnej platformy Azure jest inną formą trwałego magazynu udostępnionego.

W tym artykule pokazano, jak utworzyć serwer NFS na maszynie wirtualnej z systemem Ubuntu platformy Azure i skonfigurować klaster usługi AKS z dostępem do tego udostępnionego systemu plików jako wolumin trwały.

Zanim rozpoczniesz

W tym artykule przyjęto założenie, że masz następujące elementy do obsługi tej konfiguracji:

  • Istniejący klaster usługi AKS. Jeśli nie masz klastra usługi AKS, aby uzyskać wskazówki dotyczące projektowania implementacji usługi AKS w skali przedsiębiorstwa, zobacz Planowanie projektu usługi AKS.
  • Klaster usługi AKS musi znajdować się w tej samej lub równorzędnej sieci wirtualnej platformy Azure co serwer NFS. Klaster musi zostać utworzony w istniejącej sieci wirtualnej, która może być tą samą siecią wirtualną co maszyna wirtualna serwera NFS. Kroki konfigurowania przy użyciu istniejącej sieci wirtualnej opisano w następujących artykułach: tworzenie klastra usługi AKS w istniejącej sieci wirtualnej i łączenie sieci wirtualnych za pomocą komunikacji równorzędnej sieci wirtualnych.
  • Maszyna wirtualna z systemem Linux platformy Azure z systemem Ubuntu w wersji 18.04 lub nowszej. Aby wdrożyć maszynę wirtualną z systemem Linux na platformie Azure, zobacz Tworzenie maszyn wirtualnych z systemem Linux i zarządzanie nimi.

Jeśli najpierw wdrożysz klaster usługi AKS, platforma Azure automatycznie wypełni ustawienia sieci wirtualnej podczas wdrażania maszyny wirtualnej z systemem Ubuntu platformy Azure, kojarząc maszynę wirtualną z systemem Ubuntu w tej samej sieci wirtualnej. Jeśli zamiast tego chcesz pracować z sieciami równorzędnymi, zapoznaj się z dokumentacją powyżej.

Wdrażanie serwera NFS na maszynie wirtualnej

  1. Aby wdrożyć serwer NFS na maszynie wirtualnej z systemem Ubuntu platformy Azure, skopiuj następujący skrypt powłoki Bash i zapisz go na komputerze lokalnym. Zastąp wartość zmiennej AKS_SUBNET poprawną wartością z klastra usługi AKS. W przeciwnym razie określona wartość domyślna powoduje otwarcie serwera NFS do wszystkich portów i połączeń. W tym artykule plik nosi nazwę 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
    

    Skrypt inicjuje ponowne uruchomienie serwera NFS, a następnie można kontynuować nawiązywanie połączenia z serwerem NFS z klastra usługi AKS.

  2. Po utworzeniu maszyny wirtualnej z systemem Linux skopiuj plik utworzony w poprzednim kroku z komputera lokalnego do maszyny wirtualnej przy użyciu następującego polecenia:

    scp /path/to/nfs-server-setup.sh username@vm-ip-address:/home/{username}
    
  3. Po skopiowaniu pliku otwórz połączenie secure shell (SSH) z maszyną wirtualną i wykonaj następujące polecenie:

    sudo ./nfs-server-setup.sh
    

    Jeśli wykonanie zakończy się niepowodzeniem z powodu błędu odmowy uprawnień, ustaw uprawnienie wykonywania dla wszystkich, uruchamiając następujące polecenie:

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

Połączenie klastra usługi AKS na serwer NFS

Możesz nawiązać połączenie z serwerem NFS z klastra usługi AKS, aprowizując trwały wolumin i trwałe oświadczenie woluminu określające sposób uzyskiwania dostępu do woluminu. Połączenie dwóch zasobów w tych samych lub równorzędnych sieciach wirtualnych jest konieczne. Aby dowiedzieć się, jak skonfigurować klaster w tej samej sieci wirtualnej, zobacz: Tworzenie klastra AKS w istniejącej sieci wirtualnej.

Gdy oba zasoby znajdują się w tej samej wirtualnej lub równorzędnej sieci wirtualnej, aprowizacja woluminu trwałego i trwałego oświadczenia woluminu w klastrze usługi AKS. Kontenery mogą następnie zainstalować dysk NFS do katalogu lokalnego.

  1. Utwórz manifest YAML o nazwie pv-azurefilesnfs.yaml za pomocą elementu PersistentVolume. Na przykład:

    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
    

    Zastąp wartości NFS_INTERNAL_IP, NFS_NAME i NFS_EXPORT_FILE_PATH rzeczywistymi ustawieniami z serwera NFS.

  2. Utwórz manifest YAML o nazwie pvc-azurefilesnfs.yaml za pomocą elementu PersistentVolumeClaim , który używa elementu PersistentVolume. Na przykład:

    Ważne

    wartość storageClassName musi pozostać pustym ciągiem lub oświadczenie nie będzie działać.

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

    Zastąp wartość NFS_NAME rzeczywistym ustawieniem z serwera NFS.

Rozwiązywanie problemów

Jeśli nie możesz nawiązać połączenia z serwerem z klastra usługi AKS, problem może być wyeksportowanym katalogiem lub jego elementem nadrzędnym, nie ma wystarczających uprawnień dostępu do maszyny wirtualnej serwera NFS.

Sprawdź, czy zarówno katalog eksportu, jak i jego katalog nadrzędny mają przyznane uprawnienia 777.

Uprawnienia można sprawdzić, uruchamiając następujące polecenie, a katalogi powinny mieć uprawnienia "drwxrwxwxwx" :

ls -l

Następne kroki