Partager via


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 :

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

  1. 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.

  2. 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}
    
  3. 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.

  1. 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.

  2. 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