5 modi per fare serverless su Kubernetes

Chiamalo "serverless", chiamalo "calcolo basato sugli eventi" o chiamalo "functions as a service (FaaS)", l'idea è la stessa: allocare dinamicamente le risorse per eseguire singole funzioni, essenzialmente microservizi, che vengono richiamati in risposta agli eventi. Le piattaforme di elaborazione serverless consentono agli sviluppatori di applicazioni di concentrarsi sull'app, non sull'infrastruttura sottostante e su tutti i suoi dettagli di gestione.

La maggior parte dei fornitori di servizi cloud offre una sorta di piattaforma serverless, ma puoi crearne una tu stesso con solo due ingredienti. Uno è Kubernetes, il sistema di orchestrazione dei contenitori che è diventato una piattaforma standard per la creazione di applicazioni resilienti e componentizzate. Il secondo è uno qualsiasi dei numerosi sistemi utilizzati per creare modelli di applicazioni serverless in Kubernetes.

La maggior parte dei framework serverless per Kubernetes ha queste caratteristiche in comune:

  • Distribuisce in qualsiasi ambiente che supporti Kubernetes, in locale o in remoto, inclusi ambienti come OpenShift.
  • Supporta l'esecuzione di codice scritto in qualsiasi lingua, con alcuni runtime comuni preconfezionati con il framework.
  • Attiva l'esecuzione del codice da molti tipi di eventi: un endpoint HTTP, un messaggio in coda o qualche altro hook.

Uno dei principali vantaggi della creazione di serverless su Kubernetes è ottenere un controllo molto maggiore sulla piattaforma sottostante. Molte offerte serverless limitano i comportamenti delle funzioni che eseguono, rendendo talvolta impraticabili determinate classi di applicazioni. Con Kubernetes, puoi creare una piattaforma serverless che soddisfi le tue esigenze, lasciando l'infrastruttura agli operatori Kubernetes e lasciando che i tuoi sviluppatori si concentrino sulla scrittura di codice essenziale.

Ecco cinque dei principali progetti che portano funzionalità serverless a Kubernetes.

Fissione

Fission è creato e mantenuto dalla società gestita di Kubernetes Platform 9. Il suo principale motivo di fama è che ti consente di creare applicazioni FaaS senza dover creare container, semplicemente fornendo file di definizione.

Fission può essere installato con o senza un grafico Helm e può essere installato in una delle due edizioni. C'è una versione completa con coda di messaggi e supporto InfluxDB per la registrazione e un'edizione ridotta con funzionalità di base. Il primo è progettato per le distribuzioni di produzione e il secondo per bagnarti i piedi.

Per aggiungere codice a una distribuzione Fission, utilizza i file delle specifiche basati su YAML. Gli strumenti della riga di comando di Fission ti consentono di creare file YAML per le tue funzioni e le rotte utilizzate per attivare i loro punti di ingresso. Il file spec consente inoltre di fornire variabili di ambiente, contenitori ausiliari, volumi e controlli di contaminazione / tolleranza Kubernetes per il codice.

Fission fornisce anche "flussi di lavoro". Installati dal grafico Helm, i flussi di lavoro passano l'output di una funzione a un'altra funzione. Le funzioni non devono nemmeno essere nella stessa lingua. Si noti che ciò ha un costo in termini di prestazioni, poiché l'output di ciascuna funzione viene reso in un formato di interscambio, sebbene il sistema del flusso di lavoro supporti molti tipi binari primitivi comuni per mantenere basso l'overhead (ad esempio, un numero intero o un flusso di byte generico).

Uno degli svantaggi originariamente associati a FaaS era che la prima volta che una funzione veniva invocata, c'era un percettibile ritardo nell'avvio del container ad essa associato. Fission mantiene i contenitori preriscaldati per ridurre al minimo la latenza la prima volta che viene eseguita una funzione.

Fission offre altre comodità sia per gli sviluppatori che per gli amministratori. Il servizio può essere distribuito in un cluster che non ha accesso a Internet esterno e il codice può essere ricaricato a caldo nel cluster su richiesta. L'attività della funzione può anche essere registrata e riprodotta per facilitare il debug.

Il progetto Fission è disponibile sotto la licenza Apache altamente liberale, quindi può essere liberamente rielaborato secondo necessità.

Knative

Creato originariamente da Google per eseguire app serverless su Kubernetes, Knative si concentra su modelli comuni alle distribuzioni serverless in produzione. Tuttavia, Knative richiede esperienza diretta nella gestione di molti componenti Kubernetes per essere utilizzati in modo efficace.

Oltre a Kubernetes, Knative richiede un sistema di routing o mesh di servizi come Istio, ma è possibile utilizzare anche altre opzioni come Ambassador e Gloo. Ciò significa un po 'più di lavoro per la configurazione, ma il progetto ha guide dettagliate per l'utilizzo di ciascuna opzione in una varietà di servizi cloud e ambienti Kubernetes, incluso Kubernetes vanilla.

Knative funziona principalmente sfruttando o estendendo gli strumenti e le funzionalità Kubernetes esistenti. Le app o le funzioni vengono configurate tramite file YAML e fornite come contenitori Docker che crei. L'aggiunta, la modifica o l'eliminazione delle definizioni viene eseguita tramite l' kubectlapp della riga di comando. Per le metriche sulle app Knative, usa Grafana. Il ridimensionamento può essere eseguito con il programma di scalabilità automatica di Knative o con qualsiasi altro scaler compatibile con Kubernetes, incluso uno personalizzato.

Knative è in fase di sviluppo pesante e molti dei suoi strumenti dedicati sono ancora in uno stato approssimativo. Questi includono  knctl, una CLI specifica per Knative, che ti evita il fastidio di utilizzare gli altri strumenti di Kubernetes per gestire Knative se vuoi concentrarti solo su Knative; e kouno strumento per creare app Go su Knative eliminando la fase di creazione del contenitore.

Kubeless

Kubeless è stato creato da Bitnami, gli sviluppatori di facili programmi di installazione per stack di applicazioni web comuni. Kubeless utilizza le definizioni di risorse personalizzate native di Kubernetes per gestire le funzioni, quindi c'è un po 'meno astrazione tra le metafore di Kubernetes e la funzionalità Kubeless.

I runtime dei linguaggi più comuni vengono forniti con la piattaforma: .NET, Java, Python, Node.js, PHP, Ruby, Go e persino il nuovo linguaggio Ballerina per lo sviluppo nativo del cloud. I runtime sono solo immagini Docker, sebbene Kubeless abbia un formato di pacchettizzazione specifico per l'utilizzo di Dockerfile per creare runtime personalizzati.

Un'altra utile funzionalità di Kubeless è la sua CLI, che è identica al comando di AWS Lambda CLI. Ciò è estremamente conveniente se desideri eseguire la migrazione da AWS Lambda, ma desideri preservare parte dello script di gestione esistente o semplicemente non devi imparare un set di comandi completamente nuovo.

Kubeless funziona anche come plug-in per Serverless Framework, un sistema per la creazione di applicazioni serverless su una varietà di architetture. Se usi già Serverless o Kubeless, ti sarà più facile aggiungerne uno piuttosto che usare qualcos'altro.

OpenFaaS

Il passo per OpenFaaS è "funzioni serverless rese semplici". In parole semplici, gli sviluppatori intendono "non molto più difficile della distribuzione di un container Docker".

OpenFaaS può essere distribuito su Kubernetes o su un cluster Docker Swarm (per test locali o uso a bassa richiesta). Puoi utilizzare la CLI di OpenFaaS per creare, inviare e distribuire immagini Docker nel cluster per eseguire le funzioni. I modelli esistenti forniscono modi predefiniti per distribuire app scritte in Go, Python, Node.js, .NET, Ruby, Java o PHP 7, anche se puoi sempre eseguire il tuo. La CLI di OpenFaaS fornisce anche modi per gestire i segreti nel tuo cluster, mentre l'interfaccia utente web integrata ti consente di creare nuove funzioni e gestirle.

Un'altra versione di OpenFaaS, OpenFaaS Cloud, riconfeziona OpenFaaS con funzionalità per più sviluppatori, inclusa l'integrazione con Git (inclusi GitHub e le edizioni self-hosted di GitLab), CI / CD, gestione dei segreti, HTTPS e la possibilità di fornire eventi a Slack e altri affonda. OpenFaas Cloud è disponibile come prodotto open source gratuito e in una versione ospitata attualmente gratuita.

OpenWhisk

Apache OpenWhisk viene fatturato come una piattaforma serverless generica. Kubernetes è solo una delle numerose opzioni disponibili per l'esecuzione di container in OpenWhisk, poiché OpenWhisk supporta anche Mesos e Docker Compose. Tuttavia, Kubernetes è preferito per i suoi strumenti per la distribuzione delle app, in particolare i grafici Helm. IBM Cloud Functions si basa sul progetto OpenWhisk, quindi può funzionare anche con i comandi CLI di OpenWhisk.

A differenza della maggior parte degli altri framework Kubernetes senza server, OpenWhisk è scritto nel linguaggio Scala, non Go (in cui sono scritti sia Kubernetes che Docker). È probabile che questo sia un problema solo se vuoi hackerare su OpenWhisk e hai esperienza solo con Go. 

La maggior parte delle opzioni di runtime delle applicazioni più diffuse è preconfezionata con OpenWhisk: Java, Node.js, Python, Ruby, PHP e .NET. Inoltre, sono incluse anche molte opzioni esoteriche e all'avanguardia: Scala, Ballerina, Swift e Rust. I runtime sono solo container Docker, quindi è facile fornirne uno personalizzato.

Una comoda funzione di distribuzione di OpenWhisk è "azioni zip". Punta un archivio .zip di codice e file ausiliari su OpenWhisk utilizzando il file manifest per un pacchetto di codice e OpenWhisk creerà un'azione da esso. OpenWhisk CLI include anche strumenti per trasformare un albero di directory di codice in tale archivio. Inoltre, un catalogo di pacchetti di servizi semplifica il collegamento della tua applicazione a offerte comuni di terze parti come GitHub, Slack, Apache Kafka o Jira.