Terraform vs. Kubernetes: Hvilket verktøy trenger du?

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.