Blogi 10.3.2015

Työkalupakkisi onnistuneeseen DevOpsiin

Gofore

Kiva kun löysit tämän artikkelin! Se sisältää varmasti hyvää tietoa, mutta pidäthän mielessä, että se on kirjoitettu 9 vuotta sitten.

DevOps on ideologia, jonka tavoitteisiin kuuluu ohjelmistotoimitusketjun nopeuttaminen ja automatisointi koodista julkaisuun. Tärkeä osa tämän tavoitteen saavuttamista on viestinnän ja yhteistyön parantaminen ennen kaikkea ohjelmistokehittäjien ja tuotantojärjestelmiä ylläpitävien järjestelmäasiantuntijoiden välillä.
Sekä viestinnän ja yhteistyön tukemiseksi että ohjelmistotoimitusketjun nopeuttamiseksi ja automatisoimiseksi on olemassa joukko erilaisia työkaluja. Joskus näistä työkaluista voi myös kuulla puhuttavan DevOps-työkaluina. On kuitenkin tärkeää huomioida, ettei DevOps edellytä työkalujen käyttöä, eikä työkalujen käyttö automaattisesti tarkoita, että toimintamalli olisi DevOps-ideologian mukainen. Monia DevOpsiin usein liitettyjä työkaluja on itse asiassa käytetty jo ennen kuin termiä ”DevOps” alettiin käyttämään. Millä tavoin nämä työkalut voivat sitten tukea DevOps-käytäntöjä ja -periaatteita?

Jatkuva julkaisu

Jatkuva julkaisu käsittää työkalut, joita käytetään koodin integroimiseksi, paketoimiseksi ja julkaisemiseksi. Toisin sanoen näillä työkaluilla voidaan automaattisesti suorittaa testejä, paketoida ja koota koodit toimituskelpoiseen muotoon sekä automatisoida asennukset palvelimille. Kun jatkuva julkaisu suoritetaan useita kertoja päivässä, saadaan myös palautetta kerättyä nopeammin ja siten voidaan reagoida ongelmiin ja muutoksiin aikaisemmin. Kun jatkuvasta julkaisusta saatu tieto on lisäksi kaikkien saatavilla, auttaa se parantamaan viestintää ja yhteistyötä eri osapuolten välillä.
Esimerkkityökaluja: Jenkins, Bamboo, Travis, Shippable

Virtualisointi ja kontit

Virtualisoinnilla voidaan tarkoittaa monia asioita, mutta DevOpsissa sillä tyypillisesti tarkoitetaan laitteiston virtualisointia, jolloin yhden fyysisen tietokoneen tai palvelimen päällä voidaan ajaa yhtä tai useampaa virtuaalikonetta. Vastaavasti myös useat fyysiset palvelimet voidaan esittää yhtenä virtuaalikoneena. Virtuaalikoneiden ongelma on, että ne vaativat sovelluksen ja sen riippuvuuksien lisäksi myös vieraskäyttöjärjestelmän, jolloin virtuaalikoneiden koko kasvaa usein isoksi. Tämän vuoksi on kehitetty kevyempiä virtualisointimuotoja kuten nk. kontit (engl. containers). Kontteja ajetaan tyypillisesti eristetyssä prosessissa isäntäkoneen käyttöjärjestelmässä. Näin ollen kontit sisältävät ainoastaan sovelluksen ja sen riippuvuudet, eivätkä ne tarvitse omaa vieraskäyttöjärjestelmää. Tämä tekee konteista helpommin siirrettäviä ja tehokkaampia, jolloin useita kontteja voidaan tarvittaessa ajaa yhdellä virtuaalipalvelimella. Sekä virtuaalikoneet että kontit edesauttavat ohjelmistokehittäjien ja järjestelmäasiantuntijoiden välistä yhteistyötä, kun kehitys- ja tuotantoympäristöt voidaan yhdenmukaistaa.
Esimerkkityökaluja: VirtualBox, Vagrant, Docker, Rocket

Pilvipalvelut

Pilvipalvelut perustuvat virtualisointiin, jolloin pilvipalveluntarjoajien työkaluilla monimutkaistenkin palvelinympäristöjen pystyttäminen onnistuu helposti ja nopeasti. Virtualisointi mahdollistaa myös pilvipalveluiden skaalauksen käytön mukaan. Pilvipalveluiden käyttäminen hälventää rajoja ohjelmistokehittäjien ja järjestelmäasiantuntijoiden välillä ja ketteröittää työskentelytapoja, kun palvelinympäristöön tehtävät muutokset voidaan tehdä helposti ja läpinäkyvästi. Automatisoinnin ja parempien työkalujen ansiosta ohjelmistokehittäjä voi myös ottaa aiempaa suuremman roolin infrastruktuurin hallinnassa.
Esimerkkejä pilvipalveluista: Amazon Web Services, Rackspace, Heroku

Konfiguraationhallinta ja provisiointi

Konfiguraationhallinnalla pyritään seuraamaan ja hallitsemaan muutoksia ohjelmistoihin ja laajemmin myös alla olevaan infrastruktuuriin. Provisioinnilla puolestaan tarkoitetaan tarvittavien käyttöjärjestelmien, ohjelmistojen, datan ja muiden riippuvuuksien asentamista ja konfiguroimista palvelimelle. Konfiguraationhallinta ja provisiointi liittyvät siten vahvasti toisiinsa. DevOpsissa nämä vaiheet pyritään automatisoimaan työkalujen avulla. Tällöin työkalujen avulla kuvataan tila, johon palvelin halutaan saattaa, jolloin työkalut hoitavat asennukset ja konfiguroinnit automaattisesti sekä tarkkailevat muutoksia infrastruktuurissa. Infrastruktuurin voi tällöin ilmaista ohjelmoitavana koodina, jolloin infrastruktuurin hallinnassa voidaan hyödyntää ohjelmistokehityksessä käytettyjä työkaluja ja käytäntöjä. Ohjelmistokehittäjät voivat puolestaan käyttää konfiguraationhallinta- ja provisiointityökaluja luodakseen tuotantoympäristöä vastaavan kehitysympäristön automaattisesti. Ympäristöjen yhtenäistäminen poistaa ”toimii minun koneella”-tyyppiset ongelmat ja vähentää näin ristiriitoja eri osapuolten välillä.
Esimerkkityökaluja: Ansible, Puppet, Chef

Konttien orkestrointi

Isot tietojärjestelmät hajautetaan tyypillisesti useille virtuaalipalvelimille sekä näiden päällä ajettaville konteille. Tällöin tarvitaan tehokkaat työkalut konttien orkestrointiin. Orkestrointi tarkoittaa konttien automaattista sijoittelua eri virtuaalipalvelimille sekä konttien välisen viestinnän hallintaa. Käytännössä työkaluilla voidaan määrittää millä palvelimilla kukin kontti ajetaan ja minkä muiden konttien kanssa kukin kontti kommunikoi. Osa työkaluista mahdollistaa myös konttien automaattisen kuormantasauksen ja virheidenhallinnan. Esimerkiksi vioittuneen kontin tilalle voidaan automaattisesti käynnistää vastaava toimiva kontti. Myös pilvipalveluissa on tarjolla työkaluja konttien helppoon asennukseen virtuaalipalvelimille sekä isojen konttijoukkojen hallintaan. Tällaiset orkestrointityökalut tukevat ja nopeuttavat tietojärjestelmän asennusta ja muutosten tekemistä tuotantoympäristöön, jolloin myös ohjelmistokehittäjät voivat helpommin osallistua tietojärjestelmän hallintaan.
Esimerkkityökaluja: Ansible, Docker Compose, Docker Swarm, Kubernetes

Lokitus, seuranta ja metriikoiden visuaalisaatio

Tärkeä osa DevOps-ideologiaa on palautteen kerääminen ja jakaminen jatkuvan parantamisen hengessä. Varsinkin hajautetussa järjestelmässä lokien kerääminen ja tuotantoympäristön reaaliaikainen seuranta voivat olla haasteellisia. Näiden tukemiseksi on kuitenkin olemassa työkaluja, joilla muun muassa lokien kerääminen, kokoaminen, hakuindeksointi ja visualisointi voidaan suorittaa automaattisesti ja reaaliaikaisesti. Kaikille läpinäkyvät metriikat ja kaaviot tukevat DevOps-periaatteita ja päivittäistä päätöksentekoa. Tämä antaa ohjelmistokehittäjille mahdollisuuden tutkia ongelmia reaaliajassa. Kun ohjelmistokehittäjät voivat suoraan seurata tekemiensä muutosten vaikutusta tuotantoympäristössä, kasvattaa se myös heidän sitoutumistaan ja omistautumistaan tietojärjestelmää kohtaan.
Esimerkkityökaluja: Elasticsearch, Logstash, Kibana, Sensu, New Relic, AppDynamics, Splunk
Vaikka yllä esitetyt työkalut tukevatkin DevOps-käytäntöjä ja -periaatteita on edelleen tärkeää muistaa, etteivät työkalut itsessään takaa DevOps-tavoitteiden saavuttamista. Loppujen lopuksi DevOps edellyttää ihmisten välistä yhteistyötä, avoimuutta ja viestintää.

Takaisin ylös