Kubernetes for nybegynnere: Kom i gang med denne enkle guiden!

Kubernetes, ofte forkortet til K8s, er den mest populære åpen kildekode-løsningen for å automatisere prosesser knyttet til utvikling og drift av containere.

En årlig studie fra Cloud Native Computing Foundation (CNCF) viser at hele 96 % av organisasjoner benytter seg av K8s eller vurderer å ta det i bruk. Over 5,8 millioner utviklere globalt bruker Kubernetes, noe som utgjør 31 % av alle backend-utviklere i verden.

Kubernetes er foretrukket for sin evne til å forbedre teknologi gjennom økt skalerbarhet, tilgjengelighet og raskere distribusjonstider. Mens mange utviklere starter sin containerreise med Docker (et verktøy som primært benytter et kommandolinjegrensesnitt for å samhandle med containere, én om gangen), tilbyr K8s avanserte abstraksjoner. Dette gjør det mulig å definere applikasjoner og deres infrastruktur gjennom konfigurasjonsfiler, som kan brukes i samarbeid.

Dersom du er ny til Kubernetes, er denne artikkelen skrevet for å hjelpe deg med en introduksjon og dele viktig innsikt for å komme i gang. Du vil lære hvordan K8s kan gi digital produktutvikling et betydelig løft.

Hva er Kubernetes, og hvorfor er det nødvendig?

Kubernetes er en åpen kildekode-plattform for orkestrering av containere. Det automatiserer distribusjon, skalering og administrasjon av applikasjoner som kjører i containere, og sikrer forutsigbarhet og høy tilgjengelighet.

La oss tenke oss en applikasjon som er pakket inn i en container. For å betjene brukerne dine, trenger du å kjøre flere containere. Utfordringen oppstår når disse containerne må administreres. Containerne befinner seg kanskje ikke på samme maskin, noe som gjør oppgaven enda mer komplisert. Hva er da løsningen på dette?

Kubernetes kommer til unnsetning og tilbyr en effektiv metode for å håndtere alle disse prosessene sømløst. Selv om K8s kan sammenlignes med en containerplattform som Docker, er det først og fremst en containerorkestrator. Som ny utvikler trenger du ikke å bekymre deg for de interne mekanismene for orkestrering i K8s. Det er lite sannsynlig at du vil sette opp en K8s-klynge for din egen applikasjon; mer om dette senere.

Du vil i stedet samhandle med klynger som ditt infrastrukturteam har konfigurert. Derfor er det viktig å bli kjent med de objektene du skal arbeide med. Men før det, trenger du en grunnleggende forståelse av arkitekturen for å se hva som foregår bak kulissene.

Funksjoner i Kubernetes

Kubernetes tilbyr en rekke funksjoner for å kjøre containere og relatert infrastruktur. Her er en oversikt:

  • Automatisert distribusjon, skalering og tilbakeføring: K8s automatiserer opprettelsen av det ønskede antallet kopier, fordeler dem over relevant maskinvare, og flytter containere dersom en node går ned. Skalering av antall kopier kan skje automatisk basert på behov eller endringer i f.eks. CPU-bruk.
  • Tjenesteoppdagelse, lastbalansering og nettverksstyring: Kubernetes tilbyr avanserte nettverksløsninger, inkludert intern tjenesteoppdagelse og eksponering av containere eksternt.
  • Applikasjoner med og uten tilstand: Tidligere fokuserte K8s primært på tilstandsløse containere. Nå støtter teknologien også innebygde objekter for applikasjoner med tilstand. Det betyr at de fleste typer applikasjoner kan kjøres i Kubernetes.
  • Lagringshåndtering: Kubernetes tilbyr (abstrakt) vedvarende lagring for applikasjoner i containere, uavhengig av om det er på et lokalt filsystem, i et delt nettverk eller i skyen. Abstraksjonen gjør det mulig å definere lagringsbehov uavhengig av den underliggende infrastrukturen. Dette oppnås ved hjelp av prinsipper som persistent volumes (PV), persistent volume claims (PVC), lagringsklasser og volumplugins, men dette går utenfor omfanget av denne artikkelen.
  • Deklarativ tilstand: K8s bruker YAML-filer, såkalte objektmanifest, for å definere ønsket tilstand for klyngen. Manifestene beskriver hvordan klyngen skal se ut, inkludert antall applikasjonsinstanser og nettverksregler. K8s håndterer automatisk alle overganger basert på manifestene, uten at du trenger å skrive skript.
  • Fleksible arbeidsmiljøer: Kubernetes kan brukes i skyen, på utviklerens arbeidsstasjon og i de fleste andre miljøer. De største leverandørene av skytjenester som Amazon Web Services, Google Cloud og Microsoft Azure tilbyr alle administrerte Kubernetes-tjenester, mens løsninger som Minikube og K3s er tilgjengelige for lokal bruk.
  • Utvidbarhet: K8s har et stort sett med funksjoner, men du kan også utvide funksjonaliteten. Du kan bygge tilpassede objekttyper, operatører og kontrollere for å optimalisere dine arbeidsbelastninger.

Kubernetes arkitektur

Kjernen i Kubernetes arkitektur består av en hovednode (master node) og flere arbeidsnoder (worker nodes). Hovednoden leder klyngen, mens arbeidsnodene kjører applikasjonene basert på instruksjonene fra hovednoden.

Kilde: kubernetes.io

Her er en mer detaljert beskrivelse.

Hovednoden(e)

Hovednoden styrer klyngens tilstand og bestemmer hva hver enkelt node skal gjøre. Flere prosesser er nødvendige for å sette opp hovednoden.

  • API-server
    All kommunikasjon i klyngen går via API-serveren. Dette er inngangsporten for alle klyngekomponenter for å utveksle informasjon. Den eksponerer Kubernetes API og har to hovedroller: For det første fungerer den som et grensesnitt for brukere som interagerer med klyngen, for eksempel ved bruk av Kubectl. For det andre håndterer den autentisering og validering av forespørsler, slik at bare autoriserte brukere kan utføre operasjoner.
  • Planlegger (Scheduler)
    Planleggeren bestemmer hvilke arbeidsnoder som skal kjøre applikasjoner eller Kubernetes-arbeidsbelastningsobjekter. Den plasserer pods på nodene basert på ressursbehov. En pod er den minste enheten for distribusjon i Kubernetes.
  • Kontrolleradministrator (Controller Manager)
    Denne komponenten overvåker klyngen, inkludert nodefeil, og sørger for at det riktige antallet pods kjører. Den oppdager endringer i klyngen, for eksempel at pods dør, og forsøker å gjenopprette podene til sin opprinnelige tilstand. For eksempel, hvis en pod dør uventet, gir kontrolleradministratoren planleggeren beskjed om å sette opp en ny pod som erstatning, og kubelet starter den nye poden.
  • etcd
    etcd kan betraktes som klyngens «hjerne». Dette er et nøkkelverdi-lager for klyngekonfigurasjonen. Alle endringer i klyngen lagres her. Du kan sikkerhetskopiere klyngen ved å lagre det distribuerte nøkkelverdi-lageret. Merk at bare klyngens tilstandsinformasjon lagres her, ikke applikasjonsdata. etcd sørger for at de øvrige prosessene er klar over klyngens tilstand.

Arbeidsnoden(e)

Hver arbeidsnode har tre prosesser installert som lar K8s samhandle med den og kjøre pods i hver node. Disse prosessene er:

  • Kubelet
    Dette er Kubernetes sin primære tjeneste for containerutførelse. Uten kubelet ville Kubernetes bare være et REST API med et nøkkelverdi-lager. Som standard kjører K8s containerapplikasjonen. Containere er alltid isolert fra hverandre og det underliggende vertssystemet. Dette gjør det lettere å skille applikasjonsadministrasjon fra den fysiske eller virtuelle infrastrukturen.
  • Selv om API-tilgangskontrollen kan avvise pods eller legge til begrensninger, er kubelet det som til syvende og sist bestemmer hvilke pods som kjører på en bestemt node, og ikke planleggeren eller Daemonsets. Kubelet samhandler med noden og containeren, leser konfigurasjonsfiler, og starter pods ved hjelp av container-runtime.

  • Container-runtime
    Dette er komponenten som faktisk kjører containerne. Eksempler er Docker, rkt og containerd.
  • Kube-proxy
    Denne komponenten sørger for et abstraksjonslag for nodepodgrupper. Den brukes til lastbalansering. Alle noder bruker Kube-proxy for å tilby en virtuell IP-adresse for klienter som tilgang til dynamiske pods. Denne strukturen gir lastbalansering med lav ytelse.

Hvordan containerisering fungerer

Containerisering innebærer å virtualisere alle nødvendige deler av en programvareapplikasjon i en enhet. En container består av biblioteker, binærfiler og alle nødvendige applikasjonskonfigurasjoner. Den inkluderer imidlertid ikke kjerneressurser eller virtualisert maskinvare.

Container-runtime virtualiserer ressurser «på toppen» av operativsystemet. Siden containere bare inneholder de nødvendige komponentene og applikasjonsavhengighetene, er de lette og raskere sammenlignet med virtuelle maskiner.

Les også: Containere vs. Virtual Machines: Explaining the Differences

Hvordan installere og konfigurere Kubernetes

Etter å ha brukt mye tid på teori, går vi over til det praktiske og installasjon. Denne veiledningen dekker spesielt installasjon på Windows.

Det finnes flere måter å installere Kubernetes på Windows, enten via kommandolinjen eller grafisk brukergrensesnitt. Før du starter installasjonen, må du forsikre deg om at du oppfyller følgende krav:

Maskinvaren krever en hovednode med minst 2 GB RAM og 700 MB for hver arbeidsnode. Programvarekravene inkluderer Hyper-V, Docker for desktop, en unik MAC-adresse og en unik produkt-UUID for hver node. Her er en steg-for-steg fremgangsmåte.

Installere og konfigurere Hyper-V

Hyper-V er standard virtualiseringsprogramvare i Windows. Den lar deg administrere virtuelle maskiner både via det grafiske grensesnittet og kommandolinjen. Følg disse trinnene for å aktivere Hyper-V.

  • Åpne kontrollpanelet.
  • Klikk på «Programmer».
  • Klikk på «Slå Windows-funksjoner på eller av» under «Programmer og funksjoner».
  • Velg «Hyper-V» og «Hypervisor»-funksjoner for Windows.
  • Klikk «OK». Maskinen vil starte på nytt for å aktivere de nye innstillingene.

Noen ganger kan PC-en starte på nytt flere ganger for å sikre korrekt konfigurering. Du kan bekrefte at installasjonen var vellykket ved å kjøre følgende kommando i Power Shell:

Get-WindowsOptionalFeature -Online -Funksjonsnavn Microsoft-Hyper-V

Skjermen skal vise en «Aktivert»-status.

Installere Docker

Som nevnt tidligere er K8s et containerorkestreringsverktøy som er bygget på toppen av containere. I dette tilfellet er Docker et godt valg. K8s kommuniserer med Docker for å administrere containerne. Start med å laste ned Docker for Windows. Docker Desktop er foretrukket for å forenkle utviklingen, distribusjonen og driften av dockeriserte (containeriserte) applikasjoner.

Det er også den raskeste måten å bygge Docker-apper på Windows ved hjelp av Hyper-V og nettverk. Etter vellykket installasjon er Docker tilgjengelig i alle terminaler så lenge den kjører. Sjekk den offisielle Docker-dokumentasjonen for en detaljert installasjonsveiledning. Om du får problemer med at ikonet forsvinner, kan det løses ved å starte maskinen på nytt.

Installere Kubernetes

Docker GUI lar deg konfigurere innstillinger, installere og aktivere Kubernetes. Følg disse trinnene for å installere K8s:

  • Høyreklikk på Docker-ikonet og velg «Innstillinger».
  • Velg «Kubernetes» på venstre side og klikk «Bruk».

Docker vil da installere tilleggspakker og avhengigheter. Prosessen tar omtrent fem til ti minutter, avhengig av internetthastigheten din. Du kan bruke Docker-appen for å bekrefte at alt fungerer som det skal.

Siden Kubernetes-apper kan distribueres ved hjelp av CLI, kan det være nødvendig å installere K8s-dashbordet, som ikke er installert som standard. Installer dashbordet ved å følge disse trinnene:

  • Last ned YAML-konfigurasjonen.
  • Distribuer applikasjonen ved å bruke denne koden: Kubectl apply -f .recommended.yaml
  • Bekreft at alt er satt opp korrekt ved hjelp av: kubectl.exe get -f .recommended.yaml.txt

For å få tilgang til dashbordet, kjør følgende kommando i Power Shell (ikke CMD):

  • Kjør denne koden: ((kubectl -n kube-system describe secret default | Select-String «token:») –split » +» )[1]
    • Kopier tokenet og kjør: kubectl proxy
  • Åpne denne lenken i nettleseren din.
  • Klikk på «Token» og lim inn tokenet.
  • Logg inn.

Dersom du har fulgt alle stegene, vil K8s-dashbordet nå vises. Du kan nå administrere applikasjonene dine uten å måtte bruke CLI.

Les også: Slik installerer du Kubernetes på Ubuntu 18

Hvordan opprette og administrere en Kubernetes-klynge

Dersom du har kommet hit, skal Kubernetes være installert på din maskin. Følg disse trinnene for å opprette og administrere klyngen:

  • Konfigurer nettverk: Her må du konfigurere nettverk mellom klyngens noder, slik at de kan kommunisere med hverandre.
  • Konfigurer autentisering: Lag autentiserings- og autorisasjonsmekanismer for klyngetilgang.
  • Sett opp hovedkomponenter: API-server, planlegger og kontrolleradministrator.
  • Koble til arbeidsnoder: Koble arbeidsnodene til klyngen med konfigurasjonsfiler.
  • Installer tillegg: Du kan installere utvidelser for å utvide klyngens funksjonalitet.
  • Administrer arbeidsbelastninger: Nå er det tid for å distribuere applikasjonene dine.

Dette er kun en oversikt over prosessen for å opprette en klynge, som inneholder mange trinn med flere kommandoer. Her er den offisielle dokumentasjonen for hvordan du oppretter en klynge før distribusjon. Den burde fungere som din veiledende hånd.

Slik distribuerer du din første applikasjon med Kubernetes

Den vanligste kommandoen når du bruker K8s er kubectl handling ressurstype, som gjør det mulig å utføre spesifikke handlinger som å opprette eller slette en spesifisert ressurs.

Dersom du trenger hjelp, kan du skrive inn --help etter en kommando for å få mer informasjon.

Eksempel: Kubernetes get nodes --help. Du distribuerer din første K8s-app ved å bruke kommandoen kubectl create deployment kubernetes-bootcamp --image=gcr.io/google-samples/kubernetes-bootcamp:v1.

Oppsummering

Denne guiden har gitt deg en introduksjon til Kubernetes-teknologi. Du har lært om fordelene, funksjonene og arkitekturen til Kubernetes. Forhåpentligvis har du fått en oversikt over hvordan ting fungerer i praksis, og kunnet referere til noen tips (eksterne ressurser) for å komme i gang.

Selv om det kan virke overveldende å forstå hele teknologistabelen som nybegynner, har denne artikkelen gitt deg en fin start med K8s. Du trenger litt øvelse for å bli komfortabel med teknologien, så det er anbefalt å bruke den offisielle Kubernetes-dokumentasjonen som din referanse. Jo mer du øver, jo raskere blir du en ekspert på K8s.

Du kan sjekke ut Kubernetes-opplæringen for nybegynnere for å lære mer.