Come posso risolvere i problemi di pianificazione dei pod con Cluster Autoscaler in Amazon EKS?
Ho problemi di pianificazione dei pod quando utilizzo Cluster Autoscaler in Amazon Elastic Kubernetes Service (Amazon EKS). Il mio pod è bloccato nello stato In sospeso oppure ricevo una notifica relativa a un evento di pianificazione non riuscito.
Risoluzione
Se hai attivato Cluster Autoscaler e il pod è bloccato nello stato In sospeso, Cluster Autoscaler potrebbe non aggiungere nuovi nodi ai pod non pianificati.
Controlla lo stato del pod
Per controllare lo stato del pod, esegui questo comando kubectl get pods:
kubectl get pods -n kube-system -l app=cluster-autoscaler
Se il pod è nello stato In sospeso o se il container del pod è nello stato In attesa, risolvi i problemi relativi allo stato del pod.
Se il pod è nello stato CrashLoopBackOff, esegui questo comando kubectl describe pod:
kubectl describe pod cluster-autoscaler-####-#### -n kube-system
Nota: sostituisci cluster-autoscaler-####-#### con il tuo pod Cluster Autoscaler.
Se l'output del comando mostra "OOMKilled" con il codice di uscita 137, aumenta i limiti e le richieste delle risorse di memoria per la distribuzione di cluster-autoscaler. Per ulteriori informazioni, consulta Specify a memory request and a memory limit (Come specificare una richiesta di memoria e un limite di memoria) sul sito web Kubernetes.
Per controllare i log del pod, esegui questo comando kubectl logs:
kubectl logs -f -n kube-system -l app=cluster-autoscaler
I log possono fornire informazioni sulla risoluzione dei problemi. Ad esempio, il log del pod potrebbe mostrare il seguente messaggio di errore "AccessDenied":
"Failed to create AWS Manager: AccessDenied: User: arn:aws:sts::444455556666:assumed-role/your-role is not authorized to perform: your-action because no identity-based policy allows the your-action action"
Per risolvere i problemi relativi alle autorizzazioni AWS Identity and Access Management (AWS IAM), collega la policy IAM corretta al pod. Per ulteriori informazioni, consulta IAM policy (Policy IAM) sul sito web GitHub.
Oppure il log potrebbe mostrare il seguente messaggio di errore:
Creazione di AWS Manager non riuscita: impossibile individuare automaticamente gli ASG: WebIdentityErr: failed to retrieve credentials caused by: RequestError: send request failed caused by: Post https://sts.region.amazonaws.com/: : dial tcp: i/o timeout"
Se riscontri problemi di connettività di rete, verifica che la sottorete del nodo worker abbia una route verso i seguenti ](https://docs.aws.amazon.com/general/latest/gr/rande.html)endpoint dei servizi AWS[:
- ec2.region.amazonaws.com
- autoscaling.region.amazonaws.com
- sts.region.amazonaws.com
Inoltre, verifica che la lista di controllo degli accessi alla rete (ACL) o il gruppo di sicurezza del nodo worker della sottorete non blocchi il traffico verso gli endpoint precedenti.
Se il cluster è privato, intraprendi le seguenti azioni:
- Aggiungi gli endpoint precedenti al cloud privato virtuale (VPC).
- Configura il gruppo di sicurezza per gli endpoint in modo da consentire il traffico sulla porta 443 da un gruppo di sicurezza del nodo worker.
Identifica il motivo per cui Cluster Autoscaler non è in grado di scalare il gruppo Auto Scaling
Per verificare se il pod contiene una regola di pianificazione, come affinità o anti-affinità, esegui questo comando kubectl describe pod:
kubectl describe pod pending-pod-name -n pending-pod-namespace
Nota: sostituisci pending-pod-name con il nome del tuo pod in sospeso e pending-pod-namespace con il nome del namespace del tuo pod in sospeso. Per ulteriori informazioni, consulta Affinity and anti-affinity (Affinità e anti-affinità) sul sito web Kubernetes.
Nell'output del comando, controlla la sezione Events per determinare perché il pod è bloccato nello stato In sospeso. Ad esempio, potresti identificare un problema con le etichette dei gruppi di nodi.
Per assicurarti che i gruppi di nodi funzionino, intraprendi le seguenti azioni:
- Configura i gruppi di nodi con etichette che corrispondano alle impostazioni nodeSelector e requiredDuringSchedulingIgnoredDuringExecution nella specifica nodeAffinity del pod. Per ulteriori informazioni, consulta Node labels (Etichette dei nodi) sul sito web Kubernetes. Le etichette corrette consentono a Cluster Autoscaler di identificare i nodi idonei per le operazioni di dimensionamento.
- Assicurati di aver definito correttamente le regole di pianificazione dei pod. Per ulteriori informazioni, consulta Assigning Pods to nodes (Assegnazione di pod ai nodi) sul sito web Kubernetes. Quando i pod utilizzano nodeSelector or requiredDuringSchedulingIgnoredDuringExecution, Cluster Autoscaler considera solo il dimensionamento dei gruppi di nodi che soddisfano i requisiti di pianificazione per queste impostazioni.
Per verificare la configurazione di Cluster Autoscaler, esegui questo comando kubectl get deployment:
kubectl get deployment cluster-autoscaler -n kube-system -o yaml
Se Cluster Autoscaler ha l'argomento node-group-auto-discovery corretto, l'output del comando mostra la seguente configurazione:
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/your-cluster-name
Controlla se il gruppo Auto Scaling ha i tag corretti.
Cluster Autoscaler richiede i seguenti tag per rilevare il gruppo Auto Scaling associato al gruppo di nodi:
Tag 1: key: k8s.io/cluster-autoscaler/your-cluster-name value: owned Tag 2: key: k8s.io/cluster-autoscaler/enabled value: true
Per verificare se il gruppo di nodi ha raggiunto il numero massimo di nodi, esegui questo comando describe-nodegroup:
aws eks describe-nodegroup --cluster-name your-cluster-name --nodegroup-name your-nodegroup-name
Nota: sostituisci your-cluster-name con il nome del tuo cluster e your-nodegroup-name con il nome del tuo gruppo di nodi.
Se il gruppo di nodi ha raggiunto il numero massimo di nodi, aggiornalo per aumentarne il numero massimo. Quindi i nuovi nodi possono pianificare i nuovi pod.
Verifica se l'istanza Amazon Elastic Compute Cloud (Amazon EC2) avviata dal gruppo Auto Scaling può unirsi al cluster. Se l'istanza non può unirsi al cluster, risolvi i problemi dei nodi worker.
Per controllare la richiesta di risorse del pod, esegui questo comando kubectl get pod:
kubectl get pod pending-pod-name -n pending-pod-namespace -o yaml | grep resources -A6
Nota: sostituisci pending-pod-name con il nome del tuo pod in sospeso e pending-pod-namespace con il nome del namespace del tuo pod in sospeso.
Verifica se il tipo di istanza del nodo corrente soddisfa la richiesta di risorse del pod e modifica la richiesta se necessario. Oppure crea un nuovo gruppo di nodi con un tipo di istanza modificato. Per ulteriori informazioni sulle richieste di risorse dei pod, consulta Resource management for Pods and containers (Gestione delle risorse per pod e container) sul sito web Kubernetes.
Per visualizzare le taint di un nodo, esegui questo comando kubectl describe node:
kubectl describe node your-node-name
Nota: sostituisci your-node-name con il nome del tuo nodo.
Assicurati che i pod tollerino le taint che hai aggiunto al nodo. Se il nodo non richiede le taint, rimuovile. Per ulteriori informazioni, consulta Taints and Tolerations (Taint e tolleranze) sul sito web Kubernetes.
Informazioni correlate
Frequently asked questions (Domande frequenti) sul sito web GitHub
- Argomenti
- Containers
- Lingua
- Italiano

Contenuto pertinente
AWS UFFICIALEAggiornata un mese fa