Comment puis-je résoudre les problèmes de blocage en attente des pods Amazon EKS sur AWS Fargate ?

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

Mes pods Amazon Elastic Kubernetes Service (Amazon EKS) qui s'exécutent sur des instances AWS Fargate sont bloqués dans l'état d'attente. Comment puis-je débloquer ces pods ?

Brève description

L'exécution des pods sur Amazon Elastic Kubernetes Service (Amazon EKS) à l'aide d'AWS Fargate est entravée par certains scénarios classiques tels que décrit ci-dessous.

  • Une erreur de capacité s'est produite, car une combinaison vCPU/mémoire particulière n'est pas disponible.
  • Les pods CoreDNS ont été créés avec une annotation par défaut qui doit être supprimée pour les planifier sur un nœud Fargate.
  • Le pod ne correspondait à aucun profil Fargate lors de sa création et n'est pas affecté au planificateur Fargate. Si un pod ne correspond pas à sa création, il n'est pas automatiquement replanifié sur les nœuds Fargate, même si un profil correspondant est créé ultérieurement. Dans ce cas, le pod est affecté au planificateur par défaut.
  • Si le pod est affecté au planificateur Fargate-Scheduler mais reste à l'état En attente, une résolution supplémentaire du problème peut être nécessaire.

Avant de résoudre le problème, notez les règles de Fargate suivantes pour les pods :

  • Vous devez configurer les labels d'espace de noms et de correspondance pour vos sélecteurs de pods. Le flux Fargate associe les pods à un profil Fargate uniquement si les deux conditions correspondent à la spécification du pod.
  • Si vous spécifiez plusieurs sélecteurs de pods dans un seul profil Fargate, le pod est planifié par le planificateur « fargate-schedule » s'il correspond à l'un des sélecteurs.
  • Si une spécification de pod correspond à plusieurs profils Fargate, le pod est planifié selon un profil Fargate aléatoire. Pour éviter cette opération, vous pouvez utiliser l'annotation eks.amazonaws.com/fargate-profile:<fp_name> dans la spécification du pod.

Résolution

Important : les étapes suivantes s'appliquent uniquement aux pods lancés avec AWS Fargate. Pour en savoir plus sur les pods lancés sur des instances Amazon EC2, consultez la section Comment puis-je résoudre l'état des pods dans Amazon EKS ?

Découvrir l'état de votre pod

1.    Exécuter la commande suivante pour vérifier l'état de votre pod

kubectl get pods -n <namespace>

2.    Pour obtenir plus d'informations sur les erreurs de votre pod, exécutez la commande describe suivante :

kubectl describe pod YOUR_POD_NAME -n <namespace>

Consultez les résolutions suivantes en fonction de la sortie de la commande describe.

Résolution des erreurs de capacité

Si vos pods rencontrent un problème de capacité, la sortie de la commande describe est similaire à la suivante :

Fargate capacity is unavailable at this time. Please try again later or in a different availability zone

Pour résoudre cette erreur :

  • Réessayez le pod après 15 à 20 minutes. L'erreur étant basée sur la capacité, la durée exacte peut varier.
  • Modifiez la demande (CPU/mémoire) dans les spécifications de votre pod. Une nouvelle combinaison de vCPU/mémoire est ensuite allouée par le flux Fargate.
    Remarque : vous êtes facturé en fonction de l'une de vos combinaisons. Consultez la section CPU et mémoire du pod pour en savoir plus sur la manière dont la combinaison est finalisée en fonction des spécifications de votre pod. L'exécution d'une commande « kubectl describe node » à partir de votre terminal/IDE peut vous donner une valeur de combinaison vCPU/mémoire beaucoup plus élevée. Fargate n'a pas toujours la capacité disponible en fonction de vos demandes et alloue des ressources à partir d'un groupe de capacité sur la base du meilleur effort. Toutefois, vous n'êtes facturé que pour l'utilisation des pods et la combinaison vCPU/mémoire équivalente.

Résolution du problème de pods CoreDNS en attente

Si vos pods sont des pods CoreDNS, le nom du pod dans la sortie de commande « describe » est similaire à ce qui suit :

NAME                                     READY   STATUS     RESTARTS      AGE
coredns-6548845887-qk9vf                 0/1     Pending    0             157m

Pour résoudre ce problème et réaffecter les pods au planificateur Fargate : corrigez le déploiement CoreDNS pour supprimer l'annotation par défaut suivante : eks.amazonaws.com/compute-type : ec2.

Résolution de problèmes de pods affectés au planificateur par défaut

Pour déterminer le planificateur auquel vos pods sont affectés, exécutez la commande suivante :

kubectl get pods -o yaml -n <namespace> <pod-name> | grep schedulerName.

Dans la sortie, confirmez que SchedulerName est défini sur le planificateur par défaut, mettez à jour la spécification du pod, puis recréez les pods.

Si le nom du planificateur SchedulerName est fargate-scheduler et que vous obtenez toujours des erreurs, alors confirmez que votre pod suit toutes les règles et considérations de Fargate. Reportez-vous à la section suivante pour d'autres étapes de résolution des problèmes de pods.

Résolution des problèmes de pods affectés au planificateur fargate

Si vos pods sont affectés à fargate-scheduler mais restent à l'état En attente, la sortie de commandedescribe est similaire à la suivante :

Events:
Type       Reason              Age                     From     
----       ------              ----                    ----     
Warning    FailedScheduling    2m25s (x301 over 5h3m)  fargate-scheduler

Pour résoudre cette erreur :

  • Supprimez puis recréez les pods.
  • Confirmez que les paramètres suivants ne sont pas définis dans la spécification YAML du pod :
    sélecteur de nœuds
    <>nom du nœud
    schedulerName
    Ces spécifications obligent le planificateur fargate-scheduler à ignorer le pod.
  • Confirmez que les sous-réseaux sélectionnés dans votre profil Fargate disposent de suffisamment d'adresses IP libres pour créer de nouveaux pods. Chaque nœud Fargate consomme une adresse IP du sous-réseau.
  • Confirmez que la passerelle NAT est définie sur un sous-réseau public et qu'une adresse IP Elastic y est attachée.
  • Confirmez que les ensembles d'options DHCP associés à votre VPC ont un AmazonProvidedDNS ou un nom d'hôte de serveur DNS valide pour les domain-name-servers.
  • Confirmez que les noms d'hôtes DNS et la résolution DNS sont activés pour votre VPC.
  • Si vous utilisez des sous-réseaux privés pour vos pods Fargate avec uniquement des point de terminaison d'un VPC configurés pour la communication des services, confirmez que vous disposez des points de terminaison suivants avec des noms DNS autorisés :
    ECR – API
    ECR – DKR
    Point de terminaison de Passerelle S3
  • Confirmez que le groupe de sécurité attaché au point de terminaison d'un VPC autorise la communication de Fargate vers et depuis le serveur API. Le groupe de sécurité du point de terminaison d'un VPC doit autoriser l'entrée du port 443 depuis le CIDR du cluster VPC. L'accès au point de terminaison privé doit également être activé pour votre cluster.

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


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