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 monter des volumes Amazon Elastic Block Store (Amazon EBS) dans mon cluster Amazon Elastic Kubernetes Service (Amazon EKS). Cependant, je reçois le message d'erreur « Le délai d'attente a expiré en attendant que les volumes soient attachés ou montés pour le pod ».

Résolution

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

  • Les autorisations AWS Identity and Access Management (IAM) requises pour le rôle IAM de votre compte de service ebs-csi-controller-sa.
    Remarque : Pour résoudre les problèmes liés à votre compte de service, consultez la section Vérifier le rôle IAM du compte de service Amazon EBS CSI Driver Controller et les autorisations associées à ce rôle.
  • Un PersistentVolumeClaim (PVC) valide (provenant du site Web GitHub) dans le même espace de noms que le pod.
  • Une définition de classe de stockage EBS valide qui utilise le fournisseur intégré à l'arborescence kubernetes.io/aws-ebs (depuis le site Web de Kubernetes). Ou bien, une définition de classe de stockage qui utilise le fournisseur de pilotes EBS Container Storage Interface (CSI) ebs.csi.aws.com (depuis le site Web GitHub).

Vérifiez que le pilote, le contrôleur et les pods de nœuds Amazon EBS CSI sont en cours d'exécution

Le pilote CSI EBS se compose de pods de contrôleur qui s'exécutent en tant que déploiement et de pods de nœuds qui s'exécutent en tant qu’ensemble de démons. Pour vérifier si votre cluster exécute ces pods, exécutez la commande suivante :

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

**Remarque :**Les nœuds de travail Windows et AWS Fargate ne prennent pas en charge le pilote CSI EBS.

Assurez-vous que la version du pilote EBS CSI installée est compatible avec la version Kubernetes de votre cluster (depuis le site Web GitHub).

Vérifiez si le PVC a rencontré des problèmes lors de la liaison au volume persistant EBS

Pour vérifier si le PVC rencontre des problèmes, exécutez la commande suivante pour afficher les événements. Dans l'exemple de commande suivant, remplacez PVC\ _NAME et NAMESPACE par les valeurs adaptées à votre environnement :

kubectl describe pvc PVC_NAME -n NAMESPACE

Si vous utilisez le provisionnement dynamique des volumes, examinez les événements renvoyés pour déterminer si le provisionnement des volumes a réussi ou échoué. Vous pouvez également voir le nom du volume persistant correspondant auquel le PVC est lié, comme illustré dans l'exemple suivant :

Name:          ebs-claim
Namespace:     default
StorageClass:  ebs-sc
Status:        Bound
Volume:        pvc-5cbd76de-6f15-41e4-9948-2bba2574e205
Annotations:   pv.kubernetes.io/bind-completed: yes
               pv.kubernetes.io/bound-by-controller: yes
               volume.beta.kubernetes.io/storage-provisioner: ebs.csi.aws.com
               volume.kubernetes.io/selected-node: ip-10-0-2-57.ec2.internal
. . . . .
. . . . .
Events:
  Type    Reason                 Age                    From                                                                                      Message
  ----    ------                 ----                   ----                                                                                      -------
. . . . .
  Normal  Provisioning           5m22s                  ebs.csi.aws.com_ebs-csi-controller-57d4cbb9cc-dr9cd_8f0373e8-4e58-4dd0-b83c-da6f9ad5d5ce  External provisioner is provisioning volume for claim "default/ebs-claim"
  Normal  ProvisioningSucceeded  5m18s                  ebs.csi.aws.com_ebs-csi-controller-57d4cbb9cc-dr9cd_8f0373e8-4e58-4dd0-b83c-da6f9ad5d5ce  Successfully provisioned volume pvc-5cbd76de-6f15-41e4-9948-2bba2574e205

Si le provisionnement a échoué, recherchez le message d'erreur dans les événements.

Consultez les journaux des pods de contrôleur Amazon EBS CSI

Pour connaître la cause des défaillances du montage, consultez les journaux du boîtier du contrôleur. Si le volume échoue lors de la création, consultez les journaux ebs-plugin et csi-provisioner. Pour récupérer les journaux du conteneur efs-plugin, exécutez les commandes suivantes :

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

Pour récupérer les journaux du conteneur csi-provisioner, exécutez la commande suivante :

kubectl logs deployment/ebs-csi-controller -n kube-system -c csi-provisioner

Si les volumes EBS ne parviennent pas à se connecter au pod, consultez les journaux csi-attacher . Pour récupérer les journaux du conteneur csi-attacher, exécutez la commande suivante :

kubectl logs deployment/ebs-csi-controller -n kube-system -c csi-attacher

Vérifiez le rôle IAM du compte Amazon EBS CSI Driver Controller Service et les autorisations du rôle

**Remarque :**Pour améliorer l'efficacité du débogage du pilote EBS CSI, définissez les options du journal de débogage (depuis le site Web GitHub).

Assurez-vous que le compte de service du contrôleur du pilote EBS CSI est annoté avec le rôle IAM correct. Assurez-vous également que le rôle IAM dispose des autorisations requises.

Les problèmes suivants entraînent des erreurs non autorisées dans vos événements PVC ou dans vos journaux ebs-csi-controller :

  1. Pour déterminer si le compte de service des pods ebs-csi-controller comporte l'annotation correcte, exécutez la commande suivante :
kubectl describe sa ebs-csi-controller-sa -n kube-system

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

eks.amazonaws.com/role-arn: arn:aws:iam::111122223333:role/AmazonEKS_EBS_CSI_DriverRole
  1. Vérifiez que vous avez créé le fournisseur IAM OpenID Connect (OIDC) pour le cluster. Vérifiez également que le rôle IAM dispose des autorisations requises pour effectuer des appels d'API EBS. Assurez-vous que la politique de confiance du rôle IAM fait confiance au compte de service ebs-csi-controller-sa.

  2. Vérifiez qu'AWS CloudTrail effectue les appels CreateVolume, ** AttachVolume** et DetachVolume. Pour ce faire, consultez les journaux CloudTrail. Consultez également les journaux pour déterminer quel principal passe les appels. Cela vous permet de déterminer si le rôle IAM du contrôleur ou du composant master utilise le rôle IAM du compte de service.

Vérifiez l'affinité des nœuds du volume persistant

Chaque volume persistant possède une affinité de nœud qui limite l'attachement de volumes persistants à des nœuds au sein d'une seule zone de disponibilité. Cela est dû au fait que vous ne pouvez associer des volumes EBS qu'à des pods ou à des nœuds qui s'exécutent dans la même zone de disponibilité que celle dans laquelle vous les avez créés. Si les pods planifiés pour les nœuds d'une Zone de Disponibilité utilisent le volume persistant EBS d'une autre Zone de Disponibilité, vous recevez cette erreur :

« Échec de la planification : 1 nœud(s) présentait un conflit d'affinité avec les nœuds de volume »

Pour éviter cela, utilisez StatefulSets (à partir du site Web de Kubernetes) au lieu du déploiement. Cela crée un volume EBS unique pour chaque pod des StatefulSets dans la même zone de disponibilité que le pod.

Pour vérifier l'affinité des nœuds du volume persistant, exécutez la commande suivante. Remplacez PERSISTENT_VOLUME_NAME par le nom de votre volume :

kubectl describe pv PERSISTENT_VOLUME_NAME

**Remarque :**Vous ne pouvez pas monter un volume EBS sur deux pods différents qui s'exécutent sur deux composants masters différents. Vous pouvez associer le volume EBS à des pods qui s'exécutent sur un nœud, mais vous ne pouvez pas l'attacher à un autre nœud en même temps. Si vous essayez d'associer votre volume EBS à deux pods situés sur des composants masters différents, le pod échoue et vous recevez le message d'erreur suivant :

« Warning FailedAttachVolume 2m38s attachdetach-controller Erreur multi-attachement pour le volume « pvc-1cccsdfdc8-fsdf6-43d6-a1a9-ea837hf7h57fa » Le volume est déjà exclusivement attaché à un nœud et ne peut pas être attaché à un autre »

Assurez-vous que vos pods de contrôleur EBS sont connectés à l'API Amazon Elastic Compute Cloud (Amazon EC2)

Si des erreurs concernant les délais de connexion apparaissent dans les journaux ebs-csi-controller, cela signifie que le contrôleur EBS CSI n'est peut-être pas connecté à l'API Amazon EC2. Si les modules de commande rencontrent des problèmes de connectivité lorsque vous créez votre PVC, le message d'erreur suivant s'affiche :

« Avertissement : ProvisioningFailed persistentVolumeClaim/storage-volume-1 n'a pas pu approvisionner le volume avec StorageClass « ebs-sc » : erreur rpc : code = DeadlineExceed desc = délai contextuel dépassé »

Pour résoudre cette erreur, vérifiez que les sous-réseaux des modules du contrôleur EBS sont connectés à l'API EC2. Si vous exécutez un cluster privé avec un proxy HTTP/HTTPS, vérifiez que vos pods de contrôleur EBS CSI peuvent utiliser le proxy HTTP/HTTPS. L'installation de la barre du pilote EBS CSI prend en charge la configuration d'un proxy HTTP/HTTPS (depuis le site Web de Kubernetes).

Ce message peut également être lié à un problème avec OIDC. Pour résoudre les problèmes liés à l'OIDC, consultez Comment résoudre les problèmes liés à un fournisseur OIDC et à un IRSA dans Amazon EKS ?

AWS OFFICIEL
AWS OFFICIELA mis à jour il y a un an