Enhver samtale om automatisering innen IT-drift er ufullstendig uten å nevne Ansible og Kubernetes. Disse to verktøyene, som har distinkte bruksområder, har likevel fundamentalt endret programvareutviklingsprosessen. La oss derfor se nærmere på disse verktøyene.
Hva er Ansible?
Ansible, opprinnelig utviklet av Michael DeHaan, er i dag et av de hundre mest populære prosjektene på GitHub. Det er anerkjent for sitt enkle språk og brukervennlighet. Ansible har i dag blitt en slags standard for IT-automatisering.
Verktøyet trives i et åpent fellesskap og har gjennomgått en betydelig utvikling, og tilbyr løsninger for operatører, administratorer og beslutningstakere innen IT i en rekke teknologiske miljøer.
Følgelig er verktøyet i utstrakt bruk hos store organisasjoner som Twitter, eBay, Verizon, NASA, ILM, Rackspace og Electronic Arts. Red Hat kjøpte Ansible i 2015 som følge av suksessen.
Ansible forenkler konfigurasjonsadministrasjon, applikasjonsdistribusjon og oppgaveautomatisering. I dagens digitale landskap er det et mye brukt verktøy blant DevOps-eksperter for ressursallokering for å implementere en infrastruktur-som-kode (IaC)-strategi for jevn programvarelevering.
Her er noen av måtene Ansible kan benyttes på:
- Konfigurasjonsadministrasjon: Ansible gjør det svært enkelt å definere ønsket konfigurasjon for servere, nettverksenheter og andre infrastrukturkomponenter. Verktøyet kan også automatisk og konsekvent implementere disse konfigurasjonene på tvers av flere systemer, og dermed sikre en standardisert struktur og samsvar.
- Applikasjonsdistribusjon: Ansible automatiserer prosessen for applikasjonsdistribusjon i ulike miljøer, fra utvikling til testing til produksjon. Oppgaver som installasjon av programvare, konfigurering av databaser og oppsett av nettverk utføres med bare noen få kommandoer.
- Oppgaveautomatisering: Med Ansible kan IT-team automatisere et bredt spekter av repeterende oppgaver, som oppdatering av systemer, håndtering av sikkerhetskopier, opprettelse av brukerkontoer og omstart av tjenester. Dette frigjør ressurser slik at teamet kan konsentrere seg om mer strategiske initiativer.
- Infrastrukturklargjøring: Dynamisk klargjøring og konfigurering av ressurser, som virtuelle maskiner, skyforekomster og nettverksenheter, etter behov kan være utfordrende. Ansible kan effektivt skalere infrastrukturen opp eller ned.
- Orkestrering: Ansible utmerker seg i å administrere komplekse distribusjoner som involverer flere systemer. Verktøyet kan orkestrere komplekse arbeidsflyter for å håndtere oppgaver som å distribuere flerlagsapplikasjoner og implementere oppdateringer i et distribuert miljø, og dermed administrere nettverksenheter på en koordinert måte.
Fordeler med Ansible
- Enkel å lære og bruke: Siden playbookene bruker YAML, er de enkle å skrive, noe som gjør at både nybegynnere og erfarne brukere kan dra nytte av verktøyet. Den enkle og intuitive syntaksen bidrar til rask implementering og smidige arbeidsflyter.
- Skrevet i Python: Verktøyet er utviklet med fokus på enkelhet. Det er skrevet i Python, som er et av de mest populære og oversiktlige programmeringsspråkene.
- Agentløs arkitektur: Ansible krever ikke en agent. Det kan administrere eksterne verter gjennom SSH uten å kreve programvareinstallasjon på dem. Ved å bruke playbooks og roller gjør Ansible det enklere å definere den ønskede infrastrukturen og automatisere veien dit.
- Forbedret sikkerhet: Ansible prioriterer sikkerhet mellom systemene gjennom SSH. Verktøyet beskytter applikasjoner og infrastruktur mot potensielle trusler.
- Integrasjon med systemer for autentisering: Ansible integreres med systemer for autentisering som LDAP og Kerberos for korrekt tilgangskontroll og økt sikkerhet.
- Pålitelighet: IT-infrastrukturer krever stabilitet og pålitelighet. Ansible har lang erfaring med å levere høy ytelse og pålitelighet.
Det som gjør Ansible spesielt interessant, er den høye brukervennligheten. Administrasjon av både lokal og skybasert infrastruktur er enkelt med Ansible.
Hvordan fungerer Ansible?
La oss se på komponentene før vi dykker inn i hvordan Ansible fungerer:
Moduler: Hvis Ansible var et måltid, ville modulene vært hovedingrediensen. Dette er forhåndsbygde små programmer som håndterer nesten alt – fra applikasjoner og pakker til filer på eksterne systemer. Ansible implementerer definerte instruksjoner på eksterne systemer og leverer samtidig moduler fra kontrollmaskinen.
Playbooks utfører den tilknyttede modulen og tar den ut av løkken når oppgaven er fullført. Ansible har over 750 (stadig økende) innebygde moduler, som gjør automatisering enkel med spill og oppgaver!
Bildekilde: InterviewBit
Playbooks: Playbooks er oppgaveorienterte brukermanualer som bruker YAML-formatet for å forenkle automatisering. Disse playbookene styrer arbeidsflyten og utfører oppgaver på en ryddig måte. Playbooks kan utføre sekvensielle prosedyrer, definere miljøer og håndtere ulike faser av en oppgave.
Plugins: Ansible-plugins forbedrer både innebygd og tilpasset funksjonalitet. Systemet kan utføre funksjoner for logging, hendelsesvisning, caching og front-end-kontroller, og det utfører disse før moduler på noder.
Inventarer: Ansible-inventarer inneholder lister over verter med IP-adresser, servere og databaser. SSH for UNIX, Linux eller nettverksenheter og WinRM for Windows-systemer bidrar til å administrere dem.
De andre Ansible-komponentene er API, Cloud, Host, Networking og CMD (Configuration Management Database).
Slik fungerer Ansibles magi:
Først har Ansible en inventarfil med en liste over verter eller maskiner. Brukere kan endre denne inventarfilen ved å legge til serverne de ønsker å kontrollere.
Neste trinn er å lage playbooks for å definere ønsket infrastruktur på de administrerte nodene. Siden Ansible kjører på kontrollnoden som hjelper med å utføre oppgaver på det eksterne systemet, etablerer den en SSH-forbindelse med sistnevnte. Dette gir mulighet for sikker kommunikasjon mellom nodene.
Deretter sender og kjører Ansible moduler for å utføre oppgavene som er definert i playbooks, og bringer systemene til ønsket tilstand.
Etter å ha fullført oppgaven, fjerner Ansible modulene fra de administrerte nodene for å unngå gjenværende moduler. Til slutt gir verktøyet rapporter om status for oppgaveimplementering, slik at brukerne kan overvåke fremdriften og resultatene av automatiseringsoppgaver. I tillegg kan Ansible kjøres regelmessig for å vedlikeholde og forbedre systemet over tid.
Hva er Kubernetes?
Joe Beda, Brendan Burns og Craig McLuckie er hjernene bak Kubernetes. De jobbet som ingeniører hos Google og utviklet dette verktøyet, som nå er sentralt for containeriserte applikasjoner.
Kubernetes ble opprinnelig utviklet av Google for å administrere egne containeriserte applikasjoner i produksjon, og ble lansert som et åpen kildekode-prosjekt i 2014.
I 2015 donerte Google Kubernetes til den leverandøruavhengige Cloud Native Computing Foundation (CNCF) for å fremme skybasert databehandlingsteknologi.
Siden den gang har Kubernetes blitt et av CNCFs flaggskipprosjekter, med utbredt bruk i industrien, og har etablert seg som ledende innen containerorkestrering.
Ifølge Gartner vil omtrent 85 % av organisasjonene benytte seg av Kubernetes innen 2025. Det robuste økosystemet av tillegg, verktøy og tjenester gjør det til en allsidig plattform for å administrere containeriserte applikasjoner.
Kubernetes har gjennomgått flere betydelige oppdateringer og har fått ny funksjonalitet, forbedringer og feilrettinger i hver utgivelse. Det er i stadig utvikling og forbedring takket være det entusiastiske fellesskapet bak det!
Fordeler med Kubernetes
- Skalerbarhet: Enkel skalering av applikasjoner basert på etterspørsel.
- Portabilitet: Distribuere og administrere applikasjoner konsekvent i ulike miljøer.
- Fleksibilitet: Støtte for ulike containerkjøretider og formater.
- Automatisering: Automatisere containerdistribusjon, skalering, overvåking og feilretting.
- Robusthet: Innebygd feiltoleranse og selvhelbredende evner.
- DevOps-aktivering: Fremme samarbeid mellom utviklere og driftsteam.
- Utvidbarhet: Tilpassbar og utvidbar arkitektur for integrasjon med andre verktøy.
- Fellesskap og økosystem: Stort fellesskap og økosystem for utvidet kapasitet.
Hvordan fungerer Kubernetes?
Ettersom Kubernetes er plattformen som hjelper med containerorkestrering, innebærer det første trinnet å pakke applikasjonen inn i containere ved hjelp av containeriseringsverktøy, som for eksempel Docker. Disse containerne er selvforsynte, med all nødvendig programvare og avhengigheter for å fungere feilfritt i forskjellige miljøer.
Deretter defineres applikasjonstilstanden med YAML eller JSON, inkludert containerbilder, ressurskrav, skaleringspolicyer, nettverks- og lagringskonfigurasjoner. Filene med instruksjoner kalles manifester.
I Kubernetes er en klynge som et team av datamaskiner, kalt noder, som samarbeider for å kjøre applikasjonene dine. Se for deg noder som spillere i et fotballag, og hver spiller kan kjøre flere containere, som er spillernes utstyr eller utstyr som trengs for å spille kampen.
Kubernetes-komponenter
Den minste byggesteinen i Kubernetes kalles en Pod, som er som et koselig lite hjem for én eller flere containere. Poder er som spillernes garderober, hvor de oppbevarer og deler ressurser som nettverk og lagring. Hver Pod har sitt eget unike navn og adresse, slik at du enkelt kan identifisere og kommunisere med dem.
Utplasseringer er som trenerne som styrer laget. De forteller Kubernetes hvor mange spillere (eller replikaer) av hver Pod som skal kjøres til enhver tid. Akkurat som en trener administrerer spillerne på banen, administrerer en Deployment opprettelse, skalering og sletting av Poder for å sikre at applikasjonen din alltid er i ønsket tilstand.
Tjenester er som dommerne som hjelper spillere med å kommunisere med hverandre. De gir en stabil adresse, som et telefonnummer, som andre kan bruke for å få tilgang til applikasjonen din. Tjenester velger de riktige podene basert på etiketter, som spillerens posisjon, og fordeler trafikken jevnt mellom dem, slik at alle får en rettferdig sjanse til å spille.
For å håndtere viktig informasjon som passord eller API-nøkler, tilbyr Kubernetes ConfigMaps og Secrets. De er som låsbare bokser der du trygt kan lagre sensitiv informasjon og deretter bruke dem i Poder og Deploymenter for å få tilgang til ressurser uten å vise dem i klartekst.
Til slutt er Kubernetes API-serveren som lagets coaching-hotline. Det gir en enkel måte å administrere teamets status ved å bruke et RESTful API som du kan samhandle med ved hjelp av kubectl eller andre Kubernetes-verktøy. Det er som å ha en direkte linje til trenerkontoret for å gi instruksjoner eller få oppdateringer om lagets prestasjoner.
Funksjonssammenligning: Ansible vs. Kubernetes
Funksjon | Ansible | Kubernetes |
Type | Verktøy for konfigurasjonsadministrasjon og automatisering | Plattform for containerorkestrering |
Formål | Automatisere IT-oppgaver som konfigurasjonsadministrasjon, applikasjonsdistribusjon og systemklargjøring | Automatisere distribusjon, skalering og administrasjon av containeriserte applikasjoner |
Arkitektur | Agentløs, bruker SSH eller WinRM for å kommunisere med målsystemer | Containerisert |
Språk | YAML | JSON, deklarativt språk |
Skalerbarhet | Støtter både små og store infrastrukturer | Utviklet for storskala distribusjoner |
Høy tilgjengelighet | N/A | Tilbyr innebygde funksjoner med høy tilgjengelighet med automatisk containeromlegging og nodefailover |
Nettverksfunksjoner | N/A | Tilbyr avanserte nettverksfunksjoner som tjenesteoppdagelse, lastbalansering og DNS-basert ruting |
Implementering | Push-basert, der konfigurasjonsendringer presses til målsystemer | Pull-basert, der containere trekkes fra containerregisteret til målnoder |
Sikkerhet | Bruker SSH eller WinRM for kommunikasjon, krever riktig autentisering og autorisasjon | Bruker TLS for kommunikasjon, gir innebygd containerisolasjon og RBAC for tilgangskontroll |
Rullende oppdateringer | Støtter rullende oppdateringer med minimal nedetid | Støtter rullende oppdateringer med null nedetid |
Helsesjekker | Gir grunnleggende helsesjekker for målsystemer | Gir avanserte helsesjekker for containere og automatisk omstart av container |
Utvidbarhet | Gir tilpassede moduler for å utvide funksjonaliteten | Tilbyr tilpassede ressurser og operatører for å utvide funksjonaliteten |
Læringskurve | Moderat, krever kunnskap om YAML og grunnleggende skripting | Moderat til bratt, krever forståelse av containerisering, nettverk og distribuerte systemkonsepter |
Bruk av Kubernetes
Applikasjonsimplementering
Å administrere komplekse applikasjoner i et produksjonsmiljø krever feilfri utførelse av en rekke oppgaver innen en viss tidsramme. Hvis utviklere skulle utføre oppgaven manuelt, ville distribusjon av applikasjonen ta uker.
Men ved å bruke Kubernetes og containerisere applikasjonene, kan de ikke bare distribuere og administrere dem på tvers av en klynge av maskiner, men også sikre konsistens og reproduserbarhet. Utviklere kan oppnå maksimal effektivitet ved å automatisere oppgaver som planlegging, skalering og oppdateringer.
Skalerbarhet og lastbalansering
For at en applikasjon skal lykkes, må den kunne håndtere økt trafikk uten at det går ut over ytelsen. Kubernetes’ innebygde funksjoner for skalerbarhet og lastbalansering er det beste alternativet.
Verktøyet fordeler arbeidsmengder på tvers av en klynge av maskiner og skalerer automatisk opp eller ned basert på etterspørsel, noe som sikrer høy tilgjengelighet. I tillegg hjelper det med å fordele innkommende trafikk på tvers av flere forekomster.
Tjenesteoppdagelse og nettverksbygging
De fleste applikasjoner kan ikke fungere alene. De må koble seg til andre applikasjoner eller tjenester. Kubernetes tilbyr nettverksfunksjoner som bidrar til å etablere kommunikasjon mellom containere i en klynge. Applikasjoner kan også oppdage og koble seg til andre tjenester som kjører i gruppen gjennom det DNS-baserte tjenesteverktøyet.
Rullende oppdateringer og tilbakeføringer
Med Kubernetes er det enkelt å oppdatere apper eller gå tilbake til tidligere versjoner. Verktøyet automatiserer prosessen og sikrer sømløse oppdateringer uten å forstyrre applikasjonens tilgjengelighet, og tillater rullende oppdateringer og tilbakeføringer med liten nedetid.
Infrastrukturstyring
Kubernetes bruker en deklarativ tilnærming for å forenkle infrastrukturadministrasjon. Det lar brukere definere infrastrukturressurser som lagring, nettverk og databehandling som kode ved å bruke YAML- eller JSON-manifester. Disse manifestene eller konfigurasjonsfilene muliggjør versjonskontroll, automatisering, administrasjon av IaC (Infrastructure as Code) og effektivisering av administrasjonen av komplekse infrastrukturkonfigurasjoner.
Hybrid- og multisky-implementering
Kubernetes er en sentral faktor for organisasjoner som ser etter tilpasningsevne og smidighet i sine distribusjoner. Ved å bruke et konsistent abstraksjonslag blir distribusjon og administrasjon av applikasjoner på tvers av ulike skyleverandører eller lokale datasentre effektiv.
Det lar brukere ta i bruk en hybrid- eller multiskystrategi, og utnytter fleksibiliteten og portabiliteten til containere for å distribuere og administrere applikasjoner i ulike miljøer.
Ansible og Kubernetes – Livssyklus for programvareutvikling
Fase i SDLC | Ansible | Kubernetes |
Utvikling | Gir automatisert konfigurasjonsadministrasjon og distribusjon av utviklingsmiljøer, muliggjør versjonskontroll for konfigurasjonsfiler og forenkler kodedistribusjoner | N/A |
Testing | Gir automatisert klargjøring og konfigurasjon av testmiljøer, muliggjør enkel replikering av miljøer og støtter automatiserte testoppgaver | N/A |
Kontinuerlig integrasjon/kontinuerlig distribusjon (CI/CD) | Forenkler automatiserte distribusjoner av applikasjoner og konfigurasjonsendringer, muliggjør versjonskontroll for infrastrukturkode, og støtter kontinuerlig levering og distribusjonspipelines | Tilrettelegger for containeriserte distribusjoner, skalering og administrasjon av applikasjoner, støtter rullende oppdateringer og null nedetidsdistribusjoner |
Staging/pre-produksjon | Gir automatisert klargjøring og konfigurasjon av oppsamlingsmiljøer, muliggjør konsistens på tvers av oppsetnings- og produksjonsmiljøer, og forenkler testing av produksjonslignende miljøer | Forenkler containeriserte distribusjoner og skalering av applikasjoner i pre-produksjonsmiljøer, muliggjør testing av containeriserte applikasjoner i et isolert miljø |
Produksjon | Fasiliterer automatisert klargjøring, konfigurasjon og administrasjon av produksjonsmiljøer, muliggjør infrastruktur som kode (IaC) praksis, og støtter produksjonsdistribusjoner | Gir containeriserte distribusjoner, skalering og administrasjon av produksjonsapplikasjoner, tilbyr innebygde funksjoner med høy tilgjengelighet og avanserte nettverksfunksjoner |
Drift/vedlikehold | Automatiserer administrasjon av konfigurasjonsdrift, kontinuerlig overvåking og håndheving av ønsket status. Støtter sikkerhetskopiering, oppgraderinger og driftsoppgaver. | Strømlinjeformer appadministrasjon, skalering, oppgraderinger og driftsoppgaver som rullende oppdateringer og automatisk omstart for apper i container. |
Feilsøking/feilretting | Aktiverer konfigurasjonssynlighet, feilsøking og tilbakeføring for problemer | Aktiverer synlighet for containerapper, feilsøking, feilretting og logger/diagnostikk. |
Ansible brukstilfeller
IT-driftsteamet administrerer en stor infrastruktur med hundrevis av servere i flere datasentre. Med Ansible automatiserer de konsistente og sikre serveroppsett og prosesser som å administrere brukere, sette opp brannmurer og håndheve sikkerhetspolicyer.
Servere er gruppert etter roller og miljøer, og regelmessige playbook-kjøringer holder dem oppdaterte og kompatible. Ansible forenkler konfigurasjonsadministrasjon, reduserer manuelt arbeid og forbedrer sikkerhetssamsvar.
Kubernetes brukstilfeller
Et utviklingsteam bygger en mikrotjeneste-nettapplikasjon og distribuerer den med Kubernetes, konfigurerer nettverk, lagring og containere med Docker og manifester. Skalering, lastbalansering, selvhelbredelse og oppdateringer håndteres av Kubernetes. Det er enkelt å skalere opp eller ned, og dette garanterer feiltoleranse og høy tilgjengelighet.
Denne Kubernetes Deployment-ressursen distribuerer en nettapp med 3 replikaer. Etiketter indikerer applikasjonsforekomster, og beholderkonfigurasjoner er definert i malfeltet. Kubernetes administrerer skalering, lastbalansering, selvhelbredende og rullende oppgraderinger for en skalerbar, robust, feiltolerant og svært tilgjengelig app.
Administrasjonen er enklere med containere og Kubernetes, noe som sikrer enhetlig distribusjon og enkel skalering. Flere konfigurasjoner kan legges til etter behov for nettverk, lagring og andre behov.
For å konkludere
Selv om Ansible og Kubernetes er automatiseringsverktøy, ville det ikke være rettferdig å sammenligne dem direkte. Ansible hjelper til med å administrere konfigurasjoner og oppgaver på tvers av et bredt spekter av systemer, mens Kubernetes handler mer om containerorkestrering.
Hvis vi vurderer en tradisjonell IT-infrastruktur, vil Ansible være det riktige valget for å håndtere konfigurasjoner og distribusjoner. Kubernetes er imidlertid utmerket for moderne, skybaserte miljøer og administrasjon av containeriserte applikasjoner.
Begge verktøyene har sine styrker og kan i stor grad forbedre IT-automatisering og distribusjonsarbeidsflyter innen sine respektive ekspertiseområder. Å forstå deres unike formål og bruke dem deretter kan gi stor verdi for virksomheten din.