
En viktig aspekt av distribuerade system Àr hanteringen av fel. Kubernetes hjÀlper till med detta genom att anvÀnda kontroller som övervakar tillstÄndet hos ditt system och startar om nedlagda tjÀnster. Men Kubernetes kan tvÄngsstÀnga dina applikationer för att sÀkerstÀlla systemets övergripande livskraft. I den hÀr serien kommer vi att se hur man kan hjÀlpa Kubernetes att utföra sitt arbete mer effektivt och minska driftstopp för applikationer.
Innan anvÀndningen av containrar körde de flesta applikationer pÄ virtuella eller fysiska maskiner. Om en applikation kraschade eller frös tog det lÄng tid att avbryta den pÄgÄende uppgiften och ladda om programmet. I vÀrsta fall fick nÄgon lösa problemet manuellt mitt i natten, vid mest olÀmplig tid. Om en viktig uppgift utfördes av endast 1-2 arbetsmaskiner var en sÄdan krasch helt oacceptabel.
DÀrför började man anvÀnda processövervakning för automatisk omstart av applikationen vid krasch istÀllet för manuell omstart. Om programmet kraschar fÄngar övervakningsprocessen exit-koden och startar om servern. Med system som Kubernetes har denna typ av respons pÄ systemfel enkelt integrerats i infrastrukturen.
Kubernetes anvĂ€nder en hĂ€ndelseloop av 'övervakning â registrering av skillnader â Ă„tgĂ€rd' för att sĂ€kerstĂ€lla att resurser förblir operativa pĂ„ vĂ€gen frĂ„n containrar till sjĂ€lva noderna.

Detta innebÀr att du inte lÀngre behöver manuellt starta processövervakning. Om en resurs inte klarar av Health Check kontrollerar Kubernetes helt enkelt automatiskt och ger den en ersÀttning. Samtidigt gör Kubernetes mycket mer Àn bara att övervaka dina applikationer för fel. Det kan skapa fler kopior av applikationen för att köras pÄ flera maskiner, uppdatera applikationen, eller köra flera versioner av din applikation samtidigt.
Det finns dÀrför mÄnga anledningar till att Kubernetes kan avbryta en helt frisk container. Till exempel, om du uppdaterar din distribution kommer Kubernetes lÄngsamt att stoppa gamla pods samtidigt som nya startas. Om du stÀnger av en nod kommer Kubernetes att stoppa alla pods i den noden. Slutligen, om en nod fÄr slut pÄ resurser, kommer Kubernetes att stÀnga av alla pods för att frigöra dessa resurser.
Det Àr dÀrför mycket viktigt att din applikation stÀnger ner med minimal pÄverkan pÄ slutanvÀndaren och minimal ÄterstÀllningstid. Det innebÀr att innan avstÀngningen bör den spara all data som behöver sparas, stÀnga alla nÀtverksanslutningar, slutföra kvarvarande arbete och se till att andra brÄdskande uppgifter utförs.
I praktiken innebĂ€r detta att din applikation mĂ„ste kunna hantera signalen SIGTERM â en processavslutningssignal som Ă€r standard för kill-verktyget i Unix-liknande operativsystem. NĂ€r applikationen tar emot detta meddelande ska den avslutas.
NÀr Kubernetes har beslutat att avsluta en pod intrÀffar en rad hÀndelser. LÄt oss gÄ igenom varje steg som Kubernetes tar vid nedstÀngning av en container eller pod.
Anta att vi vill avsluta en av pods. Vid denna tidpunkt kommer den att sluta ta emot ny trafik â de körande containrarna i podden kommer inte att pĂ„verkas, men all ny trafik kommer att blockeras.

LĂ„t oss ta en titt pĂ„ preStop-hooken â detta Ă€r ett specialkommando eller HTTP-förfrĂ„gan som skickas till containrarna i en pod. Om din applikation inte stĂ€nger av korrekt vid mottagandet av SIGTERM kan du anvĂ€nda preStop för en korrekt avstĂ€ngning.

De flesta program avslutar sin verksamhet korrekt nÀr de fÄr SIGTERM-signalen, men om du anvÀnder tredje parts kod eller nÄgot system som du inte helt kan kontrollera, Àr preStop-hooken ett utmÀrkt sÀtt att Ästadkomma en smidig avstÀngning utan att Àndra applikationen.
Efter att denna hook har körts kommer Kubernetes att skicka en SIGTERM-signal till containrarna i podden, vilket meddelar dem att de snart kommer att stÀngas av. NÀr de fÄr denna signal kommer din kod att övergÄ till avstÀngningsprocessen. Denna process kan inkludera att stÀnga av eventuella lÄnglivade anslutningar, sÄsom en databasanslutning eller WebSocket-ström, spara det aktuella tillstÄndet och liknande.
Ăven om du anvĂ€nder preStop-hucken Ă€r det mycket viktigt att kontrollera vad som hĂ€nder med din applikation nĂ€r du skickar den en SIGTERM-signal, hur den beter sig, sĂ„ att hĂ€ndelser eller förĂ€ndringar i systemets drift orsakade av nedstĂ€ngningen av podden inte kommer som en överraskning för dig.
Vid denna tidpunkt, innan nÄgra ytterligare ÄtgÀrder vidtas, kommer Kubernetes att vÀnta under en angiven tid, kallad terminationGracePeriodSecond, eller perioden för korrekt avstÀngning vid mottagandet av SIGTERM-signalen.

Som standard Ă€r denna period 30 sekunder. Det Ă€r viktigt att notera att den pĂ„gĂ„r parallellt med preStop-hucken och SIGTERM-signalen. Kubernetes kommer inte att vĂ€nta pĂ„ att preStop-hucken och SIGTERM slutförs â om din applikation avslutar sig innan terminationGracePeriod har löpt ut, gĂ„r Kubernetes omedelbart vidare till nĂ€sta steg. Kontrollera dĂ€rför att vĂ€rdet pĂ„ denna period i sekunder inte Ă€r mindre Ă€n den tid som krĂ€vs för en korrekt avstĂ€ngning av podden, och om det överstiger 30 sekunder, öka perioden till önskad lĂ€ngd i YAML. I det angivna exemplet Ă€r det 60 sekunder.
Och slutligen, det sista steget â om containrarna fortfarande körs efter att terminationGracePeriod har löpt ut, kommer de att skicka en SIGKILL-signal och bli tvingat borttagna. Vid denna tidpunkt kommer Kubernetes ocksĂ„ att rensa ut alla andra objekt i podden.

Kubernetes stÀnger av poddar av mÄnga skÀl, sÄ se till att ditt program avslutas korrekt under alla omstÀndigheter för att sÀkerstÀlla att tjÀnsten fortsÀtter att fungera stabilt.

Lite reklam đ
Tack för att ni stannar kvar hos oss. Gillar ni vÄra artiklar? Vill ni se fler intressanta material? Stöd oss genom att göra en bestÀllning eller rekommendera oss till era vÀnner, , en unik motsvarighet till entry-level servrar som vi har skapat för er: (alternativ med RAID1 och RAID10 finns tillgÀngliga, upp till 24 kÀrnor och upp till 40GB DDR4).
Dell R730xd Ă€r tvĂ„ gĂ„nger billigare i datacentret Equinix Tier IV i Amsterdam? Bara hos oss i NederlĂ€nderna! Dell R420 â 2x E5-2430 2.2Ghz 6C 128GB DDR3 2x960GB SSD 1Gbps 100TB â frĂ„n $99! LĂ€s om
KĂ€lla: habr.com
