BÀsta praxis för Kubernetes. Kontroll av Kubernetes livskraft med hjÀlp av Readiness- och Liveness-tester

BÀsta praxis för Kubernetes. Skapa smÄ containrar
BÀsta praxis för Kubernetes. Organisera Kubernetes med namnrymder

BÀsta praxis för Kubernetes. Kontroll av Kubernetes livskraft med hjÀlp av Readiness- och Liveness-tester

Det kan vara svÄrt att hantera distribuerade system eftersom de innehÄller mÄnga rörliga och förÀnderliga komponenter, och alla mÄste fungera korrekt för att systemets funktionalitet ska upprÀtthÄllas. Om en av komponenterna gÄr sönder, mÄste systemet upptÀcka, kringgÄ och ÄtgÀrda den, och allt detta behöver ske automatiskt. I denna serie av "Kubernetes Best Practices" kommer vi att lÀra oss hur man konfigurerar Readiness- och Liveness-tester för att verifiera livskraften hos Kubernetes-klustret.

Health Check Àr ett enkelt sÀtt att lÄta systemet veta om din applikationsinstans fungerar eller inte. Om din applikationsinstans Àr nere bör andra tjÀnster inte kontakta den eller skicka förfrÄgningar till den. IstÀllet bör förfrÄgningar skickas till en annan applikationsinstans som redan Àr igÄng eller kommer att startas senare. Dessutom bör systemet Äterföra den förlorade funktionen till din applikation.

Som standard börjar Kubernetes skicka trafik till en pod nÀr alla behÄllare inuti podden har startat och omstartar behÄllare nÀr de kraschar. För en början kan detta förvalda beteende av systemet vara tillrÀckligt bra, men du kan öka tillförlitligheten i din produkts distribution genom att anvÀnda anpassade livskontroller.

BÀsta praxis för Kubernetes. Kontroll av Kubernetes livskraft med hjÀlp av Readiness- och Liveness-tester

Lyckligtvis gör Kubernetes detta ganska enkelt, sÄ det finns inga ursÀkter för att ignorera sÄdana kontroller. Kubernetes erbjuder tvÄ typer av Health Check-tester, och det Àr viktigt att förstÄ skillnaderna i tillÀmpning av var och en.

Readiness-testet Àr avsett att informera Kubernetes om din applikation Àr redo att hantera trafik. Innan tjÀnsten tillÄter att skicka trafik till podden mÄste Kubernetes sÀkerstÀlla att Readiness-testet har lyckats. Om Readiness-testet misslyckas kommer Kubernetes att sluta skicka trafik till podden tills testen lyckas.

Liveness-testet informerar Kubernetes om din applikation Àr levande eller död. I det första fallet kommer Kubernetes att lÀmna den i fred, och i det andra fallet kommer den döda podden att tas bort och ersÀttas med en ny.

LÄt oss förestÀlla oss ett scenario dÀr din applikation behöver 1 minut för att "vÀrmas upp" och startas. Din tjÀnst kommer inte att börja fungera förrÀn applikationen Àr helt laddad och igÄng, Àven om arbetsflödet redan har börjat. Och du kommer ocksÄ att stöta pÄ problem om du vill skala denna distribution till flera kopior, eftersom dessa kopior inte bör ta emot trafik förrÀn de Àr helt klara. Men som standard kommer Kubernetes att börja skicka trafik sÄ snart processerna inuti containern startar.

NÀr du anvÀnder Readiness-testet kommer Kubernetes att vÀnta tills applikationen Àr helt igÄng, och först dÄ tillÄter tjÀnsten att skicka trafik till den nya kopian.

BÀsta praxis för Kubernetes. Kontroll av Kubernetes livskraft med hjÀlp av Readiness- och Liveness-tester

LÄt oss förestÀlla oss ett annat scenario dÀr applikationen hÀnger ett tag och slutar behandla förfrÄgningar. Eftersom processen fortsÀtter att köra kommer Kubernetes som standard att tro att allt Àr i sin ordning och fortsÀtta att skicka förfrÄgningar till den icke-fungerande podden. Men med hjÀlp av Liveness kommer Kubernetes att upptÀcka att applikationen inte lÀngre behandlar förfrÄgningar och automatiskt starta om den icke-fungerande podden.

BÀsta praxis för Kubernetes. Kontroll av Kubernetes livskraft med hjÀlp av Readiness- och Liveness-tester

LĂ„t oss titta pĂ„ hur beredskap och livskraft testas. Det finns tre sĂ€tt att testa — HTTP, Command och TCP. Du kan anvĂ€nda vilket som helst för verifiering. Det vanligaste sĂ€ttet för anvĂ€ndartest Ă€r HTTP-prob.

Även om din applikation inte Ă€r en HTTP-server kan du Ă€ndĂ„ skapa en lĂ€ttvikts-HTTP-server inuti din applikation för att interagera med Liveness-testet. DĂ€refter kommer Kubernetes att börja pinga podden, och om HTTP-svaret ligger inom intervallet 200 eller 300 ms kommer det att betyda att podden Ă€r "frisk". Annars kommer modulen att mĂ€rkas som "sjuk".

BÀsta praxis för Kubernetes. Kontroll av Kubernetes livskraft med hjÀlp av Readiness- och Liveness-tester

För tester med Command kör Kubernetes ett kommando inuti din container. Om kommandot returnerar med en noll exitskod kommer containern att mÀrkas som frisk, annars, om den fÄr ett exitsstatusnummer frÄn 1 till 255, kommer containern att mÀrkas som "sjuk". Denna typ av testning Àr anvÀndbar om du inte kan eller inte vill köra en HTTP-server, men kan köra ett kommando som kontrollerar "hÀlsan" i din applikation.

BÀsta praxis för Kubernetes. Kontroll av Kubernetes livskraft med hjÀlp av Readiness- och Liveness-tester

Den sista kontrollmetoden Ă€r en TCP-test. Kubernetes kommer att försöka upprĂ€tta en TCP-anslutning pĂ„ den angivna porten. Om det lyckas anses containern vara frisk, om inte – ofungerande. Denna metod kan vara anvĂ€ndbar om du anvĂ€nder ett scenario dĂ€r testning med HTTP-förfrĂ„gningar eller kommandon inte fungerar sĂ„ bra. Till exempel, de primĂ€ra tjĂ€nsterna för att kontrollera med TCP kommer att vara gRPC eller FTP.

BÀsta praxis för Kubernetes. Kontroll av Kubernetes livskraft med hjÀlp av Readiness- och Liveness-tester

Tester kan konfigureras pĂ„ flera sĂ€tt med olika parametrar. Du kan ange hur ofta de ska köras, vad trösklarna för framgĂ„ng och misslyckande ska vara, samt hur lĂ€nge du ska vĂ€nta pĂ„ svar. Mer detaljerad information finns i dokumentationen för Readiness och Liveness-tester. Det finns dock en mycket viktig punkt i konfigurationen av Liveness-testet – den initiala fördröjningen för testningen, initialDelaySeconds. Som jag nĂ€mnde kan ett misslyckat utförande av detta test leda till att modulen startas om. DĂ€rför mĂ„ste du se till att testningen inte börjar förrĂ€n applikationen Ă€r redo att köras, annars kommer den att börja startas om cykliskt. Jag rekommenderar att anvĂ€nda P99-starttiden eller genomsnittlig starttid för applikationen frĂ„n bufferten. Glöm inte att justera detta vĂ€rde i takt med att starttiden för din applikation blir snabbare eller lĂ„ngsammare.

De flesta specialister kommer att bekrÀfta att Health Check Àr en obligatorisk kontroll för alla distribuerade system, och Kubernetes Àr inget undantag. AnvÀndningen av "hÀlsokontroller" för tjÀnster sÀkerstÀller pÄlitlig och felfri drift av Kubernetes och innebÀr ingen anstrÀngning för anvÀndarna.

FortsÀttningen kommer snart...

Spela video

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, moln-VPS för utvecklare frÄn $4,99, en unik motsvarighet till entry-level servrar som vi har skapat för er: Allt om VPS (KVM) E5-2697 v3 (6 Cores) 10GB DDR4 480GB SSD 1Gbps frÄn $19 eller hur man korrekt delar en server? (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 2 x Intel TetraDeca-Core Xeon 2x E5-2697v3 2.6GHz 14C 64GB DDR4 4x960GB SSD 1Gbps 100TB frĂ„n $199 i NederlĂ€nderna! Dell R420 — 2x E5-2430 2.2Ghz 6C 128GB DDR3 2x960GB SSD 1Gbps 100TB — frĂ„n $99! LĂ€s om Hur man bygger en företagsinfrastruktur med Dell R730xd E5-2650 v4-servrar som kostar 9000 euro för en brĂ„kdel?

KĂ€lla: habr.com

Köp pĂ„litlig webbhotell med DDoS-skydd, VPS VDS-servrar đŸ”„ Köp pĂ„litlig webbhotell med DDoS-skydd, VPS VDS-servrar | ProHoster