Programmering

5 måder at gøre serverløs på Kubernetes

Kald det "serverløs", kald det "hændelsesdrevet beregning" eller kald det "fungerer som en tjeneste (FaaS)", ideen er den samme: alloker ressourcer dynamisk til at køre individuelle funktioner, i det væsentlige mikroservices, der påberåbes som svar til begivenheder. Serverløse beregningsplatforme tillader applikationsudviklere at fokusere på appen, ikke den underliggende infrastruktur og alle dens ledelsesoplysninger.

De fleste cloud-udbydere tilbyder en slags serverløs platform, men du kan selv bygge en med kun to ingredienser. Den ene er Kubernetes, container orkestreringssystemet, der er blevet en standardplatform til opbygning af komponenter, elastiske applikationer. Det andet er et hvilket som helst af et antal systemer, der bruges til at oprette serverløse applikationsmønstre i Kubernetes.

De fleste af de serverløse rammer til Kubernetes har disse funktioner til fælles:

  • Implementerer til ethvert miljø, der understøtter Kubernetes, lokalt eller eksternt, herunder miljøer som OpenShift.
  • Understøtter kørende kode skrevet på ethvert sprog, med nogle almindelige driftstider, der er forudpakket med rammen.
  • Udløser udførelsen af ​​kode ved mange slags begivenheder - et HTTP-slutpunkt, en kømeddelelse eller en anden krog.

En stor fordel ved at oprette serverløs på Kubernetes er at få langt større kontrol over den underliggende platform. Mange serverløse tilbud begrænser funktionsmåden for de funktioner, de kører, og nogle gange gør visse klasser af applikationer upraktiske. Med Kubernetes kan du oprette en serverløs platform, der matcher dine behov, hvilket giver infrastruktur til dine Kubernetes-operatører og lader dine udviklere fokusere på at skrive vigtig kode.

Her er fem af de største projekter, der bringer serverløs funktionalitet til Kubernetes.

Fission

Fission oprettes og vedligeholdes af det administrerede Kubernetes-selskab Platform 9. Dets vigtigste krav til berømmelse er, at det giver dig mulighed for at oprette FaaS-applikationer uden at skulle bygge containere, bare ved at levere definitionsfiler.

Fission kan installeres med eller uden et Helm-diagram og kan installeres i en af ​​to udgaver. Der er en fuldblæst version med meddelelseskø og InfluxDB-understøttelse til logning og en afskåret udgave med grundlæggende funktionsservering. Førstnævnte er designet til produktionsinstallationer, og sidstnævnte til at få dine fødder våde.

For at tilføje kode til en Fission-implementering bruger du YAML-baserede spec-filer. Med Fisions kommandolinjeværktøj kan du oprette YAML-filer til dine funktioner og de ruter, der bruges til at udløse deres indgangspunkter. Specifikationsfilen giver dig også mulighed for at give miljøvariabler, hjælpebeholdere, volumener og Kubernetes-pletter / tolerancekontrol for koden.

Fission giver også "arbejdsgange". Installeret af Helm-diagram overfører arbejdsgange output fra en funktion til en anden funktion. Funktionerne behøver ikke engang at være på samme sprog. Bemærk, at dette koster en præstationsomkostning, da hver funktions output gengives i et udvekslingsformat, selvom workflow-systemet understøtter mange almindelige primitive binære typer for at holde overhead nede (f.eks. Et heltal eller en generisk byte-strøm).

En af ulemperne, der oprindeligt var forbundet med FaaS, var at første gang en funktion blev påberåbt, var der en mærkbar forsinkelse med at starte containeren, der var tilknyttet den. Fission holder beholdere forvarmede for at minimere ventetid, første gang en funktion kører.

Fission tilbyder andre bekvemmeligheder for både udviklere og administratorer. Tjenesten kan distribueres i en klynge, der ikke har nogen ekstern internetadgang, og koden kan genindlæses i klyngen efter behov. Funktionsaktivitet kan også registreres og afspilles igen for at hjælpe med fejlretning.

Fission-projektet er tilgængeligt under den meget liberale Apache-licens, så det kan omarbejdes frit efter behov.

Kniv

Oprindeligt oprettet af Google til at køre serverløse apps på Kubernetes, fokuserer Knative på mønstre, der er fælles for serverløse implementeringer i produktionen. Knative kræver dog direkte ekspertise med styring af mange Kubernetes-komponenter, der skal bruges effektivt.

Ud over Kubernetes kræver Knative et routing-system eller servicenet som Istio, men andre muligheder som Ambassador og Gloo kan også bruges. Dette betyder lidt mere opsætning af arbejde, men projektet har detaljerede guider til brug af hver mulighed i en række skytjenester og Kubernetes-miljøer, herunder vanilje Kubernetes.

Knative fungerer hovedsageligt ved at udnytte eller udvide eksisterende Kubernetes værktøj og funktionalitet. Apps eller funktioner konfigureres ved hjælp af YAML-filer og leveres som Docker-containere, som du bygger. Tilføjelse, ændring eller sletning af definitioner sker via kubectl kommandolinjeapp. For metrics on Knative apps, brug Grafana. Skalering kan udføres med Knatives egen autoskaler eller med enhver anden Kubernetes-kompatibel scaler inklusive en specialskrevet.

Knative er under kraftig udvikling, og mange af dens dedikerede værktøjer er stadig i en hård tilstand. Disse inkludererknctl, en CLI specifikt til Knative, som sparer dig besværet med at bruge Kubernetes andre værktøjer til at styre Knative, hvis du bare vil fokusere på Knative; og ko, et værktøj til opbygning af Go-apps på Knative ved at eliminere containerbygningstrinnet.

Kubeless

Kubeless blev oprettet af Bitnami, udviklerne af nemme installationsprogrammer til almindelige webapplikationsstakke. Kubeless bruger Kubernetes native Custom Resource Definitions til at håndtere funktioner, så der er lidt mindre abstraktion mellem Kubernetes-metaforer og Kubeless-funktionalitet.

Mest almindelige sprogkørselstider kommer med platformen: .NET, Java, Python, Node.js, PHP, Ruby, Go og endda det nye Ballerina-sprog til cloud-native-udvikling. Runtimes er bare Docker-billeder, selvom Kubeless har et specifikt emballeringsformat til brug af Dockerfiles til at oprette brugerdefinerede driftstider.

En anden praktisk Kubeless-funktion er dens CLI, som er kommando-identisk med AWS Lambda CLI. Dette er utroligt praktisk, hvis du vil migrere væk fra AWS Lambda, men du vil bevare nogle af de eksisterende management-scripting eller bare ikke behøver at lære et helt nyt kommandosæt.

Kubeless fungerer også som et plug-in til Serverless Framework, et system til opbygning af serverløse applikationer på en række arkitekturer. Hvis du allerede bruger Serverless eller Kubeless, har du lettere ved at tilføje en af ​​dem end at bruge noget andet.

OpenFaaS

Tonehøjden for OpenFaaS er "serverløse funktioner gjort enkle." Ved simpel betyder udviklerne "ikke meget vanskeligere end at implementere en Docker-container."

OpenFaaS kan distribueres enten til Kubernetes eller til en Docker Swarm-klynge (til lokal test eller brug med lav efterspørgsel). Du bruger OpenFaaS CLI til at opbygge, skubbe og distribuere Docker-billeder i klyngen for at køre funktioner. Eksisterende skabeloner giver foruddefinerede måder at implementere apps skrevet i Go, Python, Node.js, .NET, Ruby, Java eller PHP 7, selvom du altid kan rulle dine egne. OpenFaaS CLI giver dig også måder at administrere hemmeligheder i din klynge, mens det indbyggede web-UI giver dig mulighed for at oprette nye funktioner og administrere dem.

En anden version af OpenFaaS, OpenFaaS Cloud, ompakker OpenFaaS med funktioner til flere udviklere, herunder integration med Git (inklusive GitHub og selvhostede udgaver af GitLab), CI / CD, hemmelighedsstyring, HTTPS og muligheden for at feed begivenheder til Slack og andre dræn. OpenFaas Cloud er tilgængelig som et gratis open source-produkt og i en hostet version, der i øjeblikket er gratis at bruge.

OpenWhisk

Apache OpenWhisk faktureres som en generisk serverløs platform. Kubernetes er kun en af ​​flere tilgængelige muligheder for at køre containere i OpenWhisk, da OpenWhisk også understøtter Mesos og Docker Compose. Ikke desto mindre foretrækkes Kubernetes på grund af dets værktøj til appinstallation, især Helm-diagrammer. IBM Cloud Functions er baseret på OpenWhisk-projektet, så det kan også arbejde med OpenWhisk CLI-kommandoer.

I modsætning til de fleste andre serverløse Kubernetes-rammer er OpenWhisk skrevet på Scala-sproget, ikke Go (som både Kubernetes og Docker er skrevet i). Dette er sandsynligvis kun et problem, hvis du vil hacke på OpenWhisk, og du kun har erfaring med Go.

De fleste af de populære applikations runtime-indstillinger leveres færdigpakket med OpenWhisk: Java, Node.js, Python, Ruby, PHP og .NET. Derudover er mange esoteriske og banebrydende muligheder også inkluderet: Scala, Ballerina, Swift og Rust. Runtimes er bare Docker-containere, så det er nemt at levere dine egne.

Én praktisk OpenWhisk-implementeringsfunktion er "zip-handlinger." Ret et .zip-arkiv med kode og hjælpefiler til OpenWhisk ved hjælp af manifestfilen til en kodepakke, og OpenWhisk opretter en handling ud fra den. OpenWhisk CLI inkluderer også værktøjer til at omdanne et katalogtræ med kode til et sådant arkiv. Og et katalog over servicepakker gør det nemt at tilslutte din applikation til almindelige tredjeparts tilbud som GitHub, Slack, Apache Kafka eller Jira.