DevOps ja pilviympäristöt

Kumpi tuli ensin, DevOps liiketoiminnan digitalisaation moottorina pilvipalvelujen kautta vai pilviympäristöt kiihdyttämässä DevOpsin käyttöönottoa modernissa IT:ssä?
Käytännössä tällä ei ole välttämättä kauheasti merkitystä; DevOpsin ja pilvipalvelujen vahva synergia on ollut avainasemassa rakennettaessa kestävää IT-arkkitehtuuria ja -toimintamalleja jo pitkään. Aikajärjestyksen sijaan onkin olennaisempaa ymmärtää, miksi on välttämätöntä edistää DevOps-metodologiaa, erityisesti pilviympäristöissä työskenneltäessä.

DevOps ja pilviympäristöt

Mitä on DevOps ja miksi sillä on merkitystä?

Monien muiden käsitteiden tavoin myöskään DevOpsille ei ole eksaktia virallista määritelmää. Klassinen määritelmä olisi, että DevOps on joukko parhaita käytäntöjä ja toimintatapoja, joissa yhdistyvät tehokkaat ohjelmistokehityksen työkalut ja menetelmät sekä moderni ketterä kehitystapa tekemisen taustalla.

Tällainen määritelmä ei kuitenkaan kerro koko totuutta DevOps-kulttuurin merkityksestä ja hyödyistä, joten aiheeseen on syytä pureutua syvemmälle.

DevOps ei ole joukko erillisiä teknologioita, vaan yhdistelmä parhaita käytäntöjä: kehitysprosessien virtaviivaistamisen filosofia, jossa ohjelmiston backlog pyritään rakentamaan mahdollisimman kitkattomasti ja laadukkaasti.

Toisaalta jotkut pitävät DevOpsia eräänlaisena ketterän ohjelmistokehityksen evoluutiona, koska sen periaatteet sopivat hyvin agileen. Molemmat pyrkivät tuottamaan lisäarvoa nopeasti ja tehokkaasti sekä poistamaan kehitys- ja asiakastiimien väliset raja-aidat.

Miksi DevOpsilla on merkitystä pilviympäristöissä työskenneltäessä?

Pilvipalvelut ovat tulleet IT-ympäristöihin ja projekteihin viime vuosina kiihtyvällä tahdilla. Pilviteknologialla on niin monia etuja, että niitä on venää mahdotonta jättää huomiotta. Tällä hetkellä käynnissä on kuitenkin toinen yhtä vahva ja perustavanlaatuinen trendi: pilvinatiivit sovellukset.

Esimerkiksi ole mikään salaisuus, että Kubernetes on nostanut mikropalveluiden hyödynnettävyyden uudelle tasolle. Toisena esimerkkinä, myös nopeasti kasvava Cloud Native Computing Foundation (CNCF) ‑projekti osoittaa, että pilvinatiivit sovellukset ovat tulleet jäädäkseen. Listaa voisi jatkaa hyvin koko blokikirjoituksen loppuun saakka, mutta voidaan todeta, että yhä suurempi osa ohjelmakoodista ei ainoastaan ole pilvi-infran päällä, vaan se on myös toteutettu pilvinatiiveilla teknologioilla.

Tämän seurauksena DevOpsin tärkeys korostuu merkittävästi.

DevOps auttaa yksinkertaistamaan ja nopeuttamaan kehitysprosesseja. Toisin sanoen pilvinatiivit sovellukset ja DevOps täydentävät toisiaan täydellisesti, kun toinen tarjoaa kaikki ne työkalut, joita toinen tarvitsee prosessiensa tehostamiseksi.

Monille softatoimittajille monet näistä toimintamalleista tai kehitysprosesseista kuten Continuous Deliver / Integration, pipelinet, automaatiot jne ovat arkipäivää. On kuitenkin huomattava että erityisesti monitoimittajaympäristöissä asiakkaan oma osaaminen korostuu. Vaikka toimittajissakin on eroja, niin monesti, kuten sanottu, useat DevOps käytännöt ovat tällä puolella pöytää lähes itsestäänselvyyksiä.
Kuitenkin on hyvä muistaa, että eri toimialojen ja yritysten maturiteettitasot vaihtelevat radikaalisti, ja monet perustoimintamallitkin ovat vielä odottamassa implementointia.

"Pilvinatiivit sovellukset ja DevOps täydentävät toisiaan täydellisesti, kun toinen tarjoaa kaikki ne työkalut, joita toinen tarvitsee prosessiensa tehostamiseksi."

DevOpsin ja pilvipalvelujen erot

Vaikka pilvipalvelujen ja DevOpsin välillä onkin merkittävä synergia, ne eivät kuitenkaan ole yksi ja sama asia. Päinvastoin: DevOps ja pilvipalvelut täydentävät toisiaan hieman eri kulmista.

Pilvipalvelut: Pilvipalveluja voidaan yksinkertaistettuna ajatella laitteisto- ja ohjelmistoresursseina, jotka ovat käytettävissä tarvittaessa, ajasta ja paikasta riippumattomasti korkeasti saavutettuina keskitetyistä konesaleista.

  • Pilvipalveluteknologian tavoitteena on toteuttaa liiketoiminnan tarvitsema infrastruktuuri.
  • Pilviympäristöt ovat jo luonteensa vuoksi joustavia. Niitä voidaan siis tarvittaessa skaalata ja muokata reaaliaikaisesti.
  • Pilvi-infrastruktuuri voidaan ottaa käyttöön minuuteissa ja niiden hallinnan abstraktio- ja automaatiotaso tehostaa tekemistä

DevOps: DevOpsissa on kyse ohjelmistokehitysprosessin nopeuttamisesta ja siihen liittyvistä käytännöistä.

  • DevOps on joukko toimintatapoja; ei tietty teknologia, joka voidaan hankkia tai asentaa käyttöön.
  • DevOps hyödyntää monia eri työkaluja, jotka voivat olla pilvipohjaisia.
  • DevOpsin toteuttamisessa on enemmän kyse matkasta kuin määränpäästä. Se on jatkuvasti kehittyvä prosessi, joten organisaatiosta riippuen saattaa kestää jonkin aikaa ennen kuin hyödyt ovat nähtävissä.

Pilvipalvelujen rooli DevOpsissa

Kuten sanottua, pohjimmiltaan DevOpsissa on kyse prosessien kehittämisestä. Tämän tavoitteen kannalta on sitä parempi, mitä useampia prosesseja voidaan automatisoida. Automatisoinnin ansiosta kehittäjät voivat nopeammin ottaa käyttöön ohjelmistoja, minimoida inhimilliset virheet ja parantaa turvallisuutta monien muiden hyötyjen ohella. Kehittäjät eivät kuitenkaan ole ainoita, jotka hyötyvät automaatiosta. Esimerkiksi it-tiimit hyötyvät suuresti siitä, ettei jokaista laitetta tarvitse provisioida ja konfiguroida manuaalisesti.

Devopsin perusperiaatteita

Sovelluskohtainen infrastruktuuri. Yksi pilviympäristöjen merkittävimmistä hyödyistä on mahdollisuus käyttää sovelluskohtaista infrastruktuuria. Ajoalustan käyttöönotto tai vaikkapa raskaan suoritinkäytön optimointi voidaan tehdä muutamalla klikkauksella graafisesta käyttöliittymästä(tai toki myös CLI-työkalulla). Sovelluskohtaisella räätälöinnillä mahdollistetaan helposti mukautettavan infrastruktuurin käyttö sovelluksessa yleispätevän ratkaisun asemesta, jossa resursseja menee usein hukkaan.

Pilvi-infrastruktuurin automatisointi. Aikanaan jokainen palvelin piti provisioida manuaalisesti. Nykyään pilvi-infrastruktuurin hankkiminen on niin edullista ja joustavaa, että DevOps-tiimeillä ei juuri ole tarvetta käyttää on-premise infrastruktuuria. Lisäksi Terraform, Juju, Ansible ja monet muut työkalut antavat sekä kehittäjille että cloud-tiimeille mahdollisuuden hyötyä provisioinnin ja konfiguroinnin automatisoinnista IaC-palvelujen (infrastruktuuri koodina) kautta. Kun mikropalvelut ja pilvinatiivit sovellukset alkavat nyt olla normiratkaisuja, on mahdollista hankkia esiasennettuna vaikkapa erilaisia Kubernetes-konfiguraatioita, jolloin sovellus voidaan käynnistää lähes välittömästi.

CI/CD-automaatio. Epäilemättä yksi suurimmista hyödyistä, joita pilviympäristöt tuovat DevOpsille, on mahdollisuus ottaa helposti käyttöön jatkuvan integroinnin ja julkaisun CI/CD-käytäntöjä. Erilaiset alustat, kuten esimerkiksi Jenkins, Travis CI, Circle CI, GitLab ja AWS CodePipeline, mahdollistavat sen, että kehitys- ja käyttötiimit voivat työskennellä yhdessä sovellusten rakentamisen, testauksen ja käyttöönoton automatisoimiseksi.

Yhteistyön työkalut. Yksi DevOpsin perusperiaatteista on yhteistyö. Sitä varten on olemassa suuri valikoima pilvipohjaisia palveluita, joiden tarkoitus on tehdä tiimien välisestä yhteistyöstä helppoa ja tehokasta. Projektinhallinnan työkalut, tiedostonjakopalvelut ja Slackin kaltaiset viestintätyökalut ovat mahdollistaneet tiimien välisen yhteistyön ennennäkemättömällä tavalla. Mikä parasta, pilvipohjaisten palvelujen ansiosta tiimin jäsenten ei tarvitse olla fyysisesti lähellä toisiaan, mikä on erittäin hyödyllistä näinä aikoina, ja monien ohjelmistojen välille tarjotaan out-of-the-box-integraatioita.

Analysointi- ja seurantatyökalut. Yksi DevOpsin lupauksista on parantaa sovellusten ja palveluiden tietoturvaa. Edistyneet seuranta- ja analysointityökalut, kuten Prometheus, Grafana, Nagios, InfluxData, Gradle ja muut ratkovat nimenomaan tätä osa-aluetta. Näiden työkalujen ansiosta on monissa tapauksissa mahdollista ennaltaehkäistä ongelmia ennen niiden ilmaantumista tai, jos ongelmia ilmenee, analysoida ne nopeasti niin, että käyttökatkot jäävät mahdollisimman lyhyiksi.

Edellä mainitut ovat vain muutamia pilvipalvelujen mahdollistamista työkaluista. Vaikka kyseiset työkalut eivät olekaan välttämättömiä DevOps-metodologian toteuttamiseksi, ne helpottavat DevOps-prosessin eri vaiheita niin kehitys- kuin käyttötiimienkin osalta.

Mitkä ovat DevOpsin hyödyt pilvessä?

Pilviympäristöt mahdollistavat tekniikan ja palvelut, joita tarvitaan liiketoiminnan digitalisoinnissa. Kaikkien hyötyjen saamiseksi tarvitaan kuitenkin tehokkaita ja luotettavia prosesseja.

Juuri tässä suhteessa DevOps tuo merkittävää lisäarvoa pilviympäristöjen yhteydessä.

Suurempi autonomia. Perinteisesti kehittäjät ovat joutuneet odottamaan, että infratiimi tarjoaa heille tarvittavan infrastruktuurin testaukseen. Tämä on väistämättä luonut kitkaa ja tehottomuutta tiimien välille. Molemmat osapuolet ovat pitäneet tätä prosessia ajanhukkana – kehittäjät siksi, että ovat joutuneet odottamaan, ja infratiimit siksi, että heidän on täytynyt provisioida ja konfiguroida infrastruktuuri jokaista käyttötapausta varten erikseen. DevOps muuttaa tilannetta ratkaisevasti antamalla kehittäjille mahdollisuuden luoda ja provisioida infrastruktuuri itse hyödyntämällä saatavilla olevia IaC-työkaluja. Entinen jakautunut tilanne muuttuu näin molemmille tiimeille tilaisuudeksi yhdistää tietonsa infrastruktuurista, tietoturvasta ja oikean pilviympäristön luomiseen tarvittavasta koodista.

Tehostunut yhteistyö. Pilviteknologia mahdollistaa paremman yhteistyön eri tasoilla. Versionhallinta-alustat, kuten GitHub, GitLab ja Bitbucket, ovat olennainen osa kehittäjien välistä yhteistyöprosessia. Lisäksi pilven tarjoaman joustavuuden ansiosta kehittäjä- ja infratiimit voivat työskennellä rinnakkain sen sijaan, että ne työskentelisivät itsenäisesti tai – mikä pahempaa – mahdollisesti tahoillaan toisille epäoptimaalisia asioita tehden. Seurauksena on nopeampi edistyminen, kun tietokatkoksista johtuva tehottomuus poistuu. Lisäksi kehittäjät voivat esimerkiksi tukea infratiimejä parantamalla automaatiokoodia, ja infratiimit voivat hyödyntää infrastruktuuriosaamistaan testausympäristöjen tehostamiseksi.

Tiheämpi julkaisusykli. DevOpsin tavoitteena on tehdä enemmän lyhyemmässä ajassa. Siinä mielessä edellä mainitut automaatiotyökalut ovat täydellinen keino saavuttaa tämä päämäärä. Jokainen automatisoitu prosessi lyhentää tuotteiden ja palveluiden käyttöönottoon kuluvaa aikaa. Jopa kaikkein monimutkaisimmatkin prosessit voidaan automatisoida tarvittaessa toistettavuuden lisäämiseksi. Tämä vähentää inhimillisiä virheitä ja parantaa lopputuotteen laatua.

Yksinkertaisuus. Automaation lisäetuna on, että se vähentää projektin monimutkaisuutta. Monimutkaisen projektin pilkkominen paremmin hallittaviin prosesseihin on hyödyllistä, mutta vielä parempi on automatisoida nuo prosessit. Koska kehittäjillä on tapana käyttää koodia uudelleen, uuden projektin haasteiden ratkaisut voivat helpottaa jonkin toisen projektin valmistumista tulevaisuudessa. Toisin sanoen DevOps-toimintamalli tarjoaa keinot monimutkaisuuden hallitsemiseksi, ja pilviympäristöt puolestaan tarjoavat välineet työn tekemiseksi.

Parempi tietoturva. Yksinkertaisempi sovellus, jossa on helpommin hallittavat komponentit, on huomattavasti kestävämpi ja turvallisempi. DevOps ja pilvipalvelut yhdessä mahdollistavat kuitenkin paljon muutakin. Jatkuvaan integrointi- ja käyttöönottoprosessiin voidaan sisällyttää automaattinen tietoturvatestaus koodin validoimiseksi ennen julkaisua. Se merkitsee lisäturvaa, kun pyritään suojaamaan sovelluksia uusilta uhilta.

Parempi skaalautuvuus. Yksi pilviympäristöjen vahvuuksista on epäilemättä niiden skaalautuvuuspotentiaali. Resurssien skaalautuvuus ei kuitenkaan ole sama asia kuin kehitysprosessin skaalautuvuus. Toisin sanoen, vaikka yrityksellä olisi kuinka paljon infrastruktuuria, siitä ei ole hyötyä, jos käytettävissä ei ole keinoja selviytyä haastavista projekteista. DevOps tarjoaa toimintatavat ja periaatteet, joiden avulla saadaan paras teho pilviresursseista ja toteutetaan skaalautuvuus kestävällä tavalla myös tekemisen osalta.

Paremmat vasteajat. Kaikki edellä luetellut osa-alueet yhdessä – automaatio, yksinkertaisemmat ja helpommin hallittavat prosessit, yhteistyö ja skaalautuvuus – auttavat, kun asiat menevät pieleen ja nopeaa korjausta tarvitaan. Katkokset lyhenevät merkittävästi, kun kehitys- ja infratiimit työskentelevät yhdessä ratkaisun löytämiseksi. Lisäksi pilviympäristöissä on se etu, että ovat lähtökohtaisesti vikasietoisempia, kuin vaikkapa on-premise-ympäristöt.

Lopuksi

DevOps ja pilviympäristöt ovat ihanteellinen yhdistelmä ohjelmistokehityksen virtaviivaistamiseen. Voidaan hyvin sanoa, että niiden mukaisten toimintamallien omaksuminen on kannattavaa ei pelkästään pilviympäristöjen, vaan koko ohjelmistokehitysprosessin osalta.

DevOps on yksi tärkeimpiä tekijöitä onnistuneen kehitystyön kannalta, varsinkin työskenneltäessä monitoimittajaympäristöissä useiden eri teknologioiden ja järjestelmien kanssa.