Knative: Serverløs rammeverk på Kubernetes – En komplett guide

De siste årene har serverløse rammeverk opplevd en markant økning i popularitet og bruk blant utviklere.

Samtidig er containerbaserte applikasjoner allerede etablert, og Kubernetes har også vunnet terreng i bedrifter.

Kubernetes er utvilsomt et kraftig verktøy med stort potensial. Økosystemet rundt det vokser stadig, med nye verktøy og teknologier som Knative, som er designet for å forbedre Kubernetes ytterligere.

Knative ble utviklet for å adressere problemer som kan føre til feil, og for å etablere en standard for skyplattformer og skybasert orkestrering.

Kort sagt, Knatives serverløse rammeverk kan vise seg å være en bedre løsning for en bedrifts behov enn andre skybaserte serverløse alternativer.

I denne veiledningen skal vi se nærmere på Knative, inkludert fordelene, bruksområdene, installasjonsprosessen, arbeidsflyten og mer.

La oss begynne!

Hva er Knative?

Knative er et serverløst rammeverk bygget på Kubernetes, som opprinnelig ble utviklet av Google. Det laster og kjører serverløse funksjoner basert på bedriftens spesifikke behov, og minimerer dermed ressursspill. Dette åpen kildekode-prosjektet legger til komponenter for distribusjon, kjøring og administrasjon av serverløse applikasjoner på Kubernetes.

Hovedmålet med Knative er å standardisere orkestrering på tvers av ulike plattformer. Dette gjøres gjennom integrasjon av funksjoner for containerisering, automatisk skalering, hendelseshåndtering og administrasjon av arbeidsbelastninger.

Tidligere fantes det mange andre åpen kildekode-løsninger i tillegg til Knative. Hver løsning hadde sin egen distribusjonsmetode, noe som kunne føre til fragmentering i markedet på grunn av mangel på standardiserte praksiser. Dette betydde at man måtte velge en bestemt leverandør for å få tilgang til spesifikke systemfunksjoner.

Imidlertid begynte migreringsproblemer å dukke opp. For å unngå slike utfordringer ble Knative introdusert. Hvis du sliter med å integrere bestemte oppgaver, kan Knative effektivt utføre dem innenfor den Kubernetes-baserte prosessen.

Knative består av tre hovedkomponenter:

  • Knative Build: Bygger containerbilder og gjør dem tilgjengelige fra kildekoden.
  • Knative Serving: Bruker Istio og Kubernetes for å koble til og distribuere disse containerbildene gjennom de tilordnede infrastrukturressursene.
  • Knative Eventing: Lar brukere definere hendelsestriggere og assosiere dem med containeriserte funksjoner.

Når Knative oppdager en hendelse, definerer den den tilhørende prosessen som skal kjøres ved behov. Med Knative er det ikke nødvendig å tildele containernoder, klynger eller pods for å utføre arbeid. Knative allokerer vertressurser kun når en spesifikk prosess er aktiv. Dette balanserer fordelene med serverløs teknologi og containerisering.

Kjernekonsepter for Knative

La oss se nærmere på de viktigste konseptene i Knative Serverless Framework og hvordan de forholder seg til Knative-primitivene.

Bygg

Knative Build hjelper til med å utnytte og utvide de eksisterende Kubernetes-primitivene, slik at du kan bygge containere fra kildekoden. Den henter kildekoden fra avhengigheter og lagringssteder, bygger containerbilder og registrerer dem.

Hendelser

Hendelseshåndtering bidrar til å skape bedre kommunikasjon mellom uavhengige hendelsesforbrukere og -produsenter for å bygge en hendelsesdrevet arkitektur. Knative setter disse hendelsene i en kø som kan utføres automatisk uten at utviklerne må skrive skript.

Disse hendelsene blir deretter levert til containerne, som igjen sender meldinger til hendelsesprodusentene for å utføre oppgaver. Dette reduserer utviklerens arbeidsmengde ved at de slipper å skrive kode for å etablere forbindelser.

Funksjoner

En funksjon er en uavhengig distribusjonsenhet og en Knative-serveringstjeneste, som en mikrotjeneste. Koden er skrevet for å utføre en enkelt oppgave, som for eksempel:

  • Behandling av en fil i en database
  • Lagring av en bruker i en database
  • Utføring av planlagt arbeid

Knative er designet for å gjøre det enkelt å utvikle og distribuere funksjoner effektivt, samt administrere dem.

Plugins

Du kan enkelt utvide eller overskrive funksjonaliteten til Knative ved hjelp av plugins. Hver serverless.yml-fil inneholder en plugin-egenskap som definerer de forskjellige pluginene som skal brukes.

Ressurser

Ressurser er de infrastrukturkomponentene som funksjonen din bruker, inkludert:

  • AWS SQS-hendelseskilde
  • En planlagt oppgave (kjøres hvert 5., 10. minutt osv.)
  • En Kafka-hendelseskilde

Og mer.

Tjenester

Tjenester kan ses på som prosjekter. En tjeneste er den organisatoriske enheten i Knative-rammeverket. Selv om du kan ha mange tjenester for én enkelt applikasjon, kan du tenke på tjenesten som en prosjektfil.

Det er her du definerer funksjonene, hendelsene og ressursene, alt i en enkelt fil med navnet serverless.yml, serverless.json eller serverless.js. Når du distribuerer tjenestene med det serverløse rammeverket, distribueres alt i filen samtidig.

Servering

Knative Serving er bygget på Istio og Kubernetes og støtter distribusjon av applikasjoner. Det muliggjør rask utvikling av serverløse containere, nettverksprogrammering og automatisk skalering for Istio-komponenter. Knative Serving behandler containere som en skalerbar tjeneste som kan variere fra én enkelt forekomst til flere containerforekomster.

Funksjoner i Knative

La oss se på noen av funksjonene til Knative serverløse rammeverk:

  • Knative er et Kubernetes-basert serverløst rammeverk som lar deg distribuere tjenester til Kubernetes.
  • Det er enkelt å integrere Knative med det støttede miljøet.
  • Utviklere kan bruke Kubernetes API direkte med Knative for å distribuere serverløse tjenester.
  • Det gjør det mulig for brukere å utløse serverløse tjenester ved hjelp av Knatives hendelsessystem.

Hvordan fungerer Knative?

Knative fungerer som en hendelseshåndteringskomponent og knytter sammen Istio og Kubernetes. Kubernetes fungerer som en orkestrator for mikrotjenester og containere. Istio, derimot, er en åpen kildekode-mesh-teknologi som kobler sammen ulike komponenter for å samhandle med brukerne og med hverandre.

Knative tilbyr brukere flere komponenter designet for å utføre grunnleggende daglige arbeidsoppgaver. Disse komponentene gjenbrukes i en rekke bruksområder. Utviklere kan bruke hvilket som helst programmeringsspråk, og trenger ikke spesifikk kunnskap om språk ettersom Knative kun gjenkjenner containerbilder.

Det er tre hovedkomponenter i Knative som er avgjørende for funksjonaliteten:

Bygging av nye containere

Byggekomponenten er ansvarlig for å bygge nye containere. Den kan konvertere kildekode til en container. Knative kan konfigureres for å imøtekomme spesifikke forretningsbehov.

Først henter Knative kildekoden fra et lagringssted som Github. Deretter legges de nødvendige avhengighetene til slik at koden kjører effektivt. Containerbilder bygges og legges til filer som er tilgjengelige for Kubernetes-plattformen.

Containeren gjøres tilgjengelig for utviklere som bruker Kubernetes og Knative. Dermed bygges containere så lenge kilden til koden er kjent.

Servering eller drift av plattformen

Serveringskomponenten er ansvarlig for driften av plattformen. Dette innebærer:

  • Konfigurasjon: Konfigurasjonen er sikret ved at den håndterer flere versjoner av tjenesten. Hver gang en ny funksjon distribueres til en container, lagrer Knative den eksisterende versjonen og oppretter en ny med de siste endringene og funksjonene. Knative definerer også tilstanden til en tjeneste.
  • Autoskalering: For at serverløse containere skal fungere optimalt, må de kunne skaleres automatisk opp eller ned. Knative kan autoskalere tjenester opp til mange forekomster ved behov.
  • Intelligent tjenesteruting: Dette er en viktig del av Knatives arbeidsmekanisme. Det lar utviklere kontrollere flyten og mengden trafikk til forskjellige eksisterende versjoner av mikrotjenestene. Intelligent tjenesteruting kan brukes når nye funksjoner og blå/grønne distribusjonsstrategier introduseres.

Dette lar deg eksponere en liten andel av brukerne for den nyeste testversjonen og gradvis rute mer trafikk til den nye versjonen.

Hendelseshåndtering for å definere funksjoner

Hendelseshåndteringskomponenten i Knative er ansvarlig for å beskrive funksjonaliteten til Knative. Det lar deg definere driften av containere basert på hendelser. Ulike hendelser utløser spesifikke funksjoner i containerne.

Utviklere kan definere hendelsestriggerne og de tilhørende containerne, og la Knative gjøre jobben sin. Knative håndterer oversikten over hendelser og levering av dem.

Fordeler med Knative

Knative leverer tjenester som ruteadministrasjon, trinnvis utrulling og tjenestetilkobling. Det har et stort fellesskap. La oss se hvordan Knative påvirker bedrifters beslutning om å ta i bruk denne teknologien.

  • I motsetning til andre løsninger, har Knative standardhendelser og er kompatibel med FaaS-løsninger. Det tilbyr et CloudEvent-standardrammeverk som hjelper med å designe serverløs arkitektur.
  • Selv om Knative ikke er en PaaS, lar det deg lage en serverløs PaaS med den serverløse orkestreringsplattformen.
  • Knative har en fullverdig og moden serverløs design.
  • Det støtter flere plattformer og gir en universell standard blant skyleverandører for å eliminere risikoen for å være låst til én bestemt leverandør.

  • Knative gir et fleksibelt rammeverk.
  • Det støtter gradvis utrulling.
  • Du kan oppleve det serverløse økosystemet i et containerisert miljø.
  • Knative fjerner avhengigheten av administrasjon og verktøy.
  • Du kan raskt migrere til andre skyleverandører som er integrert med Knative ved å implementere Kubernetes.
  • Det tilbyr en forespørselsdrevet databehandlingsmodell.
  • Det lar deg administrere arbeidsflyter som en tjeneste.
  • Med Knative kan du behandle IoT-data, kjøre tilgjengelighetssjekker og validere konfigurasjoner for sikkerhetsgruppene dine.
  • Det lar utviklere fokusere på kodingen og raskt lage iterativ kode.
  • Det sikrer at utviklere kan integrere nye versjoner.
  • Knatives hendelsesbaserte modell bidrar til å implementere design, inkludert abonnement, tilkobling til eksterne systemer og registrering.

Utfordringer med Knative (og noen løsninger)

Effektivitetsutfordringer

Et Knative-rammeverk som støtter de riktige applikasjonene, gir bedre ytelse til en minimal kostnad. En feil blanding av applikasjoner kan imidlertid resultere i høyere kostnader og underutnyttede containerressurser. Dette kan føre til dårlig applikasjonsytelse, som er den største utfordringen med Knative serverløs distribusjon.

Dermed kan en dårlig dimensjonert ressursgruppe eller feil applikasjoner undergrave mange av fordelene med Knative.

Du kan overvinne denne utfordringen ved å utføre tester for å verifisere ressursmengder og blandingen av applikasjoner på Knative. Mål hendelsesbelastningene ved å vurdere gjennomsnittlig og maksimal belastning for hver applikasjon og anslå det totale ressursforbruket. Gjenta dette for flere applikasjoner for å opprette og kjøre en prøvekonfigurasjon som kan validere estimatene.

Funksjonelle utfordringer

De funksjonelle utfordringene med Knative kan være:

  • Knative er avhengig av funksjoner som passer til en statsløs modell. Dette betyr at ingen data blir lagret i selve komponenten. Utvikling av funksjoner er ikke en vanskelig fase, men det krever en liten endring i tilnærmingen. Det betyr at en enkelt feil kan påvirke programvarens ytelse negativt.
  • Forretningsdata består av transaksjoner i flere trinn, og statsløse funksjoner må opprettholde kontekst på tvers av alle trinnene. Knative har ikke den muligheten som de offentlige skybaserte serverløse verktøyene tilbyr.

Regelmessig overvåkning og feilretting kan hjelpe deg med å opprettholde ytelsen på et akseptabelt nivå.

Operasjonelle utfordringer

Sammenlignet med serverløse tilbud i en offentlig sky, er det en driftsutfordring med Knative. Administratorer kontrollerer ikke de underliggende serverne med den offentlige skyen. I stedet må de administrere servere sammen med Kubernetes, containere, Knative og Istio selv.

Knative øker drifts- og utviklingskompleksiteten minimalt for selskaper som allerede bruker Kubernetes og containere. De som bruker service mesh og mikrotjenester vil se på Knative som en naturlig utvidelse av det eksisterende.

Bruksområder for Knative

For applikasjoner som genererer et varierende antall hendelser innenfor eller utenfor definerte tidsgrenser, er Knative et godt valg. Spesifikke bruksområder for Knative serverløse rammeverk inkluderer:

Hendelsesorientering er avgjørende. Hvis IT-team ikke ser på en applikasjon som en serie hendelser i stedet for transaksjoner, er kanskje ikke Knative det beste valget på grunn av funksjonelle årsaker og effektivitetshensyn.

Forutsetninger og installasjon av Knative

Som vi har sett i avsnittene ovenfor, er Knative et sett med komponenter som hendelseshåndtering og servering som kjører på en servicemesh og en klynge for arbeidsbelastningsorkestrering. Det finnes kommandolinjeverktøy som må installeres for å forenkle driften. Derfor trenger vi noen få forutsetninger for å fortsette med installasjonen.

Forutsetninger

Det finnes flere alternativer for å installere Kubernetes. Docker Desktop kan brukes til å sette opp en enkel Kubernetes-klynge som kan brukes til ulike formål. En enkel tilnærming er å bruke Kubernetes i Docker for å kjøre Kubernetes-klyngen sammen med Docker-containernodene. Den enkleste måten å jobbe med klyngen på er å bruke Knatives kommandolinjeverktøy.

Knative CLI tilbyr et enkelt og raskt grensesnitt for å opprette ressurser. Det hjelper med komplekse oppgaver som trafikkfordeling og autoskalering. Den enkleste måten er å laste ned den kompatible binærfilen fra GitHub-siden.

Installasjon

Når alle forutsetningene er på plass, kan vi begynne å installere komponentene. For utviklingsmiljøet finnes det en hurtigstart-plugin. Denne pluginen hjelper deg med å installere en lokal Knative-klynge ved hjelp av Knative-klienten. Du kan laste ned hurtigstart-pluginen fra den offisielle utgivelsessiden.

Konklusjon: Fremtiden for Knative

Knative har endret serverløs databehandling ved å tilby automatisk skalering av applikasjoner. Det har en betydelig innvirkning på interoperable og modulære systemer.

I fremtiden forventes det at Knative vil tette gjenværende hull og bli en av de mest effektive teknologiene for å kjøre serverløs arkitektur.

Knative-teknologien er mer innflytelsesrik for utviklere på grunn av fordelene den gir i forhold til andre serverløse alternativer. Knative vil spare deg for mye tid ved å eliminere behovet for å bygge og vedlikeholde Kubernetes-utvidelser. Utviklere er svært fornøyd med Knative-teknologien ettersom den er enkel å bruke og et godt alternativ til serverløse løsninger.

Hvis du ønsker å maksimere ytelsen i Kubernetes-miljøet i dine skybaserte arbeidsflyter, bør du vurdere å ta i bruk Knative-teknologien og se fordelene selv.