På Agila Sverige 2017 pratade jag om något som vid första anblick kan verka vara ett rent tekniskt ämne: Kubernetes och Docker. Men det jag egentligen ville tala om var relationen mellan agila utvecklingsteam och den driftmiljö de levererar till. Den relationen har länge varit problemfylld, inte på grund av illvilja, utan på grund av att verktygen och abstraktionerna inte riktigt räckt till. Docker och Kubernetes förändrar den ekvationen på ett grundläggande sätt.
Docker löser ett problem som alla som arbetat med mjukvara i mer än ett par år känner igen: diskrepansen mellan utvecklingsmiljön och produktionsmiljön. Den klassiska frasen, det fungerar på min maskin, är inte ett skämt utan ett symptom på en brist i hur vi paketerar och levererar mjukvara. Genom att kapsla in applikationen och alla dess beroenden i en container skapas en portabilitet som tidigare var teoretisk. Samma container kan köras lokalt, i testmiljön och i produktion. Det låter enkelt, men konsekvenserna är djupgående.
Orkestrering i skala
Kubernetes tar det steget vidare genom att erbjuda ett sätt att orkestrera hundratals eller tusentals containrar. Det handlar om skalning, lastbalansering, självläkning och rullande uppdateringar. Men det handlar också om något mer subtilt: ett gemensamt gränssnitt mellan utveckling och drift. Kubernetes ger teamen ett kontrakt. Utvecklarna definierar vad deras applikation behöver. Plattformen ser till att det uppfylls. Gränssnittet är deklarativt och transparent, vilket innebär att båda sidor kan arbeta självständigt utan att ständigt behöva koordinera manuellt.
Det är just det som gör Kubernetes intressant ur ett agilt perspektiv. Det handlar inte bara om teknisk infrastruktur. Det handlar om att undanröja en av de största flaskhalsarna för agila team: beroendet av en separat driftorganisation som arbetar i en annan takt, med andra prioriteringar och andra incitament. När plattformen är tillräckligt mogen kan teamen ta ansvar för hela livscykeln, från kod till produktion, utan att behöva vänta på att någon annan öppnar en port eller konfigurerar en server.
Jag vill dock vara ärlig med att tekniken i sig inte löser allt. Kubernetes är kraftfullt men komplext, och att införa det i en organisation som inte är redo för det kan skapa nya problem snarare än lösa gamla. Som med alla verktyg beror värdet på sammanhanget. Men för organisationer som redan är på väg mot en DevOps-kultur erbjuder Kubernetes och Docker den tekniska brygga mellan utveckling och drift som länge saknats.