7 bästa metoder för att använda behållare enligt Google

Notera. transl.: Författaren till den ursprungliga artikeln är Théo Chamley, Google Cloud Solutions Architect. I det här inlägget för Google Cloud-bloggen ger han en sammanfattning av sitt företags mer detaljerade guide, kallad "Bästa praxis för att använda containrar" I den samlade Googles experter in bästa praxis för att hantera behållare i samband med användning av Google Kubernetes Engine och mer, och berörde ett brett spektrum av ämnen: från säkerhet till övervakning och loggning. Så, vilka är de viktigaste containerpraxiserna enligt Google?

7 bästa metoder för att använda behållare enligt Google

Kubernetes motor (Kubernetes-baserad tjänst för att köra behållarapplikationer på Google Cloud - cirka. översättning) är ett av de bästa sätten att köra arbetsbelastningar som behöver skalas. Kubernetes kommer att säkerställa en smidig funktion för de flesta applikationer om de är containeriserade. Men om du vill att din applikation ska vara enkel att hantera och vill dra full nytta av Kubernetes måste du följa bästa praxis. De kommer att förenkla driften av applikationen, dess övervakning och felsökning, och även öka säkerheten.

I den här artikeln går vi igenom en lista över saker du bör veta och göra för att köra behållare effektivt på Kubernetes. De som vill gå djupare in på detaljer bör läsa materialet Bästa praxis för att använda containrar, och också uppmärksamma vår tidigare inlägg om montering av containrar.

1. Använd inbyggda containerloggningsmekanismer

Om programmet körs på ett Kubernetes-kluster behövs inte mycket för loggar. Ett centraliserat loggningssystem är sannolikt redan inbyggt i klustret du använder. Vid användning av Kubernetes Engine är detta ansvarigt Stackdriver-loggning. (Notera. transl.: Och om du använder din egen Kubernetes-installation rekommenderar vi att du tittar närmare på vår Open Source-lösning - timmerhus.) Håll ditt liv enkelt och använd inbyggda containerloggningsmekanismer. Skriv loggar till stdout och stderr - de kommer att tas emot, sparas och indexeras automatiskt.

Om så önskas kan du även skriva loggar till JSON-format. Detta tillvägagångssätt kommer att göra det enkelt att lägga till metadata till dem. Och med dem kommer Stackdriver Logging att ha möjlighet att söka igenom loggar med hjälp av denna metadata.

2. Se till att behållarna är tillståndslösa och oföränderliga

För att behållare ska fungera korrekt i ett Kubernetes-kluster måste de vara tillståndslösa och oföränderliga. När dessa villkor är uppfyllda kan Kubernetes göra sitt jobb, skapa och förstöra applikationsenheter när och där det behövs.

Statslös betyder att vilket tillstånd som helst (beständiga data av något slag) lagras utanför behållaren. För detta, beroende på behoven, kan olika typer av extern lagring användas: Cloud Storage, Ihållande skivor, Redis, CloudSQL eller andra hanterade databaser. (Notera. transl.: Läs mer om detta i vår artikel "Operatörer för Kubernetes: hur man kör stateful applikationer. ")

Oföränderlig betyder att behållaren inte kommer att ändras under dess livstid: inga uppdateringar, patchar, konfigurationsändringar. Om du behöver uppdatera din applikationskod eller applicera en korrigeringsfil, skapa en ny bild och distribuera den. Det rekommenderas att flytta containerkonfigurationen (lyssningsport, körtidsmiljöalternativ, etc.) externt - till Secrets и ConfigMaps. De kan uppdateras utan att behöva bygga en ny containerbild. För att enkelt skapa pipelines med bildmontering kan du använda Molnbygge. (Notera. transl.: Vi använder ett verktyg med öppen källkod för dessa ändamål Dapp.)

7 bästa metoder för att använda behållare enligt Google
Ett exempel på uppdatering av distributionskonfigurationen i Kubernetes med ConfigMap monterad i pods som en konfiguration

3. Undvik privilegierade containrar

Du kör inte applikationer som root på dina servrar, eller hur? Om en angripare kommer in i programmet får han root-åtkomst. Samma överväganden gäller för att inte köra privilegierade containrar. Om du behöver ändra inställningarna på värden kan du ge behållaren specifik kapacitet använder alternativet securityContext i Kubernetes. Om du behöver byta sysctls, har Kubernetes separat abstrakt för detta. Försök i allmänhet att göra det bästa av det i det- och sidovagnscontainrar för att utföra liknande privilegierade operationer. De behöver inte vara tillgängliga för vare sig intern eller extern trafik.

Om du administrerar ett kluster kan du använda Pod Säkerhetspolicy för begränsningar av användningen av privilegierade containrar.

4. Undvik att köra som root

Privilegerade behållare har redan diskuterats, men det blir ännu bättre om man utöver detta inte kör applikationer inne i behållaren som root. Om en angripare hittar en avlägsen sårbarhet i en applikation med root-rättigheter som tillåter kodexekvering, varefter han kan lämna behållaren genom en ännu okänd sårbarhet, kommer han att få root på värden.

Det bästa sättet att undvika detta är att inte köra något som root i första hand. För att göra detta kan du använda direktivet USER в Dockerfile eller runAsUser i Kubernetes. Klusteradministratören kan också konfigurera verkställighetsbeteendet med hjälp av Pod Säkerhetspolicy.

5. Gör applikationen lätt att övervaka

Liksom loggning är övervakning en integrerad del av applikationshantering. En populär övervakningslösning i Kubernetes-communityt är Prometheus - ett system som automatiskt upptäcker pods och tjänster som kräver övervakning. (Notera. transl.: Se även vår detaljerad rapport på ämnet övervakning med Prometheus och Kubernetes.) Stackdriver kan övervaka Kubernetes-kluster och inkluderar sin egen version av Prometheus för applikationsövervakning.

7 bästa metoder för att använda behållare enligt Google
Kubernetes Dashboard på Stackdriver

Prometheus förväntar sig att applikationen vidarebefordrar mätvärden till HTTP-slutpunkten. Tillgänglig för detta Prometheus klientbibliotek. Samma format används av andra verktyg som OpenCensus и Samma.

6. Gör appens hälsostatus tillgänglig

Applikationshantering i produktionen underlättas av dess förmåga att kommunicera sitt tillstånd till hela systemet. Körs applikationen? Det är okej? Är du redo att ta emot trafik? Hur beter han sig? Det vanligaste sättet att lösa detta problem är att genomföra hälsokontroller (hälsokontroller). Kubernetes har två typer: levnads- och beredskapssonder.

För livlighetssond (vitalitetskontroller) applikationen måste ha en HTTP-slutpunkt som returnerar ett "200 OK"-svar om det är funktionellt och dess grundläggande beroenden är uppfyllda. För beredskapssond (kontroller av serviceberedskap) applikationen måste ha en annan HTTP-slutpunkt som returnerar ett "200 OK"-svar om applikationen är i ett hälsosamt tillstånd, initieringsstegen har slutförts och en giltig begäran inte resulterar i ett fel. Kubernetes dirigerar endast trafik till behållaren om applikationen är klar enligt dessa kontroller. Två slutpunkter kan slås samman om det inte finns någon skillnad mellan tillstånden för livlighet och beredskap.

Du kan läsa mer om detta i den relaterade artikeln från Sandeep Dinesh, Developer Advocate från Google: "Kubernetes bästa praxis: Konfigurera hälsokontroller med beredskaps- och livenesssonder".

7. Välj din bildversion noggrant

De flesta offentliga och privata bilder använder ett taggningssystem som liknar det som beskrivs i Bästa metoder för att bygga containrar. Om bilden använder ett system nära semantisk versionering, är det nödvändigt att ta hänsyn till detaljerna för taggning. Till exempel tagga latest kan flyttas ofta från bild till bild - kan inte litas på om du behöver förutsägbara och repeterbara konstruktioner och installationer.

Du kan använda taggen X.Y.Z (de är nästan alltid oförändrade), men i det här fallet, håll reda på alla patchar och uppdateringar av bilden. Om bilden du använder har en tagg X.Y, detta är ett bra alternativ för den gyllene medelvägen. Genom att välja det får du automatiskt patchar och litar samtidigt på den stabila versionen av applikationen.

PS från översättaren

Läs även på vår blogg:

Källa: will.com

Lägg en kommentar