Comment résoudre les problèmes liés au plug-in Kubelet ou CNI pour Amazon EKS ?

Lecture de 7 minute(s)
0

Je souhaite résoudre les problèmes liés à mon plug-in Kubelet ou CNI pour Amazon Elastic Kubernetes Service (Amazon EKS).

Brève description

Pour attribuer et exécuter une adresse IP au pod de votre composant master avec votre plug-in CNI (sur le site Web de Kubernetes), vous devez disposer des configurations suivantes :

  • Autorisations AWS Identity and Access Management (IAM), y compris une politique CNI associée au rôle IAM de votre composant master. Ou encore, les autorisations IAM que vous fournissez via les rôles IAM du compte de service.
  • Un point de terminaison du serveur API Amazon EKS accessible depuis le composant master.
  • Un accès réseau aux points de terminaison d'API pour Amazon Elastic Compute Cloud (Amazon EC2), Amazon Elastic Container Registry (Amazon ECR) et Amazon Simple Storage Service (Amazon S3).
  • Un nombre suffisant d'adresses IP disponibles dans votre sous-réseau.
  • Un kube-proxy qui s'exécute correctement pour que le pod aws-node passe à l'état Prêt.
  • La version kube-proxy et la version VPC CNI qui prennent en charge la version Amazon EKS.

Résolution

Vérifier que le pod aws-node est en cours d'exécution sur chaque composant master

Pour vérifier que le pod aws-node est En cours d'exécution sur un composant master, exécutez la commande suivante :

kubectl get pods -n kube-system -l k8s-app=aws-node -o wide

Si la sortie de la commande indique que le nombre de RESTARTS est égal à 0, cela signifie que le pod aws-node est En cours d'exécution. Suivez les étapes décrites dans la section Vérifier que votre sous-réseau dispose d'un nombre suffisant d'adresses IP libres.

Si la sortie de la commande indique que le nombre de RESTARTS est supérieur à 0, vérifiez que le composant master peut atteindre le point de terminaison du serveur API de votre cluster Amazon EKS. Exécutez la commande suivante :

curl -vk https://eks-api-server-endpoint-url

Vérifier la connectivité à votre cluster Amazon EKS

1.    Vérifiez que les paramètres du groupe de sécurité de votre composant master pour Amazon EKS sont correctement configurés. Pour plus d'informations, reportez-vous aux Exigences et considérations relatives aux groupes de sécurité Amazon EKS.

2.    Vérifiez que les règles de liste de contrôle d'accès réseau (ACL réseau) du composant master de votre sous-réseau autorisent la communication avec le point de terminaison du serveur API Amazon EKS.

Important : autorisez le trafic entrant et sortant sur le port 443.

3.    Vérifiez que le pod kube-proxy est En cours d'exécution sur chaque composant master :

kubectl get pods -n kube-system -l k8s-app=kube-proxy -o wide

4.    Vérifiez que votre composant master peut accéder aux points de terminaison d'API pour Amazon EC2, Amazon ECR et Amazon S3.

Remarque : configurez ces services via des points de terminaison publics ou AWS PrivateLink.

Vérifier que votre sous-réseau dispose d'un nombre suffisant d'adresses IP libres

Pour répertorier les adresses IP disponibles dans chaque sous-réseau de l'identifiant Amazon Virtual Private Cloud (Amazon VPC), exécutez la commande suivante :

aws ec2 describe-subnets --filters "Name=vpc-id,Values= VPCID" | jq '.Subnets[] | .SubnetId + "=" + "\(.AvailableIpAddressCount)"'

Remarque : la métrique AvailableIpAddressCount doit être supérieur à 0 pour le sous-réseau sur lequel les pods sont lancés.

Vérifier si les limites de votre groupe de sécurité ont été atteintes

Si vous atteignez les limites de votre groupe de sécurité par interface réseau Elastic, la configuration réseau de votre pod peut échouer.

Pour plus d'informations, reportez-vous à la page Quotas Amazon VPC.

Vérifier que vous utilisez la dernière version stable du plug-in CNI

Pour vérifier que vous disposez de la dernière version du plug-in CNI, reportez-vous à Mise à jour du plug-in CNI Amazon VPC pour le module complémentaire autogéré Kubernetes.

Pour en savoir plus sur la résolution des problèmes, consultez la page des problèmes liés à AWS GitHub et les ](https://github.com/aws/amazon-vpc-cni-k8s/releases)notes de publication[ relatives au plug-in CNI.

Consulter les journaux du plug-in CNI VPC sur le composant master

Si vous créez un pod et qu'aucune adresse IP n'est attribuée au conteneur, le message d'erreur suivant s'affiche :

failed to assign an IP address to container

Pour consulter les journaux, accédez au répertoire /var/log/aws-routed-eni/, puis recherchez les noms de fichiers plugin.log et ipamd.log.

Vérifier que votre kubelet extrait les images du conteneur Docker

Si votre kubelet n'extrait pas les images des conteneurs Docker pour les conteneurs kube-proxy et amazon-k8s-cni, le message d'erreur suivant s'affiche :

network plugin is not ready: cni config uninitialized

Assurez-vous que vous pouvez accéder au point de terminaison du serveur API Amazon EKS depuis le composant master.

Vérifier que la valeur WARM_PREFIX_TARGET est correctement définie

Remarque : cela s'applique uniquement si la délégation de préfixe est activée. Si la délégation de préfixe est activée, vérifiez si le message d'erreur suivant est enregistré :

Error: Setting WARM_PREFIX_TARGET = 0 is not supported while WARM_IP_TARGET/MINIMUM_IP_TARGET is not set.
Please configure either one of the WARM_{PREFIX/IP}_TARGET or MINIMUM_IP_TARGET env variable

WARM_PREFIX_TARGET doit être défini sur une valeur supérieure ou égale à 1. S'il est défini sur 0, le message d'erreur suivant s'affiche :

Consultez les variables de configuration CNI sur le site Web GitHub pour plus d'informations.

Vérifier l'espace réservé dans le sous-réseau

Remarque : cela s'applique uniquement si la délégation de préfixe est activée. Si la délégation de préfixe est activée, vérifiez si le message d'erreur suivant est enregistré :

InsufficientCidrBlocks

Assurez-vous que vous disposez de suffisamment de blocs CIDR /28 IP (16 adresses IP) disponibles dans le sous-réseau. Les 16 adresses IP doivent être contiguës. Si vous ne disposez pas d'une plage /28 d'adresses IP continues, l'erreur InsufficientCidrBlocks s'affiche.

Pour résoudre l'erreur, créez un nouveau sous-réseau et lancez les pods à partir de là. Utilisez également une réservation de sous-réseau CIDR Amazon EC2 pour réserver de l'espace au sein d'un sous-réseau auquel un préfixe est attribué. Pour plus d'informations, reportez-vous à la rubrique Utiliser les réservations de sous-réseau CIDR.

Les mises à jour effectuées avec l'infrastructure en tant que code (IaC) sont annulées avec des conflits

Si vous utilisez des modules complémentaires gérés par Amazon EKS, les erreurs de mise à jour qui utilisent les services suivants s'annulent lorsque la méthode de conflit n'est pas définie :

Les méthodes correctes sont NONE, OVERWRITE ou PRESERVE.

  • Si aucune méthode n'est définie, la valeur par défaut est NONE. Lorsque le système détecte des conflits, la mise à jour de la pile CloudFormation est annulée et aucune modification n'est apportée.
  • Pour définir la configuration par défaut des modules complémentaires, utilisez la méthode de remplacement. Vous devez utiliser OVERWRITE lorsque vous passez d'un module complémentaire autogéré à un module complémentaire géré par Amazon EKS.
  • Utilisez la méthode PRESERVE lorsque vous utilisez des configurations personnalisées, telles que WARM_IP_TARGET ou un réseau personnalisé.

Les nœuds sont dans l'état NotReady

Lorsque vous avez des nœuds AWS qui ne sont pas En cours d'exécution, il est courant que les nœuds soient dans l'état NotReady. Pour plus d'informations, reportez-vous à la rubrique Comment puis-je faire passer le statut de mes nœuds du statut NotReady ou Inconnu au statut Prêt ?

Difficultés liées à la configuration réseau personnalisée

Lorsque la mise en réseau personnalisée est active pour le CNI VPC, les définitions de ressources personnalisées (CRD) ENIConfig doivent définir le sous-réseau et les groupes de sécurité appropriés.

Pour vérifier si la mise en réseau personnalisée est active, décrivez le pod aws-node dans l'espace de noms kube-system. Vérifiez ensuite si la variable d'environnement suivante est définie sur true :

AWS_VPC_K8S_CNI_CUSTOM_NETWORK_CFG

Si la mise en réseau personnalisée est active, vérifiez que les CRD sont correctement configurés.

kubectl get ENIConfig -A -o yaml

Décrivez chaque entrée qui correspond au nom de la zone de disponibilité. Les ID de sous-réseau correspondent au placement du VPC et du composant master. Les groupes de sécurité sont accessibles ou partagés avec le groupe de sécurité du cluster. Pour plus d'informations sur les meilleures pratiques, consultez les Guides des meilleures pratiques Amazon EKS sur le site web GitHub.


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