Perché i pod non riescono ripetutamente a riavviarsi o vengono rimossi in modo imprevisto?

Risolvi i problemi relativi ai pod che non riescono a riavviarsi ripetutamente, rimangono bloccati in un ciclo di " CrashLoopBackOff " o vengono rimossi in modo imprevisto dal cluster.

Virtual Private Cloud Infrastruttura classica

Il tuo pod era integro ma viene rimosso in modo imprevisto o rimane bloccato in un loop di riavvio. A volte i contenitori mostrano lo stato CrashLoopBackOff.

I tuoi contenitori potrebbero superare i limiti di risorsa o i tuoi pod potrebbero essere sostituiti da pod con priorità più alta. Quando un container " Kubernetes " non riesce ripetutamente ad avviarsi, entra in uno stato " CrashLoopBackOff ", che indica un ciclo di riavvio persistente all'interno di un pod. Questo errore si verifica spesso a causa di vari problemi che impediscono al contenitore di avviarsi correttamente. Le cause più comuni possono essere la memoria insufficiente, il sovraccarico delle risorse, gli errori di distribuzione, i problemi di servizi di terze parti come gli errori DNS, le dipendenze mancanti o i fallimenti dei container dovuti a conflitti di porte.

Consultare le seguenti sezioni:

Correzione dei limiti delle risorse del contenitore

  1. Richiama il nome del tuo pod. Se hai utilizzato un'etichetta, puoi includerla per filtrare i risultati.
    kubectl get pods --selector='app=wasliberty'
    
  2. Descrivi il pod e cerca la sezione Restart Count.
    kubectl describe pod
    
  3. Se il pod è stato riavviato più volte in un breve periodo di tempo, recupera il suo stato.
    kubectl get pod <pod_name> -n <namespace> -o go-template='{{range.status.containerStatuses}}{{"Container Name: "}}{{.name}}{{"\r\nLastState: "}}{{.lastState}}{{end}}'
    
  4. Esamina il motivo. Ad esempio, il messaggio " OOM Killed " indica un esaurimento della memoria, il che significa che il container sta andando in crash a causa di un limite di risorse.
  5. Aggiungi la capacità al tuo cluster, ad esempio ridimensionando i pool di nodi di lavoro in modo che le risorse possano essere soddisfatte. Per ulteriori informazioni, vedi Ridimensiona il tuo pool di nodi di lavoro Classic o Ridimensiona il tuo pool di nodi di lavoro VPC.

Correzione della sostituzione del pod con pod con priorità più alta

Per vedere se il tuo pod viene sostituito da pod con priorità più alta:

  1. Richiama il nome del tuo pod.

    kubectl get pods
    
  2. Descrivi il file YAML del tuo pod.

    kubectl get pod <pod_name> -o yaml
    
  3. Controlla il campo priorityClassName.

    1. Se non c'è alcun valore di campo priorityClassName, il tuo pod ha la classe di priorità globalDefault. Se il tuo amministratore cluster non ha impostato una classe di priorità globalDefault, il valore predefinito è zero (0) o la priorità più bassa. Qualsiasi pod con una classe di priorità più alta può prerilasciare o rimuovere il tuo pod.

    2. Se c'è un valore di campo priorityClassName, richiama la classe di priorità.

        kubectl get priorityclass <priority_class_name> -o yaml
        ```
    3. Prendi nota del campo `value` per controllare la priorità del tuo pod.
    
    
  4. Elenca le classi di priorità esistenti nel cluster.

    kubectl get priorityclasses
    
  5. Per ogni classe di priorità, richiama il file YAML e prendi nota del campo value.

    kubectl get priorityclass <priority_class_name> -o yaml
    
  6. Confronta il valore della classe di priorità del tuo pod con gli altri valori della classe di priorità per verificare se ha priorità superiore o inferiore.

  7. Ripeti i passi da 1 a 3 per gli altri pod nel cluster, per verificare quale classe di priorità stanno utilizzando. Se la classe di priorità di questi altri pod è superiore a quella del tuo pod, il pod non viene fornito a meno che non vi siano risorse sufficienti per il tuo pod e per ogni pod con priorità più alta.

  8. Contatta l'amministratore del cluster per aumentare la capacità del cluster e verificare che siano state assegnate le classi di priorità corrette.