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 "». 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?

(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. 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 , samt ta en titt pÄ vÄrt 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 . (Obs. övers.: Och vid anvĂ€ndning av en egen installation av Kubernetes rekommenderar vi att du kollar in vĂ„r Open Source-lösning â .) 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 . 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: , , , eller andra hanterade databaser. (Obs. övers.: LÀs mer om detta i vÄr artikel "».)
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 och . Dessa kan uppdateras utan att behöva bygga en ny containerbild. För att enkelt skapa pipeline för bildbyggande kan man anvĂ€nda . (Obs. övers.: Vi anvĂ€nder ett Open Source-verktyg för dessa Ă€ndamĂ„l .)

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 i Kubernetes. Om det krĂ€vs att Ă€ndra sysctls, har Kubernetes en för detta. Ăverlag, försök att maximalt utnyttja 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 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 .
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 â ett system som automatiskt upptĂ€cker pods och tjĂ€nster som behöver övervakas. (Obs. övers.: Se Ă€ven vĂ„r om Ă€mnet övervakning med Prometheus och Kubernetes.) kan övervaka Kubernetes-kluster och inkluderar sin egen version av Prometheus för applikationsövervakning.

Kubernetes övervakningspanel i Stackdriver
Prometheus förvÀntar sig att applikationen exponerar metrik pÄ en HTTP-endpoint. För detta finns tillgÀngliga . Ett liknande format anvÀnds av andra verktyg som och .
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: .
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: "».
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 . Om bilden tillÀmpar ett system som liknar , 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:
- «»;
- «»;
- «»;
- «» (översikt och video av presentationen);
- «» (översikt och video av presentationen);
- «» (översikt och video av presentationen);
- «» (översikt och video av presentationen);
- «».
KĂ€lla: habr.com
