Comment résoudre le blocage de pods Amazon EKS à l'état « en attente » dans AWS Fargate ?

Lecture de 7 minute(s)
0

Mes pods Amazon Elastic Kubernetes Service (Amazon EKS) qui s'exécutent sur des instances AWS Fargate sont bloqués à l'état « en attente ».

Brève description

Voici les raisons pour lesquelles des pods Amazon EKS qui utilisent AWS Fargate peuvent rester bloqués à l'état En attente :

  • Une erreur de capacité est survenue à cause de l’indisponibilité d’une combinaison particulière de processeur virtuel et de mémoire.
  • Vous avez créé vos pods CoreDNS avec une annotation par défaut qui les mappe au type de calcul Amazon Elastic Compute Cloud (Amazon EC2). Pour pouvoir les planifier sur un nœud Fargate, vous devez supprimer le type de calcul Amazon EC2.
  • Lorsque vous avez créé le pod et que vous l'avez attribué au planificateur Fargate, le pod ne correspondait à aucun profil Fargate. Si un pod ne correspond pas à un profil au moment de sa création, il ne sera pas automatiquement reprogrammé vers les nœuds Fargate. La création d’un profil correspondant plus tard n’y change rien. Dans ce cas, le pod est attribué au planificateur par défaut.
  • Si le pod est attribué au planificateur Fargate mais reste à l’état En attente, une intervention peut s’avérer nécessaire pour résoudre le problème.

Résolution

Prérequis

  • Configurez l'espace de noms et (éventuellement) spécifiez les étiquettes Kubernetes correspondant aux étiquettes de vos sélecteurs de pods. Le flux de travail Fargate associe les pods à un profil Fargate uniquement si ces deux conditions correspondent aux spécifications du pod.
  • Si vous spécifiez plusieurs sélecteurs de pods au sein d'un même profil Fargate, le planificateur Fargate planifiera le pod 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 ce problème, vous pouvez utiliser l'annotation eks.amazonaws.com/fargate-profile:fp_name dans les spécifications du pod. Veillez à remplacer fp_name par le nom de votre profil Fargate.

Important : Les instructions suivantes sont uniquement valables pour les pods lancés avec AWS Fargate. Pour en savoir plus sur les pods lancés sur des instances Amazon EC2, consultez la section Comment résoudre les problèmes liés à l'état des pods dans Amazon EKS ?

Identification de l'état du pod

1. Exécutez la commande suivante pour connaitre l'état de votre pod :

kubectl get pods -n <namespace>

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

kubectl describe pod YOUR\_POD\_NAME -n <namespace>

Consultez les résultats de la commande describe pour décider des mesures à prendre.

Résolution d’une erreur de capacité

Si vos pods rencontrent un problème de capacité, la commande describe renverra un message d’erreur de ce type :

« Capacité actuellement indisponible pour Fargate. Veuillez réessayer ultérieurement ou dans une autre zone de disponibilité. »

Ce résultat signifie que Fargate ne peut pas fournir de capacité de calcul pour la combinaison de processeur virtuel et de mémoire sélectionnée.

Suivez ces étapes pour corriger cette erreur :

  • Attendez 20 minutes, puis tentez à nouveau de créer le module. Comme il s’agit d’un problème de capacité, la durée d’attente est toutefois variable.
  • Modifiez la demande (processeur et mémoire) dans les spécifications de votre pod. Pour en savoir plus sur les spécifications des pods, consultez la section Application des demandes de ressources et des limites par Kubernetes sur le site Web de Kubernetes. Le flux de travail Fargate pourra alors fournir une nouvelle combinaison de processeur virtuel et de mémoire.
    Remarque : Votre facturation est basée sur l'une de vos combinaisons. Pour en savoir plus sur la façon dont votre combinaison est déterminée en fonction des spécifications de votre pod, consultez la section Processeur et mémoire du pod. Exécutez une commande kubectl describe node depuis votre terminal ou votre environnement de développement intégré (IDE) afin d’obtenir une valeur plus élevée pour la combinaison de processeur virtuel et de mémoire. Fargate ne dispose pas toujours de la capacité nécessaire pour vos demandes. Il peut uniquement fournir les ressources disponibles provenant d'une réserve de capacités. Les frais facturés seront toutefois limités à votre utilisation du pod et à une combinaison équivalente de processeur virtuel et de mémoire.

Résolution du blocage des pods CoreDNS à l’état « en attente »

Si les pods CoreDNS sont bloqués à l’état en attente, vous obtiendrez un message de ce type :

kubectl get pods -n kube-system
NAME                                     READY   STATUS     RESTARTS      AGE
coredns-6548845887-qk9vf                 0/1     Pending    0             157m

Ce problème peut être dû au fait que le déploiement de CoreDNS comporte l'annotation par défaut suivante : eks.amazonaws.com/compute-type : ec2.

Pour résoudre ce problème et réattribuer les pods au planificateur Fargate, consultez la section Update CoreDNS.

Résolution de problèmes liés aux pods attribués au planificateur Fargate

Il existe plusieurs raisons pour lesquelles des pods attribués au planificateur Fargate peuvent rester bloqués à l'état en attente. Si vos pods restent bloqués à l’état en attente, la commande describe renverra un message d’erreur de ce type :

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

Pour résoudre cette erreur, suivez ces instructions :

  • Supprimez et recréez les pods.
  • Vérifiez que les éléments ci-dessous ne sont pas définis dans les spécifications YAML du pod. Dans le cas contraire, le planificateur Fargate risque d’ignorer le pod :
    sélecteur de nœuds
    <>nom du nœud
    Nom du planificateur
  • 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 utilise une adresse IP du sous-réseau.
  • Vérifiez que la passerelle NAT est définie sur un sous-réseau public et qu'une adresse IP Elastic lui est attachée.
  • Vérifiez que les ensembles d'options DHCP associés à votre cloud privé virtuel (VPC) possèdent une valeur AmazonProvidedDNS ou un nom d'hôte de serveur DNS valide dans domain-name-servers.
  • Vérifiez que les noms d'hôte DNS et la résolution DNS sont activés pour votre VPC.
  • Si vos pods Fargate utilisent des sous-réseaux privés avec uniquement les points de terminaison d’un VPC configurés pour la communication des services, vous devez autoriser ces points de terminaison à l’aide de noms DNS :
    ECR - API
    ECR - DKR
    Point de terminaison de passerelle S3
  • Vérifiez que le groupe de sécurité attaché au point de terminaison d’un VPC autorise les communications entre Fargate et le serveur d'API. Le groupe de sécurité du point de terminaison d’un VPC doit autoriser l'entrée du port 443 à partir du CIDR du VPC du cluster. Vous devez également activer l'accès privé aux points de terminaison de votre cluster.

Résolution de problèmes liés aux pods attribués au planificateur par défaut

Exécutez la commande suivante pour identifier le planificateur auquel vos pods sont attribués :

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

Examinez le résultat pour vérifier que la valeur schedulerName indique bien planificateur Fargate. Si elle indique planificateur par défaut, le planificateur fargate a ignoré ce pod. Pour résoudre ce problème, vérifiez l'existence d'annotations de type calcul dans la configuration de votre pod. Pour en savoir plus, consultez les considérations relatives à AWS Fargate.

AWS OFFICIEL
AWS OFFICIELA mis à jour il y a 7 mois