VK Medias tekniska plattform: Driften

Detta är andra delen i en inläggsserie där vi kommer beskriva vår tekniska infrastruktur. Första delen, där vi ger en introduktion till vår kodbas, går att hitta här! Idag ska vi fördjupa oss lite kring driften där stora insatser och förändringar har gjorts senaste åren. Häng med!

Tips! Vi söker just nu en SRE/DevOps. Läs mer om tjänsten här: http://vkmedia.se/vk-media-soker-sre-devops/

Docker

De allra flesta av våra applikationer körs idag i Docker containers. Det finns många anledningar till detta, men framförallt två primära. Dels gör Docker det lättare för oss att utveckla på olika plattformar, vilket vi måste kunna göra eftersom vårt gäng består av både Mac- och Linux-folk (samt en Windows-kämpe!), och dels gör Docker att vi kan försäkra oss om en identisk miljö överallt. Vi kan till exempel garantera att vi har samma beroenden på stage som i produktion.

Kubernetes

Som orchestrator använder vi idag Kubernetes. Kubernetes fungerar som ett lager som helt enkelt sköter hanteringen av våra Docker containers, till exempel var containers ska köras och hur mycket resurser de får använda. Eftersom vi driver nyhetssidor som ständigt uppdateras och där trafiken kan variera är det viktigt att vi har tjänster som går att skala och som kan självläka om de kraschar, vilket Kubernetes har bra stöd för. Det är också viktigt att vi kan uppdatera våra sidor utan down time. Vi använde tidigare Docker Deamon som orchestrator, men där upplevde vi problem med att Docker Deamon ibland kunde hänga sig, vilket gjorde det omöjligt att komma åt eller uppdatera containers. Efter bytet till Kubernetes har vi inte stött på några sådana problem.

Prometheus

Prometheus är en tidsseriedatabas som vi använder för att spara metrics för hur våra applikationer beter sig över tid. Några exempel på metrics som vi vill hålla koll på är CPU, RAM och antal requests till våra applikationer. Vi har även en alert manager som är kopplad till våra metrics. Via denna kan vi bli notifierade på Slack om något inte står rätt till.

Grafana

Via dashboards i Grafana kan vi visualisera data från Prometheus för att kunna överblicka till exempel responstider, cache hit rate, requests per sekund samt användning av CPU och minne.

Exempel på visualisering av data från Prometheus via Grafana.

Releaseflöde och versionshantering

Vi har de flesta av våra tjänster och bibliotek samlade i ett monorepo. När någon gör en PR mot master kommer vårt CI-system automatiskt köra tester och linting för de tjänster och bibliotek som påverkas av uppdateringen. Vid en merge till master kommer en automatisk deploy till vår stagemiljö genomföras. När den är gjord kommer ansvarig användare notifieras på Slack om uppdateringen, och hen kan därefter skicka ut uppdateringen till produktion via ett kommando.

Vid uppdateringar kommer vår depolybot hämta nödvändig konfiguration från ett repository där där vi definierar sådant som rör vår infrastruktur, både för stage och produktion. I samma repository har vi också konfigurationen för alla våra larm samt uppsättningen av våra dashboards i Grafana. Att kunna versionshantera denna typ av konfiguration och kunna göra uppdateringar via vanliga PR:s har varit väldigt användbart.

Framtiden

Även om vi har kommit en lång bit på vägen när det gäller en stabil, skalbar och flexibel driftmiljö finns det såklart fortfarande saker kvar att göra. Vi jobbar kontinuerligt med med att flytta våra gamla tjänster som fortfarande körs på virtuella maskiner till Kubernetes. Något vi också skulle vilja jobba mer med är automatiskt skalning istället för manuell skalning. Våra tjänster är idag enkla att skala, men oftast kräver detta manuell handpåläggning, vilket ibland kan vara ett problem i nyhetsvärlden där saker händer snabbt. Under förra veckans omfattande strömavbrott i Umeå fick vi till exempel på bara några minuter ett enormt trafikpåslag, vilket orsakade problem för våra sidor innan vi hann skala upp. Här hade autoskalning kunnat lösa vissa problem.

Vi hoppas också på att kunna stärka upp vårt team när det gäller just driften och vi söker just nu en SRE/DevOps. Läs mer här! http://vkmedia.se/vk-media-soker-sre-devops/

Slutligen, stort tack till Kim Nilsson som bidragit med sina skills till detta blogginlägg!