Come correggere l'errore di Kubernetes Oomkilled

Come correggere l'errore di Kubernetes Oomkilled
In qualsiasi ambiente di sviluppo del software, gli utenti sperimenteranno diversi tipi di errori. Lo stesso vale quando si discute degli sviluppi del contenitore. Kubernetes sta diventando la piattaforma più utilizzata per l'orchestrazione del contenitore. Di conseguenza, negli ambienti di Kubernetes, è più probabile che si verifichino guasti. Pertanto, dobbiamo essere consapevoli dei frequenti problemi con i K8 in modo da poterli affrontare non appena si presentano. In questo articolo, discuteremo in particolare l'errore oomkilled perché si verifica spesso quando si lavora con Kubernetes. Parliamo per la prima.

Cos'è l'errore Oomkilled?

Oomkilled, per dirla semplicemente, è un errore di Kubernetes che si verifica quando un baccello o un contenitore usa più memoria di quanto non sia assegnato ad esso. L'OOM rappresenta fuori dalla memoria. Ucciso indica la fine del processo.

Aumentare l'assegnazione della memoria è un modo semplice per risolvere questo problema ricorrente. Questa semplice tecnica, tuttavia, funziona solo se la memoria è infinitamente abbondante e le risorse sono illimitate. Scopriamo di più sull'errore oomkilled, sulle sue cause principali, su come risolverlo e su come bilanciare le allocazioni della memoria direttamente nelle sezioni seguenti.

Tipi di errore Oomkilled

In Kubernetes, gli errori di Oomkilled sono disponibili in due diverse varianti. Uno è Oomkilled: limite eccessivo e il secondo è oomkilled: limite del contenitore raggiunto.

Impariamo di più su questi errori in modo più approfondito.

Oomkilled: limite l'errore di sovraccarico

Quando l'aggregato del limite POD supera la memoria disponibile del nodo, può verificarsi un errore. Pertanto, se un nodo ha 6 GB di memoria disponibile, ad esempio, è possibile ottenere sei baccelli in cui ciascuno richiede 1 GB di memoria. Tuttavia, corri il rischio di esaurire la memoria se anche uno di quei baccelli è impostato con un limite, diciamo, 1.1 gigabyte. Tutto ciò che serve per Kubernetes per iniziare a uccidere i baccelli è per quel pod di sperimentare un picco di traffico o una perdita di memoria non identificata.

Oomkilled: limite del contenitore raggiunto

Kubernetes termina un'applicazione con un errore "Oomkilled-Container raggiunto" ed esci Codice 137 se ha una perdita di memoria o tenta di consumare più memoria del limite assegnato.

Questo è di gran lunga l'errore di memoria più elementare che può accadere all'interno di un pod. Quando il limite del contenitore viene raggiunto normalmente, influisce solo su un pod, a differenza dell'errore di overcono.

Cause comuni di errore Oomkilled

È possibile trovare le cause tipiche di questo errore nel seguente elenco. Si noti che ci sono numerosi ulteriori motivi per cui si verificano errori oomkillati e che molti di questi sono impegnativi da identificare e risolvere:

  • Quando viene raggiunto il limite di memoria del contenitore, l'applicazione sperimenta un carico superiore al normale.
  • L'applicazione ha una perdita di memoria a seguito del raggiungimento del limite di memoria del contenitore.
  • Il nodo è eccessivo, il che significa che la quantità totale di memoria consumata dai pod supera la memoria del nodo.

Come identificare l'errore oomkilled

Lo stato del pod può essere verificato per vedere se si verifica un errore Oomkilled. Quindi, per saperne di più sul problema, usa il comando descrivi o ottieni. L'output del comando Get Pods, come visto nel seguente, elenca qualsiasi crash di pod che comporta un errore oomkilled.

Esegui il comando "Kubectl Get Pods" per trovare l'errore. Lo stato del pod è mostrato come terminato. Vedi il seguente comando e screenshot:

> kubectl ottieni baccelli

Il nome del pod, il suo stato, quante volte è iniziato e l'età del pod è ottenuta dal comando "get pods". Qui, puoi vedere che se un pod si rompe a causa di un problema oomkilled, Kubernetes rende l'errore molto evidente nello stato del pod.

Come risolvere l'errore oomkilled?

Esaminiamo ora una soluzione all'errore oomkilled.

Prima di tutto, raccogliamo i dati e salviamo il contenuto del file per un uso successivo. Per fare ciò, eseguiamo prima il comando "Kubectl Descrive Pod". Il comando eseguito è allegato come segue:

> kubectl Descrivi pod pod-one/tmp/solving_oomkilled_error.TXT

Ora devi guardare attraverso gli eventi POD per il codice di uscita 137. Cerca il seguente messaggio (vedere la seguente schermata) nella sezione Event del file di testo del file.

A causa dei vincoli di memoria, il contenitore viene terminato con il codice di uscita 137.

Ci sono due motivi più significativi per l'errore oomkilled. Il primo motivo è quando il POD viene terminato a causa del limite del contenitore e il secondo motivo è quando il pod viene terminato a causa del sovraccarico sul nodo. È necessario esaminare gli eventi della storia recente del pod per cercare di determinare cosa ha causato il problema.

La sezione precedente ti aiuta a identificare l'errore oomkilled. Una volta che hai finito, sono necessarie le seguenti considerazioni.

Se il pod viene terminato quando viene raggiunto il limite del contenitore, questi punti dovrebbero essere tenuti a mente:

  • Analizza se l'applicazione ha bisogno di più memoria. Ad esempio, se l'applicazione è un sito Web che ottiene più traffico, può richiedere più memoria di quanto previsto per la prima volta. In questo caso, aumentare il limite di memoria del contenitore nella specifica POD risolve il problema.
  • Nel programma può verificarsi una perdita di memoria se l'utilizzo della memoria aumenta inaspettatamente. È possibile correggere facilmente la perdita di memoria e eseguire il debug dell'applicazione. In questa situazione, aumentare il limite di memoria non è una soluzione consigliata perché l'applicazione consuma molte risorse sui nodi.

Se il motivo di terminazione del pod è eccessivo di nodo, è possibile seguire queste linee guida:

  • L'over -commitment su un nodo può verificarsi anche quando i pod sono autorizzati ad organizzarsi su un nodo.
  • È importante scoprire il motivo per cui Kubernetes termina il pod con l'errore oomkilled. Effettuare aggiornamenti con le richieste di memoria e limitare i valori per evitare che il nodo venga sovraccaricato.

Conclusione

Per riassumere, gli arresti di pod sono causati da un errore Oomkilled molto semplice. Avere un piano di allocazione delle risorse appropriato per le installazioni di Kubernetes è il modo migliore per gestire questo problema. Analizzando attentamente l'utilizzo delle risorse dell'applicazione e la disponibilità delle risorse nel cluster K8S, gli utenti possono definire le limitazioni delle risorse che non influenzerà la funzionalità del programma o del nodo.