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
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.
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}
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 verbinden met 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. Het verbinden 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.
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.
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.
Probleemoplossing
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
- Zie Best practices voor opslag en back-ups in AKS voor de bijbehorende aanbevolen procedures.
- Voor meer informatie over het instellen van uw NFS-server of voor hulp bij het oplossen van problemen raadpleegt u de volgende zelfstudie uit de Ubuntu-community NFS-zelfstudie
Azure Kubernetes Service