Come posso risolvere i problemi relativi ai pod Amazon EKS su AWS Fargate che sono bloccati nello stato In sospeso?

Ultimo aggiornamento: 20-12-2021

I miei pod Amazon Elastic Kubernetes Service (Amazon EKS) in esecuzione su istanze AWS Fargate sono bloccati nello stato In sospeso. Come posso far funzionare questi pod?

Breve descrizione

Di seguito sono riportati alcuni scenari comuni che impediscono l'esecuzione dei pod su Amazon Elastic Kubernetes Service (Amazon EKS) utilizzando AWS Fargate.

  • Si è verificato un errore di capacità perché una determinata combinazione di vCPU/memoria non è disponibile.
  • I pod CoreDNS sono stati creati con un'annotazione predefinita che deve essere rimossa per eseguire la pianificazione su un nodo Fargate.
  • Il pod non corrispondeva ad alcun profilo Fargate quando è stato creato e non è assegnato al fargate-scheduler. Se un pod non corrisponde al momento della creazione, non viene automaticamente riprogrammato per i nodi Fargate, anche se in seguito viene creato un profilo corrispondente. In questo caso, il pod viene assegnato allo scheduler predefinito.
  • Se il pod è assegnato a fargate-scheduler ma rimane nello stato In sospeso, potrebbe essere necessario eseguire di nuovo la risoluzione dei problemi.

Prima di risolvere i problemi, tieni presente le seguenti regole del pod Fargate:

  • È necessario configurare sia lo spazio dei nomi che le etichette di corrispondenza per i selettori di pod. Il flusso di lavoro Fargate associa i pod a un profilo Fargate solo se entrambe le condizioni corrispondono alle specifiche del pod.
  • Se specifichi più selettori di pod all'interno di un singolo profilo Fargate, il pod viene programmato da fargate-scheduler se corrisponde a uno qualsiasi dei selettori.
  • Se una specifica del pod corrisponde a più profili Fargate, il pod viene programmato in base a un profilo Fargate casuale. Per evitare ciò, puoi utilizzare l'annotazione eks.amazonaws.com/fargate-profile:<fp_name> all'interno della specifica del pod.

Risoluzione

Importante: la seguente procedura si applica solo ai pod avviati con AWS Fargate. Per informazioni sui pod avviati su istanze Amazon EC2, consulta Come posso risolvere i problemi relativi allo stato dei pod in Amazon EKS?

Rilevamento dello stato del pod

1.    Esegui il comando riportato per verificare lo stato del tuo pod:

kubectl get pods -n <namespace>

2.    Per ottenere maggiori informazioni sugli errori relativi al pod, esegui il comando describe:

kubectl describe pod YOUR_POD_NAME -n <namespace>

In base all'output del comando describe, vedere le seguenti risoluzioni.

Risoluzione dell'errore di capacità

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

Fargate capacity is unavailable at this time. Please try again later or in a different availability zone

Per risolvere l'errore:

  • Riprovare il pod dopo 15-20 minuti. Poiché l'errore è basato sulla capacità, il tempo esatto può variare.
  • Modificare la richiesta (CPU/memoria) all'interno delle specifiche del pod. Una nuova combinazione di vCPU/memoria viene quindi fornita dal flusso di lavoro di Fargate.
    Nota: la fattura viene calcolata in base a una delle tue combinazioni. Consulta CPU e memoria del pod per ulteriori informazioni su come viene finalizzata la combinazione in base alle specifiche del pod. L'esecuzione di un comando "kubectl describe node" dal tuo terminale/IDE può fornire un valore di combinazione vCPU/memoria molto più alto. Fargate non ha sempre capacità disponibile in base alle tue richieste e fornisce risorse da un pool di capacità sulla base del massimo sforzo. Tuttavia, ti verrà addebitato solo l'utilizzo del pod e la combinazione equivalente di vCPU/memoria.

Risoluzione dei pod CoreDNS nello stato In sospeso

Se i pod sono pod CoreDNS, il nome del pod nell'output del comando describe è simile al seguente:

NAME                                     READY   STATUS     RESTARTS      AGE
coredns-6548845887-qk9vf                 0/1     Pending    0             157m

Per risolvere questo problema e riassegnare i pod allo scheduler di Fargate: applica una patch all'implementazione CoreDNS per rimuovere la seguente annotazione predefinita: eks.amazonaws.com/compute-type: ec2.

Risoluzione dei pod assegnati allo scheduler predefinito

Per determinare lo scheduler a cui sono assegnati i pod, emetti il seguente comando:

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

Nell'output, verificare che schedulerName sia default-scheduler, aggiorna le specifiche del pod, quindi ricrea i pod.

Se schedulerName è fargate-scheduler e ricevi ancora errori, verifica che il pod segua tutte le regole e le considerazioni di Fargate. Consulta la sezione seguente per ulteriori passaggi per la risoluzione dei problemi.

Risoluzione dei problemi dei pod assegnati a fargate-scheduler

Se i pod sono assegnati a fargate-scheduler ma rimangono nello stato In sospeso, l'output del comando describe è simile al seguente:

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

Per risolvere questo errore:

  • Elimina e crea nuovamente i pod.
  • Verifica che quanto segue non sia impostato nella specifica del pod YAML:
    selettore di nodi
    <>nome nodo
    schedulerName
    Queste specifiche fanno sì che fargate-scheduler ignori il pod.
  • Verifica che le sottoreti selezionate nel tuo profilo Fargate dispongano di un numero sufficiente di indirizzi IP gratuiti per creare nuovi pod. Ogni nodo Fargate utilizza un indirizzo IP dalla sottorete.
  • Verifica che il gateway NAT sia impostato su una sottorete pubblica e che sia collegato un IP elastico.
  • Verifica che i set di opzioni DHCP associati al tuo VPC abbiano un AmazonProvidedDNS o un nome host server DNS valido per i server dei nomi di dominio.
  • Verifica che i nomi host DNS e la risoluzione DNS siano attivati per il tuo VPC.
  • Se utilizzi sottoreti private per i tuoi pod Fargate con solo endpoint VPC configurati per la comunicazione del servizio, verifica di avere i seguenti endpoint con nomi DNS consentiti:
    ECR - API
    ECR - DKR
    Endpoint gateway S3
  • Verifica che il gruppo di sicurezza collegato all'endpoint VPC consenta la comunicazione da Fargate da e verso il server API. Il gruppo di sicurezza endpoint VPC deve consentire l'ingresso della porta 443 dal CIDR VPC del cluster. Anche l'accesso privato agli endpoint deve essere attivato per il cluster.

Questo articolo è stato utile?


Hai bisogno di supporto tecnico o per la fatturazione?