Créer manuellement et utiliser un serveur Linux NFS (Network File System) avec Azure Kubernetes Service (AKS)
Le partage de données entre conteneurs représente souvent un élément nécessaire des applications et services basés sur des conteneurs. Généralement, différents pods ont besoin d’accéder aux mêmes informations sur un volume persistant externe. Si Azure Files est une option, la création d’un serveur NFS sur une machine virtuelle Azure offre une autre forme de stockage partagé persistant.
Cet article vous montre comment créer un serveur NFS sur une machine virtuelle Azure Ubuntu et configurer votre cluster AKS avec un accès à ce système de fichiers partagé en tant que volume persistant.
Avant de commencer
Cet article part du principe que vous disposez des éléments suivants pour prendre en charge cette configuration :
- Cluster AKS existant. Si vous n’avez pas de cluster AKS, pour obtenir des conseils sur la conception d’une implémentation d’AKS à l’échelle de l’entreprise, consultez Planifier votre conception AKS.
- Votre cluster AKS doit se trouver sur un réseau virtuel Azure identique ou appairé au serveur NFS. Le cluster doit être créé dans un réseau virtuel existant, qui peut être le même que celui de votre machine virtuelle de serveur NFS. Les étapes de configuration avec un réseau virtuel existant sont décrites dans les articles suivants : Création d’un cluster AKS dans un réseau virtuel existant et Connexion de réseaux virtuels avec l’appairage de réseaux virtuels.
- Une machine virtuelle Azure Ubuntu Linux exécutant la version 18.04 ou ultérieure. Pour déployer une machine virtuelle Linux sur Azure, consultez Créer et gérer des machines virtuelles Linux.
Si vous déployez d’abord votre cluster AKS, Azure remplit automatiquement les paramètres du réseau virtuel lors du déploiement de votre machine virtuelle Azure Ubuntu, en associant la machine virtuelle Ubuntu au même réseau virtuel. Si vous souhaitez plutôt utiliser des réseaux appairés, consultez la documentation ci-dessus.
Déploiement du serveur NFS sur une machine virtuelle
Pour déployer un serveur NFS sur la machine virtuelle Azure Ubuntu, copiez le script Bash suivant et enregistrez-le sur votre ordinateur local. Remplacez la valeur de la variable AKS_SUBNET par la valeur appropriée de votre cluster AKS, sinon la valeur par défaut spécifiée ouvre votre serveur NFS à tous les ports et connexions. Dans cet article, le fichier est nommé
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
Le script lance un redémarrage du serveur NFS, puis vous pouvez procéder à la connexion au serveur NFS à partir de votre cluster AKS.
Après avoir créé votre machine virtuelle Linux, copiez le fichier créé à l’étape précédente de votre ordinateur local vers la machine virtuelle à l’aide de la commande suivante :
scp /path/to/nfs-server-setup.sh username@vm-ip-address:/home/{username}
Une fois le fichier copié, ouvrez une connexion SSH (Secure Shell) sur la machine virtuelle et exécutez la commande suivante :
sudo ./nfs-server-setup.sh
Si l’exécution échoue en raison d’une autorisation refusée, définissez l’autorisation d’exécution en exécutant la commande suivante :
chmod +x ~/nfs-server-setup.sh
Connexion du cluster AKS au serveur NFS
Vous pouvez vous connecter au serveur NFS depuis votre cluster AKS en provisionnant un volume persistant et une revendication de volume persistant qui spécifie la manière d’accéder au volume. Il est nécessaire de connecter les deux ressources dans le même réseau virtuel ou des réseaux virtuels appairés. Pour savoir comment configurer le cluster dans le même réseau virtuel, consultez : Création d’un cluster AKS dans un réseau virtuel existant.
Une fois que les deux ressources se trouvent sur le même réseau virtuel ou appairé, provisionnez un volume persistant et une revendication de volume persistant dans votre cluster AKS. Les conteneurs peuvent ensuite monter le lecteur NFS sur leur répertoire local.
Créez un manifeste YAML appelé pv-azurefilesnfs.yaml avec un objet PersistentVolume. Par exemple :
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
Remplacez les valeurs de NFS_INTERNAL_IP, NFS_NAME et NFS_EXPORT_FILE_PATH par les paramètres réels de votre serveur NFS.
Créez un manifeste YAML appelé pvc-azurefilesnfs.yaml avec un objet PersistentVolumeClaim qui utilise PersistentVolume. Par exemple :
Important
La valeur storageClassName doit rester vide. Sinon, la revendication ne fonctionnera pas.
apiVersion: v1 kind: PersistentVolumeClaim metadata: name: NFS_NAME spec: accessModes: - ReadWriteMany storageClassName: "" resources: requests: storage: 1Gi selector: matchLabels: type: nfs
Remplacez la valeur de NFS_NAME par le paramètre réel de votre serveur NFS.
Dépannage
Si vous ne pouvez pas vous connecter au serveur à partir de votre cluster AKS, il se peut que le répertoire exporté ou son parent ne dispose pas des autorisations suffisantes pour accéder à la machine virtuelle de serveur NFS.
Vérifiez que votre répertoire d’exportation et que son répertoire parent ont reçu les autorisations 777.
Vous pouvez vérifier les autorisations en exécutant la commande suivante. Les répertoires doivent disposer des autorisations « drwxrwxrwx » :
ls -l
Étapes suivantes
- Pour connaître les meilleures pratiques associées, consultez Meilleures pratiques relatives au stockage et aux sauvegardes dans Azure Kubernetes Service (AKS).
- Pour en savoir plus sur la configuration de votre serveur NFS ou pour vous aider à déboguer des problèmes, consultez le tutoriel suivant à partir du Tutoriel NFS de la communauté Ubuntu
Azure Kubernetes Service