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
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.
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}
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
Łączenie klastra usługi AKS z serwerem 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.
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.
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
- Aby uzyskać informacje o skojarzonych najlepszych rozwiązaniach, zobacz Najlepsze rozwiązania dotyczące magazynu i tworzenia kopii zapasowych w usłudze AKS.
- Aby dowiedzieć się więcej na temat konfigurowania serwera NFS lub rozwiązywania problemów z debugowaniem, zobacz poniższy samouczek z samouczka systemu plików NFS społeczności systemu Ubuntu
Azure Kubernetes Service