Automatisering innen programvareutvikling har lenge vært et sentralt tema. Automatisering av infrastruktur reduserer behovet for manuelle konfigurasjonsendringer og minimerer risikoen for menneskelige feil. I tillegg skaper det åpenhet for alle team som jobber med et prosjekt.
Lansering av nye produkter eller forbedring av eksisterende infrastruktur kan være utfordrende uten automatisering. Heldigvis finnes det en rekke automatiseringsverktøy som kan forenkle prosjektets livssyklus.
Denne artikkelen vil utforske to populære automatiseringsverktøy, Terraform og Kubernetes, og se nærmere på deres viktigste forskjeller.
Introduksjon til Terraform
Terraform er et åpen kildekode-verktøy som muliggjør sikker og forutsigbar administrasjon av infrastruktur i stor skala. Det baserer seg på prinsippet om «infrastruktur som kode» og er skyagnostisk. Dette kraftige verktøyet, utviklet av Hashicorp, støtter utrulling av infrastruktur både lokalt og i skyen.
Terraform bruker et deklarativt konfigurasjonsspråk kalt Hashicorp Configuration Language (HCL). Dette gjør det mulig å automatisere infrastrukturadministrasjon i alle slags miljøer. Det gir også IT-personell muligheten til å samarbeide og foreta endringer i skybaserte miljøer på en trygg måte, samt å skalere dem i tråd med forretningsbehov.
Moduler tilbyr god gjenbrukbarhet og muligheter for deling av kode, noe som øker samarbeid og produktivitet i team som jobber i skyen. Leverandører er plugins som gir integrasjon med ulike API-er, og de er avgjørende for å utvide Terraforms funksjonalitet.
Terraform opprettholder en intern oversikt over administrert infrastruktur, inkludert ressurser, konfigurasjon, metadata og relasjoner. Terraform bruker denne oversikten til å planlegge, spore endringer og modifisere infrastrukturmiljøer. For å legge til rette for samarbeid i team, bør denne oversikten lagres eksternt.
Terraforms arbeidsflyt består av tre hovedtrinn. Først genereres konfigurasjonsfiler for infrastrukturkoden, som representerer det ønskede miljøet. Deretter bekrefter vi at den genererte planen stemmer overens med våre intensjoner. Etter en grundig gjennomgang implementeres planen for å klargjøre infrastrukturressursene.
Introduksjon til Kubernetes
Kubernetes (K8s) er en åpen kildekode-plattform for containerorkestrering som automatiserer utrulling og administrering av containerbaserte applikasjoner. Dette kraftige orkestreringssystemet gjør det enkelt å skalere applikasjoner og oppnå høy tilgjengelighet. Det ble utviklet av Google basert på deres erfaring med å håndtere produksjonsbelastninger.
Kubernetes er skyagnostisk, noe som gir stor fleksibilitet ved kjøring av arbeidsbelastninger i både sky- og lokale miljøer. Det er også utvidbart, slik at man enkelt kan legge til funksjoner eller tilpassede verktøy til klyngene sine.
En av de største fordelene er de selvhelbredende egenskapene. Feil i containere blir automatisk startet på nytt og omplassert. Noder kan automatisk erstattes, og trafikken betjenes kun av de sunne komponentene som har bestått helsesjekker.
Utrullinger kan håndteres trinnvis, og Kubernetes har innebygde mekanismer som overvåker helsen til applikasjonene under utrullingen. Hvis applikasjonens helse ikke rapporterer en sunn tilstand etter en utrulling, vil problematiske endringer rulles tilbake automatisk.
Gjennom årene har det vært mye diskusjon rundt hvordan man kan holde applikasjoner i gang mens man lanserer nye programvareversjoner, og det finnes mange forskjellige alternativer for utrulling.
Kubernetes administrerer tjenesteoppdagelse og lastbalansering mellom identiske pods, uten behov for komplekse eksterne løsninger.
Man kan utvide de innebygde mekanismene for å administrere konfigurasjoner og hemmeligheter for appene. I tillegg gjøres det enkelt å skalere applikasjonene med autoskalering og kommandobasert skalering.
Terraform vs. Kubernetes
Begge disse moderne teknologiene deler mange likheter, men de har også grunnleggende forskjeller. La oss se nærmere på noen av dem.
Fokusområde
Terraform og Kubernetes er forskjellige i den forstand at de har forskjellige mål og løser ulike problemer. Terraform er fokusert på å levere infrastrukturkomponenter og er basert på «infrastruktur som kode». Kubernetes er designet for å la oss kjøre containerarbeidsbelastninger og fokuserer på containerorkestrering.
Konfigurasjonsspråk
Terraform definerer deklarative objekter ved hjelp av Hashicorp Configuration Language (HCL). Man kan opprette ressurser som kjører på flere skyplattformer ved å bruke én enkelt HCL-fil.
Kubernetes definerer deklarative objekter i YAML- og JSON-filer. Disse filene brukes for å demonstrere hvordan man administrerer Kubernetes-objekter. YAML er foretrukket fremfor JSON ved skriving av konfigurasjonsfiler, men begge kan brukes.
Verktøyets arbeidsflyt
Terraforms arbeidsflyt er enkel å bruke og er intuitiv for nye brukere. For å kjøre applikasjoner i Kubernetes effektivt, må man imidlertid ha god forståelse for mange av klyngens interne komponenter og mekanikker. Det kan være vanskeligere for nye brukere å lære seg Kubernetes.
Planleggingsfase og konfigurasjonsdrift
Terraform er et verktøy som lar deg identifisere og varsle om konfigurasjonsavvik. Dette gjøres ved hjelp av planleggingsfasen i den standard arbeidsflyten. Kubernetes tilbyr ikke denne funksjonaliteten.
Ressursopprettelse
Terraform CLI tilbyr et kommandolinjegrensesnitt. Den støtter brytere og underkommandoer som `terraform plan` og `terraform apply`. Terraform bruker CLI-kommandoer for å utføre og administrere deklarative konfigurasjoner for å opprette ressurser.
Kubernetes kommer med sitt eget kommandolinjeverktøy for å administrere Kubernetes ressursklynger. `Kubectl` kan opprette ressurser, som for eksempel å allokere minne og CPU til containere og opprette noder. Den gir også muligheten til å distribuere applikasjoner.
Fordeler med Terraform og Kubernetes 👍
Fordeler med Terraform:
- Muliggjør distribusjoner på tvers av flere skyer med ulike ressurser
- Bidrar til å unngå nedetid
- Forenkler registrering, sporing, administrering og rapportering av endringer
- Deklarativ syntaks
- Omfattende og lettleselig dokumentasjon
Fordeler med Kubernetes:
- Ressurseffektiv – tillater horisontal skalering av infrastruktur
- Forhindrer innelåsing til en spesifikk infrastruktur
- Deklarativ syntaks
- Automatiserer helbredelse ved å overvåke replikaer og sørge for at systemet er sunt til enhver tid
- Google-støttet, ledende containeradministrasjonsverktøy med omfattende dokumentasjon
Ulemper med Terraform og Kubernetes 👎
Ulemper med Terraform:
- Støtter ikke GKE (Google Kubernetes Engine) fullt ut
- Har ikke feilhåndtering
- Tilbyr ikke tilbakeføring. Hvis behovet oppstår, må brukerne ødelegge den administrerte ressursen og deretter gjenopprette den.
- Feil er vanlige i nye versjoner
Ulemper med Kubernetes:
- Vanskelig å mestre
- Kun infrastrukturorkestrering er mulig
- Kan kreve tilpasning av arbeidsflyter for å introdusere K8s i en organisasjon
Her er en sammenligning mellom Kubernetes og Terraform:
Kubernetes | Terraform | |
Beskrivelse | Åpen kildekode containerorkestreringssystem | Åpen kildekode, infrastruktur som kode, programvareverktøy |
Første utgivelsesdato | 9. september 2014 | 28. juli 2014 |
Utvikler | Google, Rancher Labs, Cloud Native Computing Foundation | HashiCorp |
Konfigurasjonsspråk | YAML/JSON | Hashicorp Configuration Language (HCL) |
Kommandoer | Bruker `kubectl` for å kjøre Kubernetes-kommandoer | Bruker Terraform CLI for å kjøre kommandoer |
Kompleksitet | Krever god forståelse av interne klyngekomponenter og mekanismer | Enkel å forstå |
Vanlige bruksområder for Kubernetes
Orkestrere containere på tvers av flere verter
Kubernetes er plattformuavhengig, som gjør at man kan hoste containere på flere maskiner eller i skyen. Det har også et failover-lag for å sikre høy tilgjengelighet.
Administrere databehandlingsressurser
Det er ofte mer kostnadseffektivt å hoste en dedikert Kubernetes-klynge enn å kjøre flere servere. Det er også enklere å administrere en Kubernetes-klynge enn flere verter med forskjellige servere.
Kjøre CI/CD-plattformer
Kubernetes er en nøkkelkomponent i CI/CD-metodologier og er et foretrukket valg for å kjøre CI/CD-plattformer som Jenkins, Spinnaker og Drone. Kubernetes vil kjøre CI/CD-plattformer så lenge de er pakket i en container.
Lagringsorkestrering
Kubernetes støtter dynamisk klargjøring av lagringsvolum. Lagringssystemer kan kobles til hvilken som helst plattform, inkludert nettverks- og skylagring.
Tjenesteoppdagelse og lastbalansering
Kubernetes eksponerer containerklyngetjenesten til andre plattformer via et klynges DNS-punkt. Kubernetes kan distribuere trafikk og lastbalansere den for å sikre at distribuerte forekomster er tilgjengelige og stabile når det er mye nettverkstrafikk.
Vanlige bruksområder for Terraform
Sporingsinfrastruktur
Terraform sporer ressursene dine ved hjelp av en tilstandsfil. Denne filen fungerer som et referansepunkt når ressurser endres. Terraform bruker filen til å bestemme hvilke endringer som må gjøres i infrastrukturen for å oppnå ønsket tilstand.
Multi-Cloud-utrulling
Terraform er en plattform som kan brukes i alle skyer. For å administrere infrastrukturressurser som er hostet hos flere skyleverandører, kan man bruke en HCL-konfigurasjonsfil. Det kan også håndtere avhengigheter på tvers av skyer. Multi-sky-utrulling øker robustheten og feiltoleransen.
Administrere applikasjoner med flere lag
Applikasjoner med flere lag kan separeres ved å definere en egen logikk for hvert lag. Terraform administrerer automatisk avhengighetene mellom hvert nivå ved å definere hvert nivå som en samling. Avhengigheter og plugin-moduler er nødvendige for å sikre konsistens mellom lagene, og disse kan være vanskelig å installere manuelt.
Terraform-klargjøring sørger for at disse avhengighetene installeres og implementeres riktig hver gang. For eksempel bekrefter Terraform at databasenivået er tilgjengelig før klargjøring av webservere eller lastbalansere.
Programvaredefinert nettverk
Terraform kan kommunisere med programvaredefinerte nettverk for å konfigurere nettverket i tråd med applikasjonenes krav. Dette gjør at man kan gå fra en billettbasert arbeidsflyt og automatisere utrullingsprosessen, noe som reduserer tiden som brukes på utrulling.
Avsluttende ord
Vi har utforsket de viktigste forskjellene mellom Terraform og Kubernetes, to av de mest populære moderne DevOps-verktøyene. Vi har sett hva hvert verktøy tilbyr utviklere og IT-operatører og hva de er best på. Terraform er et rammeverk som automatiserer ressurser deklarativt på tvers av flere skyplattformer. Kubernetes administrerer ressursadministrasjon, utrulling og lastbalansering i containerbaserte miljøer.
Disse verktøyene vil gjøre det enklere å automatisere infrastruktur, utrulling av applikasjoner, overvåking og andre oppgaver.
Neste steg kan være å se nærmere på beste praksis for Terraform.