Perché il mio pod Amazon EKS è bloccato nello stato ContainerCreating con l'errore "failed to create pod sandbox"?

Ultimo aggiornamento: 30-11-2021

Il mio contenitore Amazon Elastic Kubernetes Service (Amazon EKS) è bloccato nello stato ContainerCreating con l'errore "failed to create pod sandbox".

Risoluzione

I pod Amazon EKS potrebbero essere bloccati nello stato ContainerCreating con errore di connettività di rete per diversi motivi. Utilizza le seguenti opzioni di risoluzione dei problemi in base al messaggio di errore visualizzato:

Risposta all'errore dal daemon: impossibile avviare shim: fork/exec /usr/bin/containerd-shim: risorsa temporaneamente non disponibile: sconosciuta

Questo errore si verifica a causa di una limitazione del sistema operativo causata dalle impostazioni del kernel definite per il PID massimo o il numero massimo di file.

Recupera informazioni sul tuo pod eseguendo il seguente comando:

$ kubectl describe pod example_pod

Dovresti visualizzare un output simile al seguente:

kubelet, ip-xx-xx-xx-xx.xx-xxxxx-x.compute.internal  Failed to create pod sandbox: rpc error: code = Unknown desc = failed to start sandbox container for pod "example_pod": Error response from daemon: failed to start shim: fork/exec /usr/bin/containerd-shim: resource temporarily unavailable: unknown

Per risolvere temporaneamente il problema, riavvia il nodo.

Per risolvere il problema, procedi come segue.

  • Raccogli i log dei nodi.
  • Esamina i log Docker per l’errore "dockerd[4597]: runtime/cgo: pthread_create failed: Risorsa temporaneamente non disponibile".
  • Esamina il log Kubelet per gli errori"kubelet[5267]: runtime: impossibile creare un nuovo thread del SO (ne hai già 2; errno=11)" e "kubelet[5267]: runtime: potrebbe essere necessario aumentare il numero massimo di processi utente (ulimit -u)".
  • Identifica i processi zombie eseguendo il comando ps. Tutti i processi elencati con lo stato Z nell'output sono processi zombie.

Il plug-in di rete cni non è riuscito a configurare la rete pod: add cmd: impossibile assegnare un indirizzo IP al container

Questo errore indica che Container Network Interface (CNI) non è in grado di assegnare un indirizzo IP per il pod appena eseguito il provisioning.

Recupera informazioni sul tuo pod eseguendo il seguente comando:

$ kubectl describe pod example_pod

Dovresti visualizzare un output simile al seguente:

Warning FailedCreatePodSandBox 23m (x2203 over 113m) kubelet, ip-xx-xx-xx-xx.xx-xxxxx-x.compute.internal (combined from similar events): Failed create pod sandbox: rpc error: code = Unknown desc = failed to set up sandbox container "XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX" network for pod "provisioning-XXXXXXXXXXXXXXX": networkPlugin cni failed to set up pod "provisioning-XXXXXXXXXXXXXXX" network: add cmd: failed to assign an IP address to container

Esamina la sottorete per identificare se la sottorete ha esaurito gli indirizzi IP liberi. Puoi visualizzare gli indirizzi IP disponibili per ogni sottorete nella console Amazon VPC nella sezione Sottoreti.

Per risolvere questo problema, ridimensiona parte del carico di lavoro per liberare gli indirizzi IP disponibili. È possibile decidere di scalare il nodo se è disponibile una capacità di sottorete aggiuntiva. È inoltre possibile creare una sottorete aggiuntiva. Per ulteriori informazioni, consulta Creazione di sottoreti con un nuovo intervallo CIDR in Come si utilizzano più intervalli CIDR con Amazon EKS?

Errore durante la composizione del dial tcp 127.0.0. 1:50051: connect: connessione rifiutata

Questo errore indica che il pod aws-node non è riuscito a comunicare con IPAM.

Recupera informazioni sul tuo pod eseguendo i seguenti comandi:

$ kubectl describe pod example_pod
$ kubectl describe pod/aws-node-XXXXX -n kube-system

Dovresti visualizzare un output simile al seguente:

Warning  FailedCreatePodSandBox  51s  kubelet, ip-xx-xx-xx-xx.ec2.internal  Failed create pod sandbox: rpc error: code = Unknown desc = [failed to set up sandbox container "XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX" network for pod "example_pod": NetworkPlugin cni failed to set up pod "example_pod" network: add cmd: Error received from AddNetwork gRPC call: rpc error: code = Unavailable desc = connection error: desc = "transport: Error while dialing dial tcp 127.0.0.1:50051: connect: connection refused", failed to clean up sandbox container
"XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX" network for pod "example_pod": NetworkPlugin cni failed to teardown pod "example_pod" network: del cmd: error received from DelNetwork gRPC call: rpc error: code = Unavailable desc = connection error: desc = "transport: Error while dialing dial tcp 127.0.0.1:50051: connect: connection refused"]

Per risolvere il problema, emetti il seguente comando per visualizzare l'ultimo messaggio di log:

kubectl -n kube-system exec -it aws-node-XXX-- tail -f /host/var/log/aws-routed-eni/ipamd.log | tee ipamd.log

L'ultimo messaggio di log è simile al seguente:

Getting running pod sandboxes from \"unix:///var/run/dockershim.sock\

Questo messaggio indica che il pod non è stato in grado di montare var/run/dockershim.sock.

Per risolvere il problema, completa la seguente operazione:

  • Riavvia il pod aws-node. Il riavvio potrebbe aiutare il pod a rimappare il punto di montaggio.
  • Se il problema non viene ancora risolto, cordona il nodo e ridimensiona i nodi nel gruppo di nodi.
  • Prova ad aggiornare il CNI del virtual private cloud (VPC) all'ultima versione supportata del cluster.

Se il CNI è stato aggiunto come componente aggiuntivo gestito nella Console di gestione AWS, il nodo aws fallisce le analisi. Il passaggio ai componenti aggiuntivi gestiti sovrascrive l'account del servizio. Tuttavia, l'account del servizio non è configurato con il ruolo selezionato. Per risolvere il problema, disattiva il componente aggiuntivo dalla console e crea l'account di servizio utilizzando un file manifest. In alternativa, modifica l'account del servizio aws-node corrente per aggiungere il ruolo utilizzato nel componente aggiuntivo gestito.

Il plug-in di rete cni non è riuscito a configurare la rete pod "example_pod": impossibile analizzare gli argomenti di Kubernetes: il pod non ha l'etichetta vpc.amazonaws.com/privateIPv4Address

Viene visualizzato questo errore perché il pod non funziona correttamente o il certificato utilizzato dal pod non è stato creato correttamente. Questo errore si riferisce al webhook del controller di ammissione VPC necessario sui cluster Amazon EKS per eseguire carichi di lavoro Windows. Questo componente è un plug-in che esegue un pod nello spazio dei nomi kube-system. Questo componente viene eseguito su nodi Linux e abilita la rete per i pod in ingresso sui nodi Windows.

Recupera informazioni sul tuo pod eseguendo il seguente comando:

$ kubectl describe pod example_pod

Dovresti visualizzare un output simile al seguente:

Failed to create pod sandbox: rpc error: code = Unknown desc = failed to set up sandbox container "XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX" network for pod "<POD_ANME>": networkPlugin cni failed to set up pod "example_pod" network: failed to parse Kubernetes args: pod does not have label vpc.amazonaws.com/PrivateIPv4Address

Per risolvere questo problema, emetti il seguente comando per confermare che il pod del controller di ammissione VPC è stato creato:

$ kubectl get pods -n kube-system

Se il pod del controller di ammissione non è stato creato, abilita il supporto di Windows per il tuo cluster.

Importante: Amazon EKS attualmente supporta i gruppi di nodi Windows senza che sia necessario abilitare il controller VPC. Se il controller VPC è abilitato, rimuovi il supporto Windows legacy dal piano dati.

Emetti il seguente comando per verificare se ci sono errori scritti nei log:

$ kubectl logs your-admission-webhook-name -n kube-system

È possibile continuare a risolvere ulteriormente i problemi in base agli errori identificati dai log.


Questo articolo è stato utile?


Hai bisogno di supporto tecnico o per la fatturazione?