Comment puis-je résoudre les problèmes liés aux montages de mon volume Amazon EFS dans Amazon EKS ?

Date de la dernière mise à jour : 22/12/2021

Les erreurs suivantes s'affichent dans mes pods lorsque je monte des volumes Amazon Elastic File System (Amazon EFS) dans mon cluster Amazon Elastic Kubernetes Service (Amazon EKS) :

  • « Output: mount.nfs4: mounting fs-18xxxxxx.efs.us-east-1.amazonaws.com:/path-in-dir:/failed, raison donnée par le serveur : Aucun fichier ou répertoire de ce type »
  • « Output: Failed to resolve fs-xxxxxx.efs.us-west-2.amazonaws.com » – Vérifiez que l'ID de votre système de fichiers est correct »
  • « mount.nfs4 : accès refusé par le serveur lors du montage 127.0.0.1:/ »
  • « mount.nfs : la connexion a expiré »

Comment puis-je résoudre ce problème ?

Résolution

Avant de commencer les étapes de dépannage suivantes, vérifiez que vous disposez des éléments suivants :

Vérifier que les cibles de montage sont correctement configurées

Assurez-vous de créer les cibles de montage EFS dans chaque zone de disponibilité où les nœuds EKS sont exécutés. Par exemple, si vos composants master sont répartis entre us-east-1a et us-east-1b, veillez à créer des cibles de montage dans les deux zones de disponibilité pour le système de fichiers EFS que vous essayez de monter. Si vous ne créez pas correctement les cibles de montage, les pods qui montent le système de fichiers EFS renvoient une erreur similaire à la suivante :

Output: Failed to resolve "fs-xxxxxx.efs.us-west-2.amazonaws.com" - check that your file system ID is correct.

Vérifier que le groupe de sécurité associé à votre système de fichiers EFS autorise le trafic NFS

Le groupe de sécurité associé à votre système de fichiers EFS doit avoir une règle de trafic entrant qui autorise le trafic NFS (port 2049) à partir du CIDR pour le VPC de votre cluster. Si le groupe de sécurité des cibles de montage EFS n'autorise pas le trafic NFS, les pods qui montent le système de fichiers EFS renvoient une erreur similaire à la suivante :

"mount.nfs: Connection timed out"

Vérifiez que le sous-répertoire est créé dans votre système de fichiers EFS si vous montez le pod dans un sous-répertoire.

Lorsque vous ajoutez des sous-chemins dans des volumes persistants, le pilote EFS CSI ne crée pas le chemin de sous-répertoire dans le système de fichiers EFS dans le cadre de l'opération de montage. Les répertoires doivent déjà être présents pour que l'opération de montage réussisse. Si le sous-chemin n'est pas présent dans le système de fichiers, les pods échouent avec l'erreur suivante :

Output: mount.nfs4: mounting fs-18xxxxxx.efs.us-east-1.amazonaws.com:/path-in-dir:/ failed, reason given by server: No such file or directory

Confirmer que le VPC du cluster utilise le serveur Amazon DNS

Lorsque vous utilisez le pilote EFS CSI pour monter l'EFS, l'assistant au montage EFS du pilote CSI EFS exige que le VPC utilise le serveur DNS Amazon pour le VPC. Remarque : le DNS du système de fichiers du service EFS présente une limite architecturale AWS. Seul le DNS fourni par Amazon peut résoudre le DNS du système de fichiers du service EFS.

Vérifiez le serveur DNS en vous connectant au composant master et en exécutant la commande suivante :

nslookup fs-4fxxxxxx.efs.region.amazonaws.com <amazon provided DNS IP>
<amazon provided DNS IP = VPC network(10.0.0.0) range plus two>

Remarque : remplacez région par votre région AWS.

Si le VPC de cluster utilise un serveur DNS personnalisé, vous devez configurer le serveur DNS personnalisé pour transférer toutes les demandes *.amazonaws.com au serveur DNS Amazon. Si ces demandes ne sont pas transférées, les pods échouent avec une erreur similaire à la suivante :

Output: Failed to resolve "fs-4 fxxxxxx.efs.us-west-2.amazonaws.com" - check that your file system ID is correct.

Vérifiez que les options de montage « iam » figurent dans la définition du volume persistant lorsque vous utilisez une politique de système de fichiers restrictive

Dans certains cas, la politique du système de fichiers EFS est configurée pour restreindre les autorisations de montage à des rôles IAM spécifiques. Si c'est le cas, l'assistant de montage EFS du pilote EFS CSI requiert que l'option de montage -o iam soit validée pendant l'opération de montage. Incluez la propriété Spec.mountOptions afin que le pilote CSI puisse ajouter l'option de montage iam (depuis le site web de GitHub).

Exemple de spécification PersistentVolume :

apiVersion: v1
kind: PersistentVolume
metadata:
  name: efs-pv1
spec:
  mountOptions:
    - iam
. . . . . .

Si vous n'ajoutez pas l'option de montage iam lorsque vous utilisez une politique de système de fichiers restrictive, les pods échouent avec une erreur similaire à la suivante :

mount.nfs4: access denied by server while mounting 127.0.0.1:/

Vérifiez que le compte de service du contrôleur de pilote Amazon EFS CSI est annoté avec le bon rôle IAM et que le rôle IAM possède les autorisations requises.

Exécutez la commande suivante pour vérifier si le compte de service utilisé par les pods efs-csi-controller ont la bonne annotation :

kubectl describe sa efs-csi-controller-sa -n kube-system

Vérifiez que l'annotation suivante est présente :

eks\.amazonaws\.com/role-arn"="arn:aws:iam::111122223333:role/AmazonEKS_EFS_CSI_Driver_Policy

Vérifiez que le fournisseur OIDC IAM pour le cluster était créé et que le rôle IAM a les autorisations (dans le site web de GitHub) requises pour effectuer des appels d'API EFS. Vérifiez également que la politique d'approbation du rôle IAM fait confiance au compte de service efs-csi-controller-sa.

Vérifier que les pods de pilotes EFS CSI sont exécutés

Le pilote EFS CSI est composé de pods de contrôleur exécutés en tant que déploiement et de pods de nœuds exécutés en tant que jeu de démons. Exécutez les commandes suivantes pour vérifier que ces pods sont en cours d'exécution dans votre cluster :

kubectl get all -l app.kubernetes.io/name=aws-efs-csi-driver -n kube-system

Vérifier l'opération de montage EFS à partir du composant master EC2 sur lequel le pod ne parvient pas à monter le système de fichiers

Connectez-vous au composant master Amazon EKS où le pod est programmé. Ensuite, utilisez l'assistant de montage EFS pour essayer de monter manuellement le système de fichiers EFS sur le composant master. Vous pouvez exécuter la commande suivante pour tester :

sudo mount -t -efs -o tls file-system-dns-name efs-mount-point/

Si le composant master peut monter le système de fichiers, consultez les journaux du efs-plugin du contrôleur CSI et des pods du nœud CSI.

Vérifier les journaux du pod du pilote EFS CSI

Consultez les journaux du pod du pilote CSI pour déterminer la cause des échecs de montage. Si le montage du volume échoue, consultez les journaux du plugin efs. Exécutez les commandes suivantes pour récupérer les journaux du conteneur efs-plugin :

kubectl logs deployment/efs-csi-controller -n kube-system -c efs-plugin
kubectl logs daemonset/efs-csi-node -n kube-system -c efs-plugin

Cet article vous a-t-il été utile ?


Besoin d'aide pour une question technique ou de facturation ?