Comment résoudre les problèmes liés aux montages de mes volumes Amazon EFS dans Amazon EKS ?

Lecture de 7 minute(s)
0

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

Résolution

Lorsque vous montez votre volume Amazon EFS dans votre cluster Amazon EKS, il est possible que vous obteniez l'une des erreurs suivantes dans vos pods :

  • « Sortie : mount.nfs4 : échec du montage de fs-18xxxxxx.efs.us-east-1.amazonaws.com : /path-in-dir :/, échec, raison donnée par le serveur : Aucun fichier ou répertoire de ce type »
  • « Résultat : impossible de résoudre « 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 de 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 attendant la condition »

Avant de commencer les étapes de dépannage, vérifiez que vous disposez des prérequis suivants :

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

N’oubliez pas de créer les cibles de montage EFS dans chaque zone de disponibilité dans laquelle les nœuds EKS s'exécutent. Supposons, par exemple, que vos nœuds de travail soient répartis entre us-east-1a et us-east-1b. Dans ce cas, créez des cibles de montage dans les deux zones de disponibilité pour le système de fichiers EFS que vous souhaitez monter. Si vous ne créez pas correctement les cibles de montage, les pods qui montent le système de fichiers EFS renvoient un message d'erreur similaire au message suivant :

« Résultat : impossible de résoudre « fs-xxxxxx.efs.us-west-2.amazonaws.com ». Vérifiez que l'ID de votre système de fichiers est correct. »

Vérifiez que le groupe de sécurité associé à votre système de fichiers EFS et à vos nœuds de travail autorise le trafic NFS

Le groupe de sécurité de votre système de fichiers EFS doit disposer d'une règle entrante qui autorise le trafic NFS en provenance du CIDR pour le VPC de votre cluster. Autorisez le port 2049 pour le trafic entrant.

Le groupe de sécurité associé à vos nœuds de travail sur lesquels les pods ne parviennent pas à monter le volume EFS doit disposer d'une règle sortante. Plus précisément, cette règle sortante doit autoriser le trafic NFS (port 2049) vers le système de fichiers EFS.

Si le groupe de sécurité n'autorise pas le trafic NFS, les pods qui montent le système de fichiers renvoient les erreurs suivantes :

  • « mount.nfs : la connexion a expiré »
  • « Impossible d'attacher ou de monter des volumes : le délai d'attente a expiré en attendant la 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 du sous-répertoire dans le système de fichiers. Les répertoires doivent déjà être présents pour que l'opération de montage aboutisse. Si le sous-chemin n'est pas présent dans le système de fichiers, les pods échouent avec l'erreur suivante :

« Sortie : mount.nfs4 : échec du montage de fs-18xxxxxx.efs.us-east-1.amazonaws.com : /path-in-dir :/, échec, raison donnée par le serveur : Aucun fichier ou répertoire de ce type »

Vérifiez que le VPC du cluster utilise le serveur DNS Amazon

Lorsque vous montez l'EFS à l'aide du pilote CSI EFS, l'assistant de montage EFS nécessite que vous utilisiez le serveur DNS Amazon pour le VPC.

**Remarque :**le système de fichiers DNS du service EFS présente une limitation architecturale AWS. Seul le DNS fourni par Amazon peut résoudre le DNS du système de fichiers du service EFS.

Pour vérifier le serveur DNS, connectez-vous au nœud de travail et exécutez la commande suivante :

nslookup fs-4fxxxxxx.efs.region.amazonaws.com AMAZON\_PROVIDED\_DNS\_IP

**Remarque :**remplacez la région par votre région AWS. Remplacez AMAZON_PROVIDED_DNS_IP par votre adresse IP DNS. Par défaut, il s'agit de la plage réseau VPC (10.0.0.0) plus deux.

Si le VPC du cluster utilise un serveur DNS personnalisé, configurez ce serveur DNS pour transférer toutes les demandes *.amazonaws.com vers le serveur DNS Amazon. Si ces demandes ne sont pas transférées, les pods échouent avec un message d'erreur similaire au message suivant :

« Résultat : impossible de résoudre « fs-4 fxxxxxx.efs.us-west-2.amazonaws.com ». Vérifiez que l'ID de votre système de fichiers est 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 stratégie du système de fichiers EFS est configurée pour restreindre les autorisations de montage à des rôles IAM spécifiques. Dans ce cas, l'assistant de montage EFS nécessite que l'option de montage -o iam soit transmise pendant l'opération de montage. Incluez la propriété spec.mountOptions pour permettre au pilote CSI d'ajouter l’option de montage iam (depuis le site Web GitHub).

L'exemple suivant illustre une spécification PersistentVolume :

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

Si vous n'ajoutez pas l'option de montage iam avec une stratégie de système de fichiers restrictive, les pods échouent avec un message d'erreur similaire au message suivant :

« mount.nfs4 : accès refusé par le serveur lors du montage de 127.0.0.1:/ »

Vérifiez que le compte de service Amazon EFS CSI Driver Controller est annoté avec le rôle IAM correct et que le rôle IAM possède les autorisations requises

Pour vérifier que le compte de service utilisé par les pods efs-csi-controller possède l'annotation correcte, exécutez la commande suivante :

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\_DriverRole

Vérifiez que vous avez effectué les étapes suivantes :

  • Vous avez créé le fournisseur IAM OIDC pour le cluster.
  • 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.
  • La stratégie d’approbation du rôle IAM fait confiance au compte de service efs-csi-controller-sa. La stratégie d’approbation du rôle IAM doit ressembler à l'exemple suivant :
{
	"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érifiez que les pods de pilotes EFS CSI fonctionnent

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 DaemonSet. Pour vérifier que ces pods s'exécutent dans votre cluster, exécutez la commande suivante :

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

Vérifiez l'opération de montage EFS à partir du nœud de travail EC2 sur lequel le pod ne parvient pas à monter le système de fichiers

Connectez-vous au nœud de travail Amazon EKS sur lequel le pod est planifié. Utilisez ensuite l’assistant de montage EFS pour essayer de monter manuellement le système de fichiers EFS sur le nœud de travail. Pour tester l'opération de montage, exécutez la commande suivante :

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

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

Consultez les journaux du pod de pilotes EFS CSI

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

kubectl logs deployment/efs-csi-controller -n kube-system -c efs-plugin
kubectl logs daemonset/efs-csi-node -n kube-system -c efs-plugin
AWS OFFICIEL
AWS OFFICIELA mis à jour il y a un an