LFCA: Lær de grunnleggende konseptene for bruk av containere – Del 22


Over tid, ettersom etterspørselen etter rask testing og distribusjon av applikasjoner vokste kombinert med raskere forretningssykluser, ble organisasjoner tvunget til å innovere for å holde tritt med det raske forretningsmiljøet.

Jakten på å modernisere applikasjoner og bygge nye for å skape smidige arbeidsflyter førte til konseptet med å bruke containere. Containeriseringsteknologi er nesten like gammel som virtualisering. Imidlertid satte ikke containere opp mye spenning før Docker eksploderte i scenen i 2013 og vekket en vanvittig interesse blant utviklere og andre IT-fagfolk.

For øyeblikket er alle de gigantiske teknologienhetene som Google, Amazon, Microsoft og Red Hat for å nevne noen har hoppet på bølgen.

Hvorfor containere?

En av utfordringene utviklere møtte er forskjellen i datamiljøer i alle stadier av programvareutvikling. Problemer oppstår når programvaremiljøet er forskjellig fra et trinn til det neste.

For eksempel kan en applikasjon kjøre sømløst i et testmiljø ved å kjøre Python 3.6. Imidlertid oppfører applikasjonen seg rart, returnerer noen feil eller krasjer helt når den porteres til et produksjonsmiljø som kjører Python 3.9.

Containere kom til scenen for å møte denne utfordringen og sikre at applikasjoner kjører pålitelig når de flyttes fra ett datamiljø til det neste i alle trinn av programvareutvikling – fra utviklernes PC og hele veien til produksjonsmiljøet. Og det er ikke bare programvaremiljøet som kan forårsake slike inkonsekvenser, men også forskjellene i nettverkstopologi og sikkerhetspolicyer.

Hva er containere?

En beholder er en isolert programvareenhet som pakker all binærkode, biblioteker, kjørbare filer, avhengigheter og konfigurasjonsfiler i en enkelt pakke på en slik måte at applikasjonen vil kjøre jevnt når den porteres fra ett datamiljø til en annen. Den kommer ikke med et operativsystembilde som gjør den lett og lett bærbar.

Et beholderbilde er en frittstående, lett og kjørbar pakke som samler alt som kreves for å kjøre programmet. Ved kjøring forvandles et beholderbilde til en beholder. I tilfellet Docker, for eksempel, blir et Docker-bilde en docker-beholder når det kjøres på Docker Engine. Docker er et kjøretidsmiljø som brukes til å bygge containeriserte applikasjoner.

Containere kjører fullstendig isolert fra det underliggende operativsystemet, og containeriserte applikasjoner vil alltid kjøre konsekvent uavhengig av datamiljø eller infrastruktur. Det er av denne grunn at en utvikler kan utvikle en applikasjon fra denne bærbare datamaskinen og enkelt distribuere den på en server.

Konsistensen og påliteligheten til å kjøre containere gir utviklere trygghet i å vite at applikasjonene deres vil kjøre som forventet uansett hvor de distribueres.

Hvordan er containere forskjellig fra virtuelle maskiner?

En vanlig ting som containere og virtuelle maskiner deler er at de opererer i et virtualisert miljø. Containerisering er på en måte en form for virtualisert teknologi. Imidlertid skiller beholdere seg fra virtuelle maskiner på mer enn én måte.

Virtuelle maskiner

En virtuell maskin også referert til som en virtuell forekomst eller kort sagt VM er en emulering av en fysisk server eller PC. Virtualisering er en teknologi som gjør det mulig å lage virtuelle maskiner. Konseptet med virtualisering dateres tilbake til tidlig på 1970-tallet og la grunnlaget for den første generasjonen skyteknologi.

I virtualisering lages et abstraksjonslag på toppen av en bare-metal-server eller maskinvare. Dette gjør det mulig for maskinvareressursene til en enkelt server å deles på tvers av flere virtuelle maskiner.

Programvaren som brukes til å lage abstraksjonslaget omtales som en hypervisor. Hypervisoren abstraherer den virtuelle maskinen og gjeste-OSet fra det faktiske bare metallet eller maskinvaren. Dermed sitter en virtuell maskin på toppen av hypervisoren som gjør maskinvareressursene tilgjengelige takket være abstraksjonslaget.

Virtuelle maskiner kjører et komplett operativsystem (gjeste-OS) som er uavhengig av det underliggende operativsystemet (verts-OS) som hypervisoren er installert på. Gjeste-OSet gir deretter en plattform for å bygge, teste og distribuere applikasjoner sammen med bibliotekene og binærfilene deres.

Det finnes to typer hypervisorer:

Type 1 Hypervisor (Bare Metal Hypervisor)

Denne hypervisoren er installert direkte på en fysisk server eller den underliggende maskinvaren. Det er ikke noe operativsystem som sitter mellom hypervisoren og datamaskinens maskinvare, derav tagnavnet bare-metal hypervisor. Det gir utmerket støtte siden ressurser ikke deles med vertsoperativsystemet.

På grunn av deres effektivitet brukes Type 1-hypervisorer mest i bedriftsmiljøer. Type 1 hypervisorleverandører inkluderer VMware Esxi og KVM.

Type 2 Hypervisor:

Dette blir også sett på som en vertsbasert hypervisor. Den er installert på toppen av vertsoperativsystemet og deler de underliggende maskinvareressursene med vertsoperativsystemet.

Type 2 hypervisorer er ideelle for små datamiljøer og brukes mest til testing av operativsystemer og forskning. Type 2 hypervisorleverandører inkluderer Oracle VirtualBox og VMware Workstation Pro.

Ulempen med virtuelle maskiner

Virtuelle maskiner har en tendens til å være enorme i størrelse (kan ta opp flere GB), trege til å starte og stoppe og sluke opp mange systemressurser som fører til stans og treg ytelse på grunn av begrensede ressurser. Som sådan anses en virtuell maskin som klumpete og er forbundet med høye overheadkostnader.

Containere

I motsetning til en virtuell maskin, krever ikke en beholder en hypervisor. En container sitter på toppen av en fysisk server og dens operativsystem og deler den samme kjernen som OS, blant annet som biblioteker og binærfiler. Flere containere kan kjøres på samme system, og hver kjører sitt eget sett med applikasjoner og prosesser fra resten. Populære containerplattformer inkluderer Docker og Podman.

I motsetning til virtuelle maskiner kjører containere fullstendig isolert fra det underliggende operativsystemet. Beholdere er eksepsjonelt lette – bare noen få megabyte – tar mindre plass og er ressursvennlige. De er enkle å starte og stoppe og kan håndtere flere applikasjoner enn en virtuell maskin.

Fordeler med å bruke containere

Beholdere gir en praktisk måte å designe, teste og distribuere applikasjoner fra din PC rett til et produksjonsmiljø, enten det er på stedet eller i skyen. Her er noen av fordelene med å bruke containeriserte applikasjoner.

1. Større modularitet

Før containere hadde vi den gammeldagse monolitiske modellen der en hel applikasjon bestående av både frontend- og backend-komponenter ble samlet i en enkelt pakke. Containere gjør det mulig å dele en applikasjon i flere individuelle komponenter som kan kommunisere med hverandre.

På denne måten kan utviklingsteam samarbeide om ulike deler av en applikasjon forutsatt at det ikke gjøres store endringer med hensyn til hvordan applikasjonene samhandler med hverandre.

Det er dette konseptet med mikrotjenester er basert på.

2. Økt produktivitet

Mer modularitet betyr mer produktivitet siden utviklere er i stand til å jobbe med individuelle komponenter i applikasjonen og feilsøke feil mye raskere enn før.

3. Reduserte overheadkostnader

Sammenlignet med virtuelle maskiner og andre konvensjonelle datamiljøer, bruker containere færre systemressurser siden de ikke inkluderer et operativsystem. Dette unngår unødvendige utgifter til å anskaffe dyre servere for å bygge og teste applikasjoner.

4. Økt portabilitet

På grunn av deres lille fotavtrykk, kan containeriserte applikasjoner enkelt distribueres til flere datamiljøer/operativsystemer.

5. Større effektivitet og fleksibilitet

Containere gir mulighet for rask distribusjon og skalering av applikasjoner. De gir også den sårt tiltrengte fleksibiliteten til å distribuere applikasjoner i flere programvaremiljøer.

Hvordan gagner containere DevOps-teamene?

Containere spiller en nøkkelrolle i DevOps, og det ville være umulig å forestille seg hvordan situasjonen ville vært uten containeriserte applikasjoner. Så, hva bringer containere til bordet?

For det første understøtter containere mikrotjenestearkitekturen, slik at byggeklossene til en hel applikasjon kan utvikles, distribueres og skaleres uavhengig. Som nevnt gir dette større samarbeid og rask utrulling av applikasjoner.

Containerisering spiller også en viktig rolle i å forenkle CI/CD-rørledningene ved å gi et kontrollert og konsistent miljø for byggeapplikasjoner. Alle bibliotekene og avhengighetene er pakket sammen med koden i én enkelt enhet for raskere og enklere distribusjon. Applikasjonen som testes vil være den eksakte programvaren som vil bli distribuert i produksjonen.

I tillegg forbedrer containere utrullingen av patcher og oppdateringer når en applikasjon er delt opp i flere mikrotjenester., hver i en separat container. Individuelle beholdere kan undersøkes, lappes og startes på nytt uten å avbryte resten av applikasjonen.

Konklusjon

Enhver organisasjon som ønsker å oppnå modenhet i DevOps bør vurdere å utnytte kraften til containere for smidige og sømløse distribusjoner. Utfordringen ligger i å vite hvordan de skal konfigureres, sikres og sømløst distribueres til flere miljøer.