Programmering

5 måter å gjøre serverløs på Kubernetes

Kall det "serverløs", kaller det "hendelsesdrevet beregning", eller kaller det "fungerer som en tjeneste (FaaS)", ideen er den samme: Alloker ressurser dynamisk til å kjøre individuelle funksjoner, i hovedsak mikrotjenester, som påkalles som svar til arrangementer. Serverløse databehandlingsplattformer lar applikasjonsutviklere fokusere på appen, ikke den underliggende infrastrukturen og alle ledelsesdetaljene.

De fleste skyleverandører tilbyr en slags serverløs plattform, men du kan bygge en selv med bare to ingredienser. Den ene er Kubernetes, container orkestreringssystemet som har blitt en standard plattform for å bygge komponentiserte, elastiske applikasjoner. Den andre er hvilken som helst av et antall systemer som brukes til å bygge serverløse applikasjonsmønstre i Kubernetes.

De fleste serverløse rammeverk for Kubernetes har disse funksjonene til felles:

  • Distribuerer til ethvert miljø som støtter Kubernetes, lokalt eller eksternt, inkludert miljøer som OpenShift.
  • Støtter kjører kode skrevet på hvilket som helst språk, med noen vanlige kjøretider ferdigpakket med rammeverket.
  • Utløser kjøring av kode ved mange slags hendelser - et HTTP-sluttpunkt, en kømelding eller en annen krok.

En stor fordel med å bygge serverløs på Kubernetes er å få langt større kontroll over den underliggende plattformen. Mange serverløse tilbud begrenser oppførselen til funksjonene de kjører, og noen ganger gjør visse klasser av applikasjoner upraktiske. Med Kubernetes kan du opprette en serverløs plattform som samsvarer med dine behov, og overlate infrastruktur til Kubernetes-operatørene og la utviklerne fokusere på å skrive viktig kode.

Her er fem av de store prosjektene som bringer serverløs funksjonalitet til Kubernetes.

Fisjon

Fisjon er opprettet og vedlikeholdt av det administrerte Kubernetes-selskapet Platform 9. Dens viktigste krav til berømmelse er at det lar deg lage FaaS-applikasjoner uten å måtte bygge containere, bare ved å levere definisjonsfiler.

Fission kan installeres med eller uten et Helm-diagram, og kan installeres i en av to utgaver. Det er en fullverdig versjon med meldingskø og InfluxDB-støtte for logging, og en strippet utgave med grunnleggende funksjonsservering. Førstnevnte er designet for produksjonsutrulling, og sistnevnte for å få føttene våte.

For å legge til kode i en Fission-distribusjon, bruker du YAML-baserte spesifikasjonsfiler. Med Fisjonens kommandolinjeverktøy kan du opprette YAML-filer for funksjonene dine og rutene som brukes til å utløse inngangspunkter. Spesifikasjonsfilen lar deg også gi miljøvariabler, hjelpebeholdere, volumer og Kubernetes taint / tolerasjonskontroller for koden.

Fisjon gir også "arbeidsflyter." Installert av Helm-diagram, overfører arbeidsflyter utdataene fra en funksjon til en annen funksjon. Funksjonene trenger ikke engang å være på samme språk. Vær oppmerksom på at dette har en ytelseskostnad, ettersom utgangene til hver funksjon blir gjengitt i et utvekslingsformat, selv om arbeidsflytsystemet støtter mange vanlige primitive binære typer for å holde overhead nede (f.eks. Et heltall eller en generisk byte-strøm).

En av ulempene som opprinnelig var forbundet med FaaS, var at første gang en funksjon ble påkalt, var det en merkbar forsinkelse med å starte beholderen tilknyttet den. Fisjon holder beholdere forvarmet for å minimere ventetid første gang en funksjon kjører.

Fission tilbyr andre bekvemmeligheter for både utviklere og administratorer. Tjenesten kan distribueres i en klynge som ikke har ekstern internettilgang, og koden kan lastes varmt inn i klyngen på forespørsel. Funksjonsaktivitet kan også spilles inn og spilles på nytt for å hjelpe til med feilsøking.

Fission-prosjektet er tilgjengelig under den meget liberale Apache-lisensen, så kan omarbeides fritt etter behov.

Kniv

Opprinnelig opprettet av Google for å kjøre serverløse apper på Kubernetes, fokuserer Knative på mønstre som er vanlige for serverløse distribusjoner i produksjonen. Knative krever direkte kompetanse med å administrere mange Kubernetes-komponenter for å bruke effektivt.

I tillegg til Kubernetes krever Knative et rutesystem eller servicenett som Istio, men andre alternativer som Ambassador og Gloo kan også brukes. Dette betyr litt mer jobboppsett, men prosjektet har detaljerte guider for bruk av hvert alternativ i en rekke skytjenester og Kubernetes-miljøer, inkludert vanilje Kubernetes.

Knative fungerer hovedsakelig ved å utnytte eller utvide eksisterende Kubernetes verktøy og funksjonalitet. Apper, eller funksjoner, konfigureres ved hjelp av YAML-filer og leveres som Docker-containere som du bygger. Legge til, endre eller slette definisjoner gjøres gjennom kubectl kommandolinjeapp. For beregninger på Knative-apper, bruk Grafana. Skalering kan gjøres med Knatives egen autoskaler, eller med hvilken som helst annen Kubernetes-kompatibel skaler, inkludert en spesialskrevet.

Knative er under tung utvikling, og mange av dets dedikerte verktøy er fremdeles i grov tilstand. Disse inkludererknctl, en CLI spesielt for Knative, som sparer deg for bryet med å bruke Kubernetes andre verktøy for å administrere Knative hvis du bare vil fokusere på Knative; og ko, et verktøy for å bygge Go-apper på Knative ved å eliminere trinnet for bygging av containere.

Kubeless

Kubeless ble opprettet av Bitnami, utviklerne av enkle installatører for vanlige webapplikasjonsstabler. Kubeless bruker Kubernetes originale tilpassede ressursdefinisjoner for å håndtere funksjoner, så det er litt mindre abstraksjon mellom Kubernetes-metaforer og Kubeless-funksjonalitet.

De vanligste språketidene kommer med plattformen: .NET, Java, Python, Node.js, PHP, Ruby, Go og til og med det nye Ballerina-språket for utvikling av cloud-native. Runtimes er bare Docker-bilder, selv om Kubeless har et spesifikt emballasjeformat for bruk av Dockerfiles til å lage tilpassede kjøretider.

En annen hendig Kubeless-funksjon er dens CLI, som er kommando-identisk med AWS Lambda CLI. Dette er utrolig praktisk hvis du vil migrere bort fra AWS Lambda, men du vil bevare noen av eksisterende ledelseskript, eller bare ikke trenger å lære et helt nytt kommandosett.

Kubeless fungerer også som en plug-in for Serverless Framework, et system for å bygge serverløse applikasjoner på en rekke arkitekturer. Hvis du allerede bruker Serverless eller Kubeless, har du lettere tid å legge til en enn å bruke noe annet.

OpenFaaS

Tonehøyde for OpenFaaS er "serverløse funksjoner gjort enkle." Med enkle ord betyr utviklerne "ikke mye vanskeligere enn å distribuere en Docker-container."

OpenFaaS kan distribueres til Kubernetes eller til en Docker Swarm-klynge (for lokal testing eller bruk med lite behov). Du bruker OpenFaaS CLI til å bygge, skyve og distribuere Docker-bilder i klyngen for å kjøre funksjoner. Eksisterende maler gir forhåndsdefinerte måter å distribuere apper skrevet i Go, Python, Node.js, .NET, Ruby, Java eller PHP 7, selv om du alltid kan rulle dine egne. OpenFaaS CLI gir deg også måter å administrere hemmeligheter i klyngen din, mens det innebygde brukergrensesnittet på nettet lar deg lage nye funksjoner og administrere dem.

En annen versjon av OpenFaaS, OpenFaaS Cloud, pakker OpenFaaS med funksjoner for flere utviklere, inkludert integrasjon med Git (inkludert GitHub og selvstyrte utgaver av GitLab), CI / CD, hemmelighetsadministrasjon, HTTPS, og muligheten til å mate hendelser til Slack og andre synker. OpenFaas Cloud er tilgjengelig som et gratis open source-produkt, og i en vertsversjon som for øyeblikket er gratis å bruke.

OpenWhisk

Apache OpenWhisk faktureres som en generisk serverløs plattform. Kubernetes er bare ett av flere tilgjengelige alternativer for å kjøre containere i OpenWhisk, ettersom OpenWhisk også støtter Mesos og Docker Compose. Likevel foretrekkes Kubernetes på grunn av verktøyet for distribusjon av apper, spesielt Helm-diagrammer. IBM Cloud Functions er basert på OpenWhisk-prosjektet, slik at det også kan fungere med OpenWhisk CLI-kommandoer.

I motsetning til de fleste andre serverløse Kubernetes-rammeverk, er OpenWhisk skrevet på Scala-språket, ikke Go (som både Kubernetes og Docker er skrevet på). Dette er sannsynlig bare et problem hvis du vil hacke på OpenWhisk, og du bare har erfaring med Go.

De fleste av de populære programkjøringsalternativene leveres ferdigpakket med OpenWhisk: Java, Node.js, Python, Ruby, PHP og .NET. I tillegg er mange esoteriske og banebrytende alternativer også inkludert: Scala, Ballerina, Swift og Rust. Runtimes er bare Docker-containere, så det er enkelt å skaffe dine egne.

En praktisk distribusjonsfunksjon for OpenWhisk er "zip-handlinger." Pek et .zip-arkiv med kode og hjelpefiler til OpenWhisk ved hjelp av manifestfilen for en kodepakke, og OpenWhisk vil opprette en handling fra den. OpenWhisk CLI inneholder også verktøy for å transformere et katalogtreet med kode til et slikt arkiv. Og en katalog med servicepakker gjør det enkelt å koble applikasjonen til vanlige tredjeparts tilbud som GitHub, Slack, Apache Kafka eller Jira.

$config[zx-auto] not found$config[zx-overlay] not found