Hvordan fikse Kubernetes oomkilled feil

Hvordan fikse Kubernetes oomkilled feil
I ethvert programvareutviklingsmiljø vil brukerne oppleve forskjellige typer feil. Det samme holder når du diskuterer om containerutviklingen. Kubernetes blir den mest brukte plattformen for container orkestrering. Som et resultat, i Kubernetes -miljøer, er det mer sannsynlig at feil oppstår. Derfor må vi være klar over de hyppige problemene med K8s, slik at vi kan adressere dem så snart de oppstår. I denne artikkelen vil vi spesielt diskutere den oomkillede feilen fordi den ofte oppstår når du jobber med Kubernetes. La oss først snakke om hva den oomkillede feilen er og hvorfor det skjer.

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:

  • Når containerminnegrensen er nådd, opplever applikasjonen en belastning som er høyere enn normalt.
  • Applikasjonen har en minnelekkasje som et resultat av at containerminnegrensen blir nådd.
  • Noden er overskrevet, noe som betyr at den totale mengden minne som konsumeres av pods overstiger minnet om noden.

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:

  • Analyser om applikasjonen din trenger mer minne. For eksempel, hvis applikasjonen er et nettsted som får mer trafikk, kan det kreve mer minne enn det som ble planlagt først. I dette tilfellet løser det å øke beholderens minnegrense i POD -spesifikasjonen problemet.
  • En minnelekkasje kan oppstå i programmet hvis minnebruken øker uventet. Du kan enkelt fikse minnelekkasjen og feilsøke applikasjonen. I denne situasjonen er ikke å øke minnegrensen en anbefalt løsning fordi applikasjonen bruker mange ressurser på nodene.

Hvis POD -termineringsgrunnen er overkommisjon av node, kan du følge disse retningslinjene:

  • Overkommisjon på en node kan også oppstå når belgene har lov til å organisere på en node.
  • Det er viktig å finne ut grunnen til at Kubernetes avslutter poden med den oomkillede feilen. Gjør oppdateringer med minneforespørsler og begrenser verdier for å unngå at noden blir overgått.

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.