Perché il mio pod Amazon EKS è bloccato nello stato ContainerCreating con l'errore "failed to create pod sandbox" (impossibile creare sandbox pod)?
Il mio pod Amazon Elastic Kubernetes Service (Amazon EKS) è bloccato nello stato ContainerCreating con l'errore "failed to create pod sandbox" (impossibile creare sandbox pod).
Risoluzione
Questo errore viene visualizzato quando si verifica un problema di rete o il limite delle risorse di sistema è configurato in modo errato.
Se ricevi questo errore e i tuoi pod sono nello stato ContainerCreating, controlla innanzitutto lo stato del pod. Quindi, esegui il comando seguente per ottenere maggiori dettagli. Sostituisci podname con il nome del tuo pod:
kubectl describe pod podname
In base all'output, consulta le seguenti sezioni per la risoluzione dei problemi.
Risposta di errore "Resource temporarily unavailable" (Risorsa temporaneamente non disponibile)
In caso di problemi relativi alle risorse, verrà visualizzato un messaggio di errore simile al seguente:
"kubelet, ip-##-##-##-##.##-#####-#.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"
Questa risposta di errore viene generata quando le impostazioni del kernel definite per il PID massimo o il numero massimo di file causano una limitazione del sistema operativo.
Per risolvere temporaneamente il problema, riavvia il nodo.
Per risolvere il problema alla radice, completa le seguenti attività:
- Raccogli i log dei nodi.
- Esamina i log Docker per individuare la risposta di errore "dockerd[4597]: runtime/cgo: pthread_create failed: Resource temporarily unavailable" (dockerd[4597]: runtime/cgo: errore pthread_create: risorsa temporaneamente non disponibile).
- Esamina il log di Kubelet per individuare le risposte di errore seguenti:
"kubelet[5267]: runtime: failed to create new OS thread (have 2 already; errno=11)" (kubelet[5267]: runtime: impossibile creare nuovo thread SO (già 2 presenti; n.err.=11))
"kubelet[5267]: runtime: may need to increase max user processes (ulimit -u)" (kubelet[5267]: runtime: può essere necessario aumentare il numero massimo di processi utente (ulimit -u)). - Esegui il comando ps per identificare i processi zombie. Tutti i processi elencati con lo stato Z nell'output sono processi zombie.
Risposta di errore "Network plugin cni failed to set up pod network" (Il plug-in di rete cni non è riuscito a configurare la rete pod)
In caso di problemi relativi alla rete, verrà visualizzato un messaggio di errore simile al seguente:
"Network plugin cni failed to set up pod network: add cmd: failed to assign an IP address to container" (Il plug-in di rete cni non è riuscito a configurare la rete pod: comando add: impossibile assegnare un indirizzo IP al container)
Questa risposta di errore indica che il plug-in Container Network Interface (CNI) non può assegnare un indirizzo IP al pod appena creato.
Un'istanza che ha utilizzato il numero massimo di interfacce di rete elastiche e indirizzi IP consentiti può causare questa risposta di errore. Puoi ricevere questa risposta di errore anche quando le sottoreti Amazon Virtual Private Cloud (Amazon VPC) hanno un numero di indirizzi IP pari a zero.
Di seguito è riportato un esempio del numero massimo di indirizzi IP dell'interfaccia di rete:
Instance type Maximum network interfaces Private IPv4 addresses per interface IPv6 addresses per interfacet3.medium 3 6 6
Nell'esempio precedente, l'istanza t3.medium ha un massimo di tre interfacce di rete e ogni interfaccia di rete ha un massimo di sei indirizzi IP. Il primo indirizzo IP viene utilizzato per il nodo e non è possibile assegnarlo. Questa interfaccia di rete dispone quindi di 17 indirizzi IP che può allocare.
Quando l'interfaccia di rete esaurisce gli indirizzi IP, i log locali del daemon di gestione degli indirizzi IP (ipamD) mostrano il seguente messaggio:
"ipamd/ipamd.go:1285","msg":"Total number of interfaces found: 3 ""AssignIPv4Address: IP address pool stats: total: 17, assigned 17" "AssignPodIPv4Address: ENI eni-abc123 does not have available addresses" ("ipamd/ipamd.go:1285","msg":"Numero totale di interfacce trovate: 3 ""AssignIPv4Address: statistiche pool di indirizzi IP: totali: 17, assegnati 17" "AssignPodIPv4Address: ENI eni-abc123 non ha indirizzi disponibili")
Vedi ad esempio l'output seguente:
Warning FailedCreatePodSandBox 23m (x2203 over 113m) kubelet, ip-##-##-##-##.##-#####-#.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 determinare se ha esaurito gli indirizzi IP gratuiti. Puoi visualizzare gli indirizzi IP disponibili per ciascuna sottorete nella console Amazon VPC nella sezione Sottoreti.
Subnet: ##########IPv4 CIDR Block 10.2.1.0/24 Number of allocated ips 254 ; Free address count 0
Per risolvere questo problema, usa le soluzioni seguenti:
- Assicurati di utilizzare la versione più recente disponibile del CNI del VPC.
- Riduci il carico di lavoro per liberare gli indirizzi IP usati.
- Aumenta il numero di nodi se nella sottorete sono disponibili più indirizzi IP.
- Usa reti personalizzate per i pod.
- Attiva la modalità di delega del prefisso. Per ulteriori informazioni, vedi Prefix Mode for Windows (Modalità prefisso per Windows) dall'account AWS sul sito Web di GitHub.
Risposta di errore "Error while dialing" (Errore durante la composizione)
In caso di problemi relativi alla composizione, verrà visualizzato un messaggio di errore simile al seguente:
"Error while dialing dial tcp 127.0.0.1:50051: connect: connection refused" (Errore durante la composizione del numero tcp 127.0.0.1:50051: connetti: connessione rifiutata)
Questo errore indica che il pod aws-node non è riuscito a comunicare con IPAM perché l'esecuzione del pod aws-node non è riuscita sul nodo.
Per risolvere questo problema, assicurati di utilizzare la versione corretta del plug-in CNI del VPC per la versione del cluster.
I pod potrebbero essere nello stato In attesa a causa di errori dei probe di attività e idoneità. Assicurati di disporre della versione più recente del componente aggiuntivo CNI del VPC.
Il problema potrebbe verificarsi anche perché il punto di montaggio di Dockershim (fino alla versione EKS 1.23) non riesce a montare. Il seguente messaggio di esempio indica che il pod non ha montato var/run/dockershim.sock:
Getting running pod sandboxes from \"unix:///var/run/dockershim.sock\Not able to get local pod sandboxes yet (attempt 1/5): rpc error: code = Unavailable desc = all SubConns are in TransientFailure, latest connection error: connection error: desc = "transport: Error while dialing dial unix /var/run/dockershim.sock: connect: no such file or director
Per risolvere questo problema, completa i passaggi seguenti:
- Riavvia il pod aws-node per rimappare il punto di montaggio.
- Limita l'accesso al nodo e scala i nodi nel gruppo di nodi.
- Aggiorna l'interfaccia di rete di Amazon VPC alla versione del cluster più recente supportata.
Se hai aggiunto il CNI come plug-in gestito nella Console di gestione AWS, i probe di aws-node avranno esito negativo. I plug-in gestiti sovrascrivono l'account del servizio. Tuttavia, l'account del servizio non è configurato con il ruolo selezionato. Per risolvere questo problema, disattiva il plug-in dalla Console di gestione AWS e crea l'account di servizio con un file manifesto. In alternativa, modifica l'attuale account del servizio aws-node aggiungendo il ruolo utilizzato nel componente aggiuntivo gestito.
Risposta di errore "Pod does not have label" (Il pod non ha un'etichetta)
In caso di problemi relativi all'etichetta, verrà visualizzato un errore simile al seguente:
"Failed to parse Kubernetes args: pod does not have label vpc.amazonaws.com/PrivateIPv4Address" (Impossibile analizzare gli argomenti Kubernetes: il pod non ha un'etichetta vpc.amazonaws.com/PrivateIPv4Address) o "Pod does not have label vpc.amazonaws.com/PrivateIPv4Address" (Il pod non ha un'etichetta vpc.amazonaws.com/PrivateIPv4Address)
Questo problema si verifica quando un pod non ha un nodeSelector pianificato su un nodo Windows.
Per risolvere il problema, assicurati di includere le etichette seguenti nel PodSpec per il nodeSelector:
- kubernetes.io/os: windows
- kubernetes.io/arch: amd64
Errore del gruppo di sicurezza
In caso di problemi relativi al gruppo di sicurezza, verrà visualizzato un errore simile al seguente:
"Plugin type="aws-cni" name="aws-cni" failed (add): add cmd: failed to assign an IP address to container
Vpc-resource-controller failed to allocate branch ENI to pod: creating network interface, NoCredentialProviders: no valid providers in chain. Deprecated." (Tipo plug-in: "aws-cni" nome="aws-cni" non riuscito (aggiunta): comando add: impossibile assegnare un indirizzo IP al container.
VPC-resource-controller non è riuscito ad assegnare il ramo ENI al pod: creazione di un'interfaccia di rete, NoCredentialProviders: nessun provider valido nella catena. Obsoleto.)
Questa risposta di errore può indicare un problema con il piano di controllo (control-plane) health.kubernetes. Per risolvere questo problema, contatta il Supporto AWS.
Video correlati
Contenuto pertinente
- AWS UFFICIALEAggiornata 8 mesi fa
- AWS UFFICIALEAggiornata 10 mesi fa
- AWS UFFICIALEAggiornata 2 anni fa
- AWS UFFICIALEAggiornata un anno fa