7 bÀsta praxis för containerhantering enligt Google

Obs. övers.: Författaren till den ursprungliga artikeln Àr Théo Chamley, arkitekt för molnlösningar pÄ Google. I denna publikation för Google Clouds blogg presenterade han en kort sammanfattning av en mer detaljerad guide frÄn hans företag, kallad "Best Practices for Operating Containers». I den har Googles experter sammanstÀllt bÀsta praxis för drift av containrar i samband med anvÀndningen av Google Kubernetes Engine och mer, berörande ett brett spektrum av Àmnen: frÄn sÀkerhet till övervakning och loggning. SÄ, vilka metoder anser Google vara de viktigaste för arbete med containrar?

7 bÀsta praxis för containerhantering enligt Google

Kubernetes Engine (Kubernetes-baserad tjĂ€nst för att köra containeriserade tillĂ€mpningar i Google Cloud — anm. övers.) — Ă€r ett av de bĂ€sta sĂ€tten att köra arbetsbelastningar som krĂ€ver skalning. Kubernetes Det kommer att sĂ€kerstĂ€lla smidig funktion av de flesta applikationer, förutsatt att de Ă€r containeriserade. Men om du vill att applikationen ska vara lĂ€tt att hantera och vill dra nytta av alla fördelar med Kubernetes, mĂ„ste du följa bĂ€sta praxis. Dessa kommer att förenkla driften av applikationen, dess övervakning och felsökning, samt öka sĂ€kerheten.

I denna artikel kommer vi att gÄ igenom vad man bör veta och göra för att sÀkerstÀlla effektiv funktion av containrar i Kubernetes. För den som vill fördjupa sig i detaljerna rekommenderar vi att lÀsa materialet Best Practices for Operating Containers, samt ta en titt pÄ vÄrt tidigare inlÀgg om container-byggande.

1. AnvÀnd inbyggda mekanismer för containrar för loggning

Om applikationen körs i en Kubernetes-kluster, behövs det inte sĂ„ mycket för loggarna. Ett centralt loggningssystem Ă€r troligtvis redan inbyggt i den anvĂ€nda klustern. Vid anvĂ€ndning av Kubernetes Engine ansvarar Stackdriver Logging. (Obs. övers.: Och vid anvĂ€ndning av en egen installation av Kubernetes rekommenderar vi att du kollar in vĂ„r Open Source-lösning — loghouse.) Komplikera inte ditt liv och anvĂ€nd inbyggda mekanismer för loggning av containrar. Skriv loggar till stdout och stderr — de kommer automatiskt att hĂ€mtas, sparas och indexeras.

Om du vill kan du ocksÄ skriva loggar till JSON-format.. Denna metod gör det enkelt att lÀgga till metadata. Och tillsammans med dem kommer Stackdriver Logging att möjliggöra sökning i loggarna med hjÀlp av dessa metadata.

2. Se till att containrarna Àr stateless och immutabla

För att containrar i ett Kubernetes-kluster ska fungera korrekt mÄste de vara stateless och immutable. NÀr dessa villkor Àr uppfyllda kan Kubernetes utföra sitt arbete genom att skapa och förstöra applikationsenheter nÀr och dÀr det behövs.

Stateless betyder att allt tillstÄnd (permanenta data av nÄgot slag) lagras utanför containern. För detta ÀndamÄl kan olika typer av externa lagringslösningar anvÀndas beroende pÄ behov: Cloud Storage, Persistent Disks, Redis, Cloud SQL eller andra hanterade databaser. (Obs. övers.: LÀs mer om detta i vÄr artikel "Operatörer för Kubernetes: hur man kör stateful-applikationer».)

Immutable betyder att containern inte kommer att modifieras under sin livslĂ€ngd: inga uppdateringar, patchar eller Ă€ndringar i konfigurationen. Om du behöver uppdatera applikationens kod eller applicera en patch, skapa en ny bild och distribuera den. Det rekommenderas att flytta containerns konfiguration (port för lyssning, körmiljöalternativ, osv.) utanför — till Secrets och ConfigMaps. Dessa kan uppdateras utan att behöva bygga en ny containerbild. För att enkelt skapa pipeline för bildbyggande kan man anvĂ€nda Cloud Build. (Obs. övers.: Vi anvĂ€nder ett Open Source-verktyg för dessa Ă€ndamĂ„l dapp.)

7 bÀsta praxis för containerhantering enligt Google
Exempel pÄ att uppdatera en Deployment-konfiguration i Kubernetes med hjÀlp av en ConfigMap som Àr monterad i pods som konfiguration

3. Undvik privilegierade containrar

Du kör vĂ€l inte applikationer under root pĂ„ dina servrar, eller hur? Om en angripare kommer in i applikationen fĂ„r de Ă„tkomst med root-rĂ€ttigheter. Detsamma gĂ€ller för att inte köra privilegierade containrar. Om det krĂ€vs att Ă€ndra instĂ€llningar pĂ„ vĂ€rden kan man ge containern specifika capabilities med alternativet securityContext i Kubernetes. Om det krĂ€vs att Ă€ndra sysctls, har Kubernetes en separat annotation för detta. Överlag, försök att maximalt utnyttja init- och sidecar-containrar för att utföra sĂ„dana privilegierade operationer. De behöver inte vara tillgĂ€ngliga för varken intern eller extern trafik.

Om du administrerar en kluster kan du anvÀnda Pod Security Policy för begrÀnsningar i tillÀmpningen av privilegierade containrar.

4. Undvik att köra som root

Det har redan sagts mycket om privilegierade containrar, men det blir Ànnu bÀttre om du dessutom undviker att köra applikationer under root i containern. Om en angripare hittar en fjÀrrsÄrbarhet med kodexekvering i en applikation som körs med root-rÀttigheter och dÀrmed lyckas ta sig utanför containern genom en Ànnu okÀnd sÄrbarhet, kan de fÄ root-Ätkomst till vÀrden.

Det bÀsta sÀttet att undvika detta Àr att inte köra nÄgot under root frÄn första början. För detta kan du anvÀnda direktivet USER pÄ Dockerfile eller runAsUser i Kubernetes. Klusteradministratören kan ocksÄ konfigurera tvÄngsbeteende med hjÀlp av Pod Security Policy.

5. Gör applikationen lÀtt övervakad

Precis som loggning Ă€r övervakning en oumbĂ€rlig del av applikationshantering. En populĂ€r lösning för övervakning i Kubernetes-gemenskapen Ă€r Prometheus — ett system som automatiskt upptĂ€cker pods och tjĂ€nster som behöver övervakas. (Obs. övers.: Se Ă€ven vĂ„r detaljerade rapport om Ă€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 praxis för containerhantering enligt Google
Kubernetes övervakningspanel i Stackdriver

Prometheus förvÀntar sig att applikationen exponerar metrik pÄ en HTTP-endpoint. För detta finns tillgÀngliga Prometheus klientbibliotek. Ett liknande format anvÀnds av andra verktyg som OpenCensus och Istio.

6. Gör applikationens hÀlsotillstÄnd tillgÀngligt

Hantera en applikation i produktion underlĂ€ttas av dess förmĂ„ga att rapportera sitt tillstĂ„nd till hela systemet. Är applikationen igĂ„ng? Är den i ordning? Är den redo att ta emot trafik? Hur beter den sig? Den vanligaste lösningen för detta problem Ă€r att implementera hĂ€lsokontroller (health checks). Kubernetes har tvĂ„ typer av dessa: liveness och readiness probes.

För liveness probe (livsrÀknare) mÄste applikationen ha en HTTP-endpoint som returnerar svaret '200 OK' om den fungerar och dess grundlÀggande beroenden Àr tillfredsstÀllda. För readiness probe (beredskapskontroll) Applikationen mÄste ha en annan HTTP-endpoint som returnerar svaret "200 OK" om applikationen Àr i ett friskt tillstÄnd, initialiseringsstegen har genomförts och alla korrekta förfrÄgningar inte leder till ett fel. Kubernetes kommer att dirigera trafik till containern endast nÀr applikationen Àr redo enligt dessa kontroller. TvÄ endpoints kan slÄs samman om det inte finns nÄgon skillnad mellan livbarhet (liveness) och beredskap (readiness) tillstÄnd.

Mer om detta kan lÀsas i den relevanta artikeln av Sandeep Dinesh, Developer Advocate frÄn Google: "Kubernetes bÀsta metoder: StÀlla in hÀlsokontroller med beredskaps- och livbarhetsprober».

7. Var noga med att vÀlja rÀtt bildversion

De flesta offentliga och privata bilder anvÀnder ett taggningssystem som liknar det som beskrivs i Best Practices for Building Containers. Om bilden tillÀmpar ett system som liknar semantisk versionering, mÄste man ta hÀnsyn till specifiken i taggningen. Till exempel kan taggen latest ofta flyttas frÄn bild till bild - man kan inte förlita sig pÄ den om man behöver förutsÀgbara och reproducerbara byggnader och installationer.

Du kan anvÀnda taggen X.Y.Z (de Àr nÀstan alltid oförÀndrade), men i sÄ fall, hÄll koll pÄ alla patchar och uppdateringar av bilden. Om den anvÀnda bilden har taggen X.Y, Àr det ett bra kompromissalternativ. Genom att vÀlja det fÄr du automatiskt patchar och förlitar dig samtidigt pÄ en stabil version av applikationen.

P.S. frÄn översÀttaren

LÀs Àven i vÄr blogg:

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