Pari sanaa ketteryyden, DevOpsin ja Dockerin liitosta Antti Vartiainen 14.10.2016 / AgileJKL meetup
Pari sanaa ketteryyden, DevOpsin ja Dockerin liitosta
Antti Vartiainen
14.10.2016 / AgileJKL meetup
asenne + ? = ketteryys
Mitä on ketteryys?
• Lean (filosofia) -> Agile (metodologia) -> esim. Scrum tai Kanban (menetelmät)
• Ketteryyttä ei voi omaksua ylhäältä päin johdettuna tai käskettynä
• Ei ole kahta samanlaista ketterää tiimiä
• Ketteryys vaatii toteutuakseen menetelmän• ”Kun Scrum epäonnistuu, otetaan avuksi Kanban” – ei hoccuspoccuksia vaikka kokemus on ketterien
menetelmien soveltamisessa vahvuus
• Pelkkä menetelmä edes oikein sovellettuna ei mahdollista onnistumista, vaikka tiimi ja asiakas
olisivat täydellisen sitoutettuja lopputuloksen aikaansaamiseksi
• Ketterät menetelmät vastaavat henkisestä ohjauksesta, mutta tarvitaan myös konkreettisia työkaluja
• Ketteryys on kykyä hallita epävarmuutta• Ketteryys EI ole kristallipalloon katsomista
Rautalangasta väännettynäLEAN
AGILE
SCRUM KANBAN+
DevOps = ketteryyden mahdollistaja
• Tuotantoputken (”build-pipeline”) hallinta (Ops) toteuttajien (Dev) käsissä• versionhallinta (ja käytännöt)
• keskitetty käännösten hallinta (CI/CD)
• konfiguraation hallinta
• deploymenttien hallinta
• monitorointi
• Kaikki on automatisoitavissa – kaikki mikä on mahdollista myös automatisoidaan
• Metriikat – ohjelmistoa tehdään aina lähtökohtaisesti tuotantovalmiina
• Mahdollistaa ketteryyden aspektin joka jää yleensä puheen tasolle – voidaan milloin tahansa mennä tuotantoon kun PO toteaa, että ”enough”
Kuva: Chef.io
DevOps Digialla
• Automatisointi tarkoittaa työvaihdein kuvaamista ”skriptaamalla”• Älä usko DevOps-tuotteisiin
• Ei kahta samanlaista tiimiä tai ympäristöolosuhteita
• Visualisointi tärkeää, kaikki metriikat tukevat myös operatiivista käyttöä
• Ei pelkästään saarnata vaan tehdään• Sisäisiä auditointeja samalla konsultatiivisella lähtökulmalla kuin asiakasauditointeja
• Valmiit referenssitototeutukset ja demottavat ympäristöt esim. Dockerin avulla• ”build pipeline” tunnissa
• Tärkein kysymys lopuksi: mitä on managerointi? Voitaisiinko myös se automatisoida?
”Perinteinen” vs DevOps
Perinteinen DevOps
Yhden ”erän” koko Iso Mikro
Organisaatio Kehitys ja käyttöpalvelu erikseen
Kehitys ja käyttöpalvelu samasta tiimistä
Aikataulutus Keskitetty Hajautettu ja jatkuva
Julkaisu Iso riski Ei riskiä
Kulttuuri ”Älä epäonnistu!” ”Epäonnistu varhain!”
Mittarit Raha ja kapasiteetti Raha, kapasiteetti ja aika
Definition of Done Tein työni Valmis tuotantoon
Perinteinen vs DevOps - työviikko
Kuva: ZeroTurnaround Study from 620 software engineers
Perinteinen vs DevOps – Julkaisuun käytetty aika
Kuva: ZeroTurnaround Study from 620 software engineers
Perinteinen vs DevOps – Järjestelmän toipumiseen käytetty aika
Kuva: ZeroTurnaround Study from 620 software engineers
DevOps = Time To Market –ajan lyhentäminen
Terminologia
Sovellukset
Data
Ajoympäristö
Middleware
OS
Virtualisointi
Palvelimet
Tallennustila
Tietoliikenne
Oma palvelinympäristöA
siak
as v
asta
a
Sovellukset
Data
Ajoympäristö
Middleware
OS
Virtualisointi
Palvelimet
Tallennustila
Tietoliikenne
Pilvipalvelin (IaaS)
Asi
akas
vas
taa
Pal
velu
nta
rjo
aja
vast
aa
Sovellukset
Data
Ajoympäristö
Middleware
OS
Virtualisointi
Palvelimet
Tallennustila
Tietoliikenne
Sovellusalusta (PaaS)
Asi
akas
vas
taa
Pal
velu
nta
rjo
aja
vast
aa
Sovellukset
Data
Ajoympäristö
Middleware
OS
Virtualisointi
Palvelimet
Tallennustila
Tietoliikenne
Sovellus (SaaS)
Pal
velu
nta
rjo
aja
vast
aa
Sovellusalustan avulla kehittäjä voi keskittyä ainoastaan sovelluksen
ja sen tietojen toteuttamiseen. Ei enää tarvetta käyttää aikaa palvelimien, käyttöjärjestelmien,
kuormantasaajien, verkkoympäristön tai konesalien pystyttämiseen ja ylläpitämiseen.
Dockerin koti
Lyhyesti: mikä ovat kontit?
Lähde: https://www.docker.com/whatisdocker/
Virtuaalikoneet
Yksittäinen virtuaalikone sisältää varsinaisen sovelluksen lisäksi täydellisen käyttöjärjestelmä kopion, jonka koko voi olla jopa 10 gigatavua (GB).
Kontit
Konttimoottorin avulla ajettava ”kontti” (eng. container) sisältää ainoastaan sovelluksen ja sen riippuvuudet. ”Kontti” on eristetty prosessi joka jakaa isäntäkäyttöjärjestelmän suoritinytimen muiden mahdollisten konttien kanssa ollen huomattavasti siirrettävämpi ja keveämpi kuin perinteiset virtuaalikoneet.
Raudasta virtuaalikoneisiin ja DockeriinAika ennen 2000-lukua… Konsolidointi virtualisoimalla Sovellusten kontitus
Virtuaalikoneet Docker
Edut tuettuina kaikki käyttöjärjestelmät, minkä tahansa laitteiston emulointi
kevyesti siirrettävät sovellukset ”kontti”-periaatteella, ei välttämättä lisenssikuluja ajoalustasta, nopea jakelu ja operointi, käyttöjärjestelmäresurssien tehokas hyödyntäminen
Haitat virtualisointikerroksen käytössä ”hukkaan kuluvat” resurssit, lisensointi, raskaat käyttöjärjestelmän levynkuvat mistä johtuen hidas jakelu ja operointi
ei tukea vielä kaikille käyttöjärjestelmille, esim. AIX, HP-UX ja Windows 8 tai aiemmat
Mihin Docker sopii ja ei sovi?
• Sopii parhaiten:• Tuotteet, joiden halutaan skaalautuvan ja toimivan alustariippumattomasti
• Kontitetut ”oheistuotteet”, esim. mikropalveluarkkitehtuurin middleware
• Yleensä no-go:• ”single shot” -räätälöityjen sovellusten jakelu suljetussa ympäristössä – ei lisäarvoa – perinteiset
”DevOps-menetelmät” (automatisoitu konfiguraationhallinta ja deploymentit) toimivat yhtä hyvin tai
jopa paremmin
• Toisaalta:• Jos sovellus on hyvin monimutkainen kontittamisen avulla voidaan rakentaa esim.
tuotantoympäristön kaltainen konfiguraatio kehittäjän työasemalle lyhyessä ajassa, voi
kontittaminen olla hyvä ratkaisuvaihtoehto…