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

Dernière mise à jour : 27/12/2022

Je souhaite résoudre les erreurs lors du montage de volumes Amazon Elastic File System (Amazon EFS) dans mon cluster Amazon Elastic Kubernetes Service (Amazon EKS).

Solution

Vous pouvez obtenir l'une des erreurs suivantes dans vos pods lorsque vous montez votre volume Amazon EFS dans votre cluster 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é »
  • « Impossible d'attacher ou de monter des volumes : le délai d'attente a expiré en raison de la situation »

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, créez 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 et les composants master autorisent 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.

Le groupe de sécurité associé à vos composants master sur lesquels les pods ne parviennent pas à monter le volume EFS doit disposer d'une règle sortante qui autorise le trafic NFS (port 2049) vers le système de fichiers EFS.

Si le groupe de sécurité des cibles de montage EFS ou les composants master n'autorisent pas le trafic NFS, les pods qui montent le système de fichiers EFS renvoient les erreurs suivantes :

"mount.nfs: Connection timed out"
"Unable to attach or mount volumes: timed out waiting for the condition"

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 les points suivants :

  • Le fournisseur IAM OIDC pour le cluster a été créé.
  • Le rôle IAM associé au compte de service efs-csi-controller-sa possède les autorisations requises (depuis le site Web GitHub) 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. La politique de confiance du rôle IAM doit ressembler à ce qui suit :
{
 "Version": "2012-10-17",
 "Statement": [{
  "Effect": "Allow",
  "Principal": {
   "Federated": "arn:aws:iam::111122223333:oidc-provider/oidc.eks.region-code.amazonaws.com/id/EXAMPLED539D4633E53DE1B71EXAMPLE"
  },
  "Action": "sts:AssumeRoleWithWebIdentity",
  "Condition": {
   "StringEquals": {
    "oidc.eks.region-code.amazonaws.com/id/EXAMPLED539D4633E53DE1B71EXAMPLE:sub": "system:serviceaccount:kube-system: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 ?