Hva er oomkilled feil?
Oomkilled, for å si det enkelt, er en Kubernetes -feil som oppstår når en pod eller beholder bruker mer minne enn det som er tildelt den. OOM står for utenfor minnet. Drept betyr slutten av prosessen.
Å øke minnetildelingen er en enkel måte å løse dette tilbakevendende problemet. Denne enkle teknikken fungerer imidlertid bare hvis minnet er uendelig rikelig og ressursene er grenseløse. La oss finne ut mer om den oomkillede feilen, dens viktigste årsaker, hvordan du fikser den og hvordan du kan balansere minnetildelingene rett i de følgende seksjonene.
Typer oomkilled feil
I Kubernetes kommer oomkillede feil i to forskjellige varianter. Den ene er Oomkilled: Limit Overcommit og den andre er oomkilled: Container -grensen nådd.
La oss lære mer om disse feilene mer dybde.
Oomkilled: Limt Overcommit -feilen
Når aggregatet for podgrensen overstiger nodens tilgjengelige minne, kan det oppstå en feil. Derfor, hvis en node har 6 GB tilgjengelig minne, for eksempel, kan du få seks belg der hver krever 1 GB minne. Imidlertid risikerer du å gå tom for minnet hvis til og med en av disse belgene er satt opp med en grense for, for eksempel, 1.1 gigabyte. Alt som trengs for Kubernetes å begynne å myrde belgene er at den ene poden skal oppleve en pigg i trafikk eller en uidentifisert minnelekkasje.
Oomkilled: Container -grensen nådd
Kubernetes avslutter et applikasjon med en "Oomkilled Container-grense nådd" -feil og avslutningskode 137 hvis den har en minnelekkasje eller prøver å konsumere mer minne enn den tildelte grensen.
Dette er den desidert mest elementære minnefeilen som kan skje i en pod. Når beholdergrensen er nådd normalt, påvirker den bare en pod, i motsetning til grensen overkommit.
Vanlige årsaker til oomkillet feil
Du kan finne de typiske årsakene til denne feilen i følgende liste. Merk at det er mange flere årsaker til at oomkillede feil oppstår, og at mange av disse er utfordrende å identifisere og løse:
Hvordan identifisere den oomkillede feilen
POD -statusen kan sjekkes for å se om en oomkillet feil oppstår. For å lære mer om problemet, bruk beskrivelsen eller få kommandoen. Get PODS -kommandoens utdata, som sett i det følgende, viser alle pod -krasjer som involverer en oomkillet feil.
Kjør kommandoen “Kubectl Get Pods” for å finne feilen. POD -statusen vises som å avslutte. Se følgende kommando og skjermbilde:
> kubectl få pods
Navnet på poden, dens status, hvor mange ganger den startet, og podens alder oppnås ved “Get Pods” -kommandoen. Her kan du se at hvis en pod går i stykker på grunn av et oomkillet problem, gjør Kubernetes feilen veldig åpenbar i POD -statusen.
Hvordan løse den oomkillede feilen?
La oss nå undersøke en løsning på den oomkillede feilen.
Først av alt samler vi dataene og lagrer filens innhold for senere bruk. For å gjøre det, utfører vi først “Kubectl beskriv pod” -kommandoen. Den utførte kommandoen er vedlagt som følger:
> Kubectl beskriv pod pod-one/tmp/solving_oomkilled_error.tekst
Du må nå se gjennom pod -hendelsene for exit code 137. Se etter følgende melding (se følgende skjermbilde) i hendelsesdelen av tekstfilen til filen.
På grunn av minnebegrensninger avsluttes beholderen med exit code 137.
Det er to viktigste årsaker til den oomkillede feilen. Den første grunnen er når poden avsluttes på grunn av containergrensen og den andre grunnen er når poden avsluttes på grunn av overkommisjon på noden. Du må undersøke hendelsene i podens nylige historie for å prøve å finne ut hva som forårsaket problemet.
Den forrige seksjonen hjelper deg med å identifisere den oomkillede feilen. Når du er ferdig med det, er følgende hensyn nødvendig for å søke.
Hvis poden avsluttes når beholdergrensen er nådd, bør disse punktene huskes:
Hvis POD -termineringsgrunnen er overkommisjon av node, kan du følge disse retningslinjene:
Konklusjon
For å oppsummere, er pod -krasj forårsaket av en veldig enkel oomkillet feil. Å ha en passende ressursfordelingsplan for Kubernetes -installasjonene er den beste måten å håndtere dette problemet. Ved å analysere applikasjonens ressursutnyttelse nøye og ressursens tilgjengelighet i K8S -klyngen, kan brukerne definere ressursbegrensningene som ikke vil påvirke funksjonaliteten til programmet eller noden.