Come posso risolvere i problemi relativi ai pod Amazon EKS su AWS Fargate bloccati nello stato "In attesa"?

6 minuti di lettura
0

I miei pod Amazon Elastic Kubernetes Service (Amazon EKS) in esecuzione su istanze di AWS Fargate sono bloccati nello stato "In attesa".

Breve descrizione

Ci sono diversi motivi per cui i pod Amazon EKS che utilizzano AWS Fargate possono restare bloccati nello stato In attesa:

  • È presente un errore di capacità perché una particolare combinazione di vCPU e memoria non è disponibile.
  • Hai creato i pod CoreDNS con un'annotazione predefinita che li mappa sul tipo di calcolo Amazon Elastic Compute Cloud (Amazon EC2). Per pianificarli su un nodo Fargate, rimuovi il tipo di calcolo Amazon EC2.
  • Quando hai creato il pod e lo hai assegnato al fargate-scheduler, il pod non corrispondeva a nessun profilo Fargate. Se al momento della creazione il pod non ha una corrispondenza, non viene automaticamente ripianificato nei nodi Fargate. Ciò resta invariato anche se in seguito viene creato un profilo che ha una corrispondenza. In questo caso, il pod viene assegnato al defaullt-scheduler.
  • Un pod assegnato al fargate-scheduler, ma che resta nello stato In attesa potrebbe richiedere un'ulteriore fase di risoluzione dei problemi.

Risoluzione

Prerequisiti

  • Configura lo spazio dei nomi e (facoltativamente) specifica le etichette Kubernetes in modo che corrispondano alle etichette dei selettori pod. Il flusso di lavoro di Fargate associa i pod a un profilo Fargate solo se entrambe le condizioni corrispondono alle specifiche del pod.
  • Se specifichi più selettori pod all'interno di un singolo profilo Fargate, il fargate-scheduler pianifica il pod se corrisponde a uno dei selettori.
  • Se le specifiche di un pod corrispondono a più profili Fargate, il pod viene pianificato in base a un profilo Fargate casuale. Per evitare ciò, usa l'annotazione eks.amazonaws.com/fargate-profile:fp_name all'interno delle specifiche del pod. Sostituisci fp_name con il nome del profilo Fargate.

Importante: i passaggi seguenti si applicano solo ai pod che sono stati avviati con AWS Fargate. Per informazioni sui pod avviati con istanze di Amazon EC2, consulta la sezione How can I troubleshoot the pod status in Amazon EKS?

Conoscere lo stato del pod

1. Per controllare lo stato del pod, esegui il comando seguente:

kubectl get pods -n <namespace>

2. Per ottenere ulteriori informazioni di errore sul pod, esegui questo comando describe:

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

Per valutare i passaggi di risoluzione da completare, fai riferimento all'output del comando describe.

Risolvere un errore di capacità

Se i pod presentano un problema di capacità, l'output describe è simile al seguente:

"La capacità di Fargate non è al momento disponibile. Riprova più tardi o in un'altra zona di disponibilità".

Ciò indica che, in base alla combinazione selezionata di vCPU e memoria, Fargate non può fornire capacità di calcolo.

Per risolvere questo errore, completa i passaggi seguenti:

  • Prova a ricreare il pod dopo 20 minuti. Poiché l'errore è relativo alla capacità, l'intervallo di tempo esatto può variare.
  • Modifica la richiesta (CPU e memoria) nelle specifiche del pod. Per informazioni sulle specifiche dei pod, consulta la sezione How Kubernetes applies resource requests and limits sul sito web di Kubernetes. Il flusso di lavoro di Fargate fornirà quindi una nuova combinazione di vCPU e memoria.
    Nota: la fatturazione viene effettuata in base a una delle tue combinazioni. Per ulteriori informazioni su come viene finalizzata la combinazione in base alle specifiche di un pod, consulta la sezione Pod CPU e memoria. Esegui un comando kubectl describe node dal terminale o dall'ambiente di sviluppo integrato (IDE) per ottenere un valore della combinazione di vCPU e memoria più elevato. Fargate non ha sempre capacità disponibile in base alle tue richieste e fornisce risorse da un pool di capacità al meglio delle sue possibilità. In ogni caso ti verrà addebitato il conto solo per l'utilizzo del pod e la combinazione equivalente di vCPU e memoria.

Risoluzione del problema dei pod CoreDNS nello stato "In attesa"

Se i pod CoreDNS sono nello statoIn attesa, verrà visualizzato un output simile al messaggio seguente:

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

Ciò potrebbe essere dovuto al fatto che l'annotazione predefinita dell'implementazione di CoreDNS è la seguente: eks.amazonaws.com/compute-type : ec2.

Per risolvere il problema e riassegnare i pod al fargate-scheduler, consulta la sezione Aggiornamento di CoreDNS.

Risolvi i problemi relativi ai pod assegnati al fargate-scheduler

Sono diversi i motivi per cui i pod assegnati al fargate-scheduler potrebbero restare bloccati nello stato In attesa. Se i pod restano nello stato In attesa, l'output describe è simile al messaggio seguente:

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

Per risolvere questo errore, completa le seguenti attività:

  • Elimina e ricrea i pod.
  • Verifica che le seguenti specifiche non siano impostate nelle specifiche YAML del pod. Queste specifiche fanno sì che il fargate-scheduler ignori il pod:
    node selector
    <>node name
    schedulerName
  • Verifica che le sottoreti selezionate nel tuo profilo Fargate dispongano di abbastanza indirizzi IP liberi per creare nuovi pod. Ogni nodo Fargate utilizza un indirizzo IP della sottorete.
  • Verifica che il gateway NAT sia impostato su una sottorete pubblica e che abbia un indirizzo IP elastico collegato.
  • Verifica che i set di opzioni DHCP associati al cloud privato virtuale (VPC) abbiano un AmazonProvidedDNS o un nome host del server DNS valido per domain-name-servers.
  • Verifica che i nomi host DNS e la risoluzione DNS siano attivati per il tuo VPC.
  • Se i tuoi pod Fargate utilizzano sottoreti private con solo endpoint VPC configurati per le comunicazioni di servizio, autorizza i seguenti endpoint con nomi DNS:
    ECR - API
    ECR - DKR
    Endpoint gateway S3
  • Verifica che il gruppo di sicurezza collegato all'endpoint VPC consenta la comunicazione bidirezionale tra Fargate e il server API. Il gruppo di sicurezza degli endpoint VPC deve consentire l'ingresso alla porta 443 dal VPC del cluster CIDR. È inoltre necessario attivare l'accesso privato agli endpoint per il cluster.

Risoluzione dei problemi dei pod assegnati al default-scheduler

Per determinare il pianificatore a cui sono assegnati i pod, esegui il comando seguente:

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

Nell'output, verifica che schedulerName sia fargate-scheduler. Se è elencato come default-scheduler, il fargate-scheduler ha ignorato questo pod. Per risolvere questo problema, controlla la configurazione del tuo pod per quanto riguarda le annotazioni del tipo di calcolo. Per ulteriori informazioni, consulta la sezione Considerazioni AWS Fargate.

AWS UFFICIALE
AWS UFFICIALEAggiornata 7 mesi fa