Hvordan du fikser Kubernetes navneområde som sitter fast i avsluttet tilstand

Hvordan du fikser Kubernetes navneområde som sitter fast i avsluttet tilstand

Flere rapporter i det siste har handlet om Kubernetes navneområder som blir sittende fast i en avsluttende tilstand. Denne artikkelen gir en forklaring på høyt nivå på hva som kan forårsake dette og hvordan du kan løse det. Du finner all nødvendig informasjon om hvordan du kan løse problemet. Vi vil forklare hvorfor dette skjer i utgangspunktet. La oss starte med det Kubernetes navneområde sitter fast.

Hva er spørsmålet om Kubernetes navneområde som sitter fast i å avslutte spørsmål?

For å forstå hva Kubernetes navneområde sitter fast avsluttende problem er, er det viktig å bli kjent med hva et navneområde er. Kubernetes navneområde er et sett med ressurser som brukes av Kubernetes Daemon for å administrere og kontrollere de distribuerte applikasjonene. Et navneområde opprettes vanligvis når den første distribusjonen av en ny applikasjon på Kubernetes startes. Navnområdet forblir i "Creating" -tilstanden de første sekundene etter utplasseringen. Etter dette blir det den "avsluttende" tilstanden, og demonen begynner å tildele ressursene til søknaden. Navnområdet antas å være forberedt på bruk av programmet når det avsluttes. I noen tilfeller kan imidlertid navneområdet bli sittende fast i denne tilstanden på ubestemt tid og nekter å bli aktiv selv etter at flere forsøk er gjort på å skape den på nytt. Det er noen få handlinger som du kan gjøre for å fikse det når dette skjer. Vi vil undersøke noen av de mest typiske årsakene til dette problemet og muligens fikse det.

Hvorfor blir navneområdet sittende fast i avsluttende tilstand?

Det er noen få vanlige grunner til at et navneområde kan sitte fast i en avsluttende tilstand:

Årsak 1: Vanlig operatørfeil

Den vanligste feilen er operatørfeilen der en operatør ved et uhell sletter eller stopper tjenesten som holder livsområdet i live.

Årsak 2: Feil konfigurasjon

En annen vanlig grunn er at den underliggende klyngen må konfigureres riktig. Hvis klyngen er konfigurert med flere mestere og en master plutselig fjernes fra klyngen, kan det føre til termineringstilstanden til alle andre klynger i klyngenettverket siden de mangler en levedyktig masterforbindelse.

Årsak 3: Nettverkstilkoblingsproblemer

Noen ganger kan et underliggende spørsmål, for eksempel problemer med nettverkstilkobling, føre til at belgene som kjører inne i navneområdet til å avslutte brått, noe som får selve navneområdet til å gå inn i en avsluttet tilstand. Det er avgjørende å spore en klynges beregninger og inspisere dem ofte for å sikre at det ikke er noen underliggende problemer som forårsaker driftsstans for applikasjonene dine.

Årsak 4: Finalisatorer

Endelig har navneområder en finalisator som er definert under spesifikasjonen. En finalisator er en metadatatast som instruerer Kubernetes å holde på med å ødelegge en ressurs med mindre en bestemt tilstand er oppfylt. Så når en kommando for å slette et navneområde blir utført, sjekker Kubernetes metadataseksjonen for en finalisator. Hvis den finaliseringsdefinerte ressursen ikke kan ødelegges, kan ikke navneområdet avsluttes, noe.

Hvordan kan vi løse dette problemet?

Her er noen enkle måter du enkelt kan følge for å løse problemet:

Å være oppdatert

Først må du sørge for at systemet ditt er oppdatert ved å oppdatere K8s-nodene med den siste utgivelsesversjonen. Noen eldre versjoner har en feil som kan forstyrre Kubelet -tjenesten og forårsake denne feilen.

Start Kubernetes Master -prosessen på nytt

Hvis problemet vedvarer til tross for at du gjør det trinnet som vi nevnte tidligere, kan du prøve å starte Kubernetes Master -prosessen på nytt. Denne prosessen avslutter alle arbeiderprosesser som kan sitte fast. Dette får dem til å gå ut grasiøst uten å forårsake problemer for andre belg.

Gjenskape de sittende podene

Hvis navneområdet forblir fast i denne statusen etter at du har startet hovedprosessen på nytt, er neste trinn å gjenskape de sittende pods. Dette krever å kopiere dem til et annet navneområde og slette de ødelagte belgene i det originale navneområdet. Når du har gjort dette, bør du sørge for at alle de slettede belgene fremdeles kjører riktig i målet. Hvis noen av dem ikke fungerer som de skal, bør du gjenopprette dem. Dette hjelper til med å løse problemet med navneområdet i Kubernetes. Når du har gjort dette, kan du bekrefte at alle containerne dine kjører riktig og at de ødelagte belgene ikke lenger kjører hvor som helst i klyngen.

Å ha tilstrekkelig diskplass tilgjengelig for lagring på klyngen

Hvis det ikke fungerer også, sjekk om det er tilstrekkelig diskplass som er åpen for lagring på klyngen ved å kjøre følgende kommando på en av nodene som er vert for klyngen:

kalsoom@virtualbox> sudo df-kh | grep/var/lib/kubelet

Som navnet indikerer, gir denne kommandoen deg en liste over disker som er montert på systemet ditt, sammen med mengden plass som brukes av hver enhet. Dette kan brukes til å identifisere enhetene som opplever problemer med romallokering og frigjøre ekstra plass på disse enhetene etter behov.

Kjører en apt-get-oppdatering og en komplett systemstart

Hvis dette ikke hjelper til. Dette tvinger pakkeansvarlig til automatisk å sjekke for nye oppdateringer og installere dem. Etter at systemet er startet på nytt, utfør den samme kommandoen som du kjørte for å identifisere alle enheter som går tom for lagringsplass. Når du har identifisert problemet, kan du frigjøre så mye plass som mulig på enheten for å frigjøre litt plass for Kubelet -tjenesten å tildele til navneområdet. Du kan også prøve å bruke de forskjellige lagringsløsningene til klyngen din hvis den underliggende maskinvaren er underkraftig.

Tvinge sletting av navneområdet

Du kan også tvinge til å slette navneområdet ved å gjøre følgende:

kalsoom@virtualbox> namespace = your_namespace_to_delete
Kubectl Proxy &
Kubectl Få navneområde $ Namespace -o Json | JQ '.Spec = "Finalizers": [] '> Temp.JSON
Curl -K -h "Innholdstype: Application/JSON" -X Put --data -Binary @temp.JSON 127.0.0.1: 8001/API/V1/Namespaces/$ namespace/Fullfør

Finalizers -seksjonskomponentene i dette tilfellet blir programmatisk slettet ved hjelp av JQ -funksjonen. Du kan også fullføre det manuelt. Som standard oppretter Kubectl -proxy lytteren på 127.0.0.1: 8001. Du kan kanskje bruke det i stedet hvis du er klar over vertsnavnet og IP -adressen til din klyngemester.

Fjerne finalisatoren

Du kan også fjerne finalisatorspesifikasjonen for å slette navneområdet helt. For å gjøre det, må du fjerne finalisatoren for å slette navneområdet ved å gjøre følgende:


1. Først, dump navneområdet i JSON -format. Koden er gitt som følger:

kalsoom@virtualBox> KUBECTL Få ns -o json> .JSON

2. Deretter redigerer du navneområdet.JSON ved å fjerne “finalisererne” i spesifikasjonen:

"Spec": "Finalizers":,
til:
"Spec": ,

3. Etter det, lapp navneområdet ved å gjøre følgende:

kalsoom@virtualbox> kubectl erstatning -raw "/api/v1/navneområder // Finale" -F .JSON

Konklusjon

Vi forklarte kort saken om at navneområdet ble sittende fast i en avsluttende tilstand. Vi påpekte også mange grunner til at dette kan skje og de nødvendige trinnene vi kan ta for å løse dette problemet. Vi ga all kritisk informasjon om nevnte emne i detalj.