Comment résoudre les problèmes liés à la configuration de l’outil Cluster Autoscaler sur un cluster Amazon EKS ?
Je souhaite résoudre des problèmes lorsque je lance l’outil Cluster Autoscaler sur mon cluster Amazon Elastic Kubernetes Service (Amazon EKS).
Résolution
Remarque : Si des erreurs surviennent lorsque vous exécutez des commandes de l'interface de la ligne de commande AWS (AWS CLI), consultez la section Résoudre des erreurs liées à l’AWS CLI. Vérifiez également que vous utilisez bien la version la plus récente de l'AWS CLI.
Les commandes de la résolution suivante n'utilisent pas l'indicateur --region car elles utilisent la région AWS par défaut. Pour vérifier votre région par défaut, exécutez la commande configure de l'AWS CLI suivante :
aws configure
Pour modifier la région, utilisez l'indicateur --region.
Prérequis : Installez ou mettez à jour eksctl vers la dernière version. Pour obtenir des instructions, consultez la page Installation sur le site Web d'eksctl.
Prenez les mesures de dépannage suivantes en fonction du problème rencontré. Pour résoudre les problèmes liés aux sondes, consultez la section Comment résoudre les problèmes liés aux sondes Liveness et Readiness de mes clusters Amazon EKS ?
Le pod Cluster Autoscaler se trouve dans un état « CrashLoopBackOff »
Pour résoudre les problèmes liés à l'état « CrashLoopBackoff », procédez comme suit :
-
Pour vérifier l'état du pod Cluster Autoscaler, exécutez la commande suivante :
kubectl get pods -n kube-system | grep cluster-autoscalerExemple de sortie :
NAME READY STATUS RESTARTS AGE cluster-autoscaler-abcd-abcd 0/1 CrashLoopBackOff 3 (20s ago) 99s -
Pour en savoir plus sur les raisons pour lesquelles le pod est bloqué à l’état « CrashLoopBackoff », exécutez la commande suivante :
kubectl describe pod cluster-autoscaler-abcd-abcde -n kube-systemRemarque : Remplacez cluster-autoscaler-abcd-abcde par le nom du pod Cluster Autoscaler.
Dans la sortie, vérifiez la valeur de Raison. Si vous constatez un problème avec OOMKilled, utilisez la commande kubectl edit pour augmenter les valeurs des limites et des requêtes pour les ressources mémoire dans le déploiement du Cluster Autoscaler. Pour plus d'informations sur kubectl edit, consultez la page kubectl edit sur le site Web de Kubernetes. Pour afficher les valeurs de mémoire par défaut du Cluster Autoscaler, consultez la page cluster-autoscaler-autodiscover.yaml sur le site Web de GitHub.
Exemple de sortie :Name: cluster-autoscaler-abcd-abcde Namespace: kube-system State: Waiting Reason: CrashLoopBackOff Last State: Terminated Reason: OOMKilled Exit Code: 137 ... -
Pour vérifier l’existence de problèmes dans les journaux du pod Cluster Autocluster, exécutez la commande suivante :
kubectl logs -f -n kube-system -l app=cluster-autoscalerSi les journaux indiquent des problèmes d'autorisations de Gestion des identités et des accès AWS (AWS IAM), passez à la section Le pod Cluster Autoscaler rencontre des problèmes d'autorisations IAM. Exemple de sortie :
Failed to create AWS Manager: cannot autodiscover ASGs: AccessDenied: User: abc is not authorized to perform: autoscaling: DescribeTags because no identity-based policy allows the autoscaling:DescribeTags action status code: 403, request id: abcdexyzSi les journaux indiquent des problèmes de réseau tels que le délai d'attente des I/O, passez à la section Le pod Cluster Autoscaler rencontre des problèmes de réseau. Exemple de sortie :
Failed to create AWS Manager: cannot autodiscover ASGs: WebIdentityErr: failed to retrieve credentials caused by: RequestError: send request failed caused by: Post https://sts.region.amazonaws.com/: dial tcp: i/o timeout
Le pod Cluster Autoscaler rencontre des problèmes d'autorisations IAM
Vérifiez si vous avez associé un fournisseur OIDC au cluster
Assurez-vous d'avoir créé un fournisseur OpenID Connect (OIDC) pour votre cluster.
Vérifiez si vous avez annoté le compte de service Cluster Autoscaler avec le rôle IAM
Pour vérifier les annotations de votre compte de service AWS, exécutez la commande suivante :
kubectl get serviceaccount cluster-autoscaler -n kube-system -o yaml
Vérifiez les annotations pour vous assurer que la sortie indique le rôle de votre compte de service Cluster Autoscaler. Exemple de sortie :
apiVersion: v1 kind: ServiceAccount metadata: annotations: eks.amazonaws.com/role-arn: arn:aws:iam::012345678912:role/cluster_auto_scaler_iam_role name: cluster-autoscaler namespace: kube-system
Pour résoudre les problèmes liés au rôle de votre compte de service, consultez la section Comment résoudre un problème lié à un fournisseur OIDC et IRSA dans Amazon EKS ?
Vérifiez la politique IAM
Assurez-vous que vous avez associé la politique IAM appropriée au rôle de compte du service Cluster Autoscaler. Pour un exemple de politique et une liste des autorisations requises, consultez la page Politique IAM sur le site Web de GitHub.
Vérifiez si vous avez correctement configuré la relation d’approbation
Assurez-vous d'avoir correctement configuré la relation d’approbation. Exemple de relation d’approbation :
{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Principal": { "Federated": "arn:aws:iam::example_awsaccountid:oidc-provider/oidc.eks.example_region.amazonaws.com/id/example_oidcid" }, "Action": "sts:AssumeRoleWithWebIdentity", "Condition": { "StringEquals": { "oidc.eks.example_region.amazonaws.com/id/example_oidcid:aud": "sts.amazonaws.com", "oidc.eks.example_region.amazonaws.com/id/example_oidcid:sub": "system:serviceaccount:kube-system:cluster-autoscaler" } } } ] }
Remarque : Remplacez example_awsaccountid par votre ID de compte AWS, example_region par votre région et example_oidcid par votre ID OIDC.
Chaque fois que vous modifiez le rôle ou la politique du compte de service, exécutez la commande suivante pour redémarrer le pod Cluster Autoscaler :
kubectl rollout restart deployment cluster-autoscaler -n kube-system
Le pod Cluster Autoscaler rencontre des problèmes de réseau
Assurez-vous d'avoir configuré le cluster Amazon EKS avec la configuration réseau requise. Vérifiez que le sous-réseau du composant master dispose d’une table de routage capable d’acheminer le trafic vers les points de terminaison suivants :
- ec2.amazonaws.com pour Amazon Elastic Compute Cloud (Amazon EC2)
- autoscaling.region.amazonaws.com pour Amazon EC2 Auto Scaling
- sts.region.amazonaws.com pour Service de jetons de sécurité AWS (AWS STS)
Remarque : Remplacez region par votre région.
Si le cluster Amazon EKS est privé, vous devez créer un point de terminaison Amazon Virtual Private Cloud (Amazon VPC) pour les points de terminaison précédents.
Remarque : Le groupe de sécurité de chaque point de terminaison de VPC doit autoriser le groupe de sécurité du composant master Amazon EKS. Les groupes de sécurité doivent également autoriser le trafic entrant vers le bloc d'adresse CIDR de VPC Amazon EKS sur le port 443.
Vérifiez que la liste de contrôle d'accès au réseau (ACL réseau) du sous-réseau et les groupes de sécurité du composant master ne bloquent pas le trafic qui communique vers ces points de terminaison.
Le Cluster Autoscaler ne réduit ni n’augmente horizontalement les nœuds
Consultez les journaux du pod Cluster Autoscaler pour connaître les règles de planification
Pour vérifier l'état de vos pods, exécutez la commande suivante :
kubectl logs -f -n kube-system -l app=cluster-autoscaler
Pour vérifier si le pod à l’état En attente contient des règles de planification, telles que la règle d'affinité, exécutez la commande suivante :
kubectl describe pod example_podname -n example_namespace
Remarque : Remplacez example_podname par le nom du pod, et example_namespace par votre espace de noms.
Dans la sortie, consultez la section événements pour savoir pourquoi le pod est à l’état En attente. Exemple de sortie :
$ kubectl describe pod cluster-autoscaler-abcde-abcd -n kube-system Name: cluster-autoscaler-5b6b675456-npf8p ... Status: Pending ... Events: Type Reason Age From Message ---- ------ ---- ---- ------- Warning FailedScheduling 12s (x4 over 2m) default-scheduler 0/4 nodes are available: 1 node(s) didn't match node selector, 3 node(s) didn't match pod affinity rules.
Remarque : Le Cluster Autoscaler respecte nodeSelector et requiredDuringSchedulingIgnoredDuringExecution dans nodeAffinity. Assurez-vous d'étiqueter vos groupes de nœuds avec ces valeurs. Pour étiqueter vos groupes de nœuds, exécutez la commande suivante :
kubectl get nodes --show-labels
Si le Cluster Autoscaler ne peut pas planifier un pod avec nodeSelector ou requiredDuringSchedulingIgnoredDuringExecution, il utilise uniquement des groupes de nœuds qui répondent aux exigences d'extension. Pour planifier un pod sur un nœud, vous devez modifier les règles de planification définies sur les pods ou les nœuds. Pour plus d'informations, consultez la page Affinité et anti-affinité sur le site Web de Kubernetes.
Vérifiez l’identification du groupe Amazon EC2 Auto Scaling pour le Cluster Autoscaler
Pour que le Cluster Autoscaler détecte un groupe Auto Scaling, vous devez identifier le groupe Amazon EC2 Auto Scaling du groupe de nœuds avec les identifications suivantes.
Pour l’identification 1, configurez les valeurs suivantes :
- Pour clé, saisissez k8s.io/cluster-autoscaler/example-cluster.
- Pour valeur, saisissez détenu.
Remarque : Remplacez example-cluster par le nom de votre cluster.
Pour l’identification 2, configurez les valeurs suivantes :
- Pour clé, saisissez k8s.io/cluster-autoscaler/enabled.
- Pour valeur, saisissez true.
Vérifiez la configuration du manifeste de déploiement
Pour ouvrir le manifeste de déploiement, exécutez la commande suivante :
kubectl -n kube-system edit deployment.apps/cluster-autoscaler
Dans la sortie, pour node-group-auto-discover, assurez-vous que le manifeste indique le nom de cluster ou de groupe de nœuds correct. Exemple de sortie :
containers:- command ./cluster-autoscaler --v=4 --stderrthreshold=info --cloud-provider=aws --skip-nodes-with-local-storage=false --expander=least-waste --node-group-auto-discovery=asg:tag=k8s.io/cluster-autoscaler/enabled,k8s.io/cluster-autoscaler/example-cluster --balance-similar-node-groups --skip-nodes-with-system-pods=false
Assurez-vous de ne pas dépasser le nombre maximum de nœuds
Pour vérifier le nombre actuel de nœuds, exécutez la commande describe-nodegroup suivante :
aws eks describe-nodegroup --cluster-name example-cluster --nodegroup-name example-nodegroup
Remarque : Remplacez example-cluster par le nom de votre cluster et example-nodegroup par le nom de votre groupe de nœuds.
Si vous avez atteint le nombre minimum ou maximum de nœuds, exécutez la commande update-nodegroup-config suivante pour modifier les valeurs :
aws eks update-nodegroup-config \ --cluster-name cluster-name \ --nodegroup-name nodegroup-name \ --scaling-config minSize=minvalue,maxSize=maxvalue,desiredSize=desiredvalue \
Remarque : Remplacez cluster-name par le nom de votre cluster et my-nodegroup-name par le nom de votre groupe de nœuds. Remplacez également minvalue par le nombre minimum de nœuds, maxvalue par le nombre maximum de nœuds et desiredvalue par la valeur souhaitée de nœuds.
Assurez-vous que vos nœuds peuvent rejoindre le cluster
Vérifiez si les nouvelles instances lancées par le groupe Amazon EC2 Auto Scaling peuvent rejoindre le cluster Amazon EKS. Si elles n'y parviennent pas, consultez la section Comment faire en sorte que mes composants master rejoignent mon cluster Amazon EKS ?
Assurez-vous d'utiliser le type d'instance de nœud correct
Pour vérifier si le Cluster Autoscaler peut répondre à la demande de ressource du pod avec les types d'instances de nœud actuels, exécutez la commande suivante :
kubectl -n example_namespace get pod example_podname -o yaml | grep resources -A6
Remarque : Remplacez example-cluster par le nom de votre cluster et example-podname par le nom de votre pod.
Exemple de sortie :
containers: - image: registry.k8s.io/autoscaling/cluster-autoscaler:v1.32.1 name: cluster-autoscaler resources: limits: cpu: 100m memory: 600Mi requests: cpu: 100m memory: 600Mi
Dans la sortie, vérifiez les valeurs des limites et des requêtes. Assurez-vous que les valeurs de processeur et de mémoire sont suffisamment élevées pour que le nœud puisse conserver le pod. Pour consulter les exigences de votre pod, exécutez la commande suivante :
kubectl describe pod podname -n namespace,
Remarque : Remplacez podname par le nom de votre pod et namespace par votre espace de noms.
Si les exigences du pod sont supérieures aux capacités du nœud, utilisez la commande kubectl edit pour augmenter les valeurs des limites et des requêtes pour les ressources mémoire dans le déploiement du Cluster Autoscaler. Vous pouvez également créer un nouveau groupe de nœuds avec un type d'instance différent qui répond aux besoins en ressources du pod. Pour plus d'informations sur kubectl edit, consultez la page kubectl edit sur le site Web de Kubernetes.
Vérifiez la configuration des rejets pour le nœud du groupe de nœuds
Pour vérifier si vous avez configuré des contaminations pour le nœud et si le pod peut les tolérer, exécutez la commande suivante :
kubectl describe node example_nodename | grep taint -A2
Remarque : Remplacez example_nodename par le nom de votre nœud.
Si vous avez configuré des rejets, supprimez les rejets définis sur le nœud. Pour connaître les étapes à suivre, consultez la section Votre pod est à l’état En attente dans Comment résoudre les problèmes liés à l'état du pod dans Amazon EKS ? Si le pod ne tolère pas les rejets, définissez la tolérance sur le pod. Pour plus d'informations, consultez la page Rejets et tolérances sur le site Web de Kubernetes.
Assurez-vous que la réduction de la taille n'est pas désactivée sur le nœud
Pour vérifier l'état de scale-down-disable sur votre nœud, exécutez la commande suivante :
kubectl describe node example_nodename | grep scale-down-disable
Remarque : Remplacez example_nodename par le nom de votre nœud.
Exemple de sortie :
cluster-autoscaler.kubernetes.io/scale-down-disabled: true
Si scale-down-disable est défini sur true, exécutez la commande suivante pour supprimer l'annotation du nœud et lui permettre de réduire sa taille :
kubectl annotate node example_nodename cluster-autoscaler.kubernetes.io/scale-down-disabled-
Remarque : Remplacez example_nodename par le nom de votre nœud.
Pour en savoir plus sur les étapes de dépannage du Cluster Autoscaler, consultez la page Questions fréquemment posées sur le site Web de GitHub.
- Sujets
- Containers
- Langue
- Français

Contenus pertinents
- demandé il y a 3 ans
- demandé il y a 3 ans
- demandé il y a 2 ans
AWS OFFICIELA mis à jour il y a un an