Che cosa è OpenWhisk?
Apache OpenWhisk è un sistema serverless molto flessibile, sviluppato come progetto open source alla Apache Software Foundation da una grande comunità di oltre duecento persone. È una tipica applicazione distribuita e può quindi essere installato in Kubernetes come sistema distribuito. Può utilizzare Kafka come coda di messaggi e CouchDB come database NoSQL per memorizzare configurazioni e operazioni eseguite. In tutti il suo “fulgore”, ha l’architettura illustrata in figura 1.
Tutti i componenti di OpenWhisk sono replicabili e scalabili e si può creare un ambiente con centinaia di nodi. Per questo motivo è un ambiente ideale da installare per apprendere come funziona Kubernetes in ambienti realisitici.
Qualche risorsa per conoscere OpenWhisk
Ho deciso pertanto di scrivere una serie di articoli su come si installa OpenWhisk in Kubernetes allo scopo di presentare un tutorial che illustri appunto come lo si installa e come si fanno l’impacchettamento in una immagine Docker e il deployment su Kubernetes. In questo primo articolo vedremo proprio l’installazione e l’impachettamento in Docker.
Ma in questa serie non parlerò di come funziona OpenWhisk stesso in queanto sistema serverless. Chiaramente l’argomento è interessante e da approfondire e, a tale scopo, rimando il lettore al libro in inglese Learning Apache OpenWhisk, pubblicato da O’Reilly e di cui sono l’autore. Per averne un sostanzioso “assaggio”, si può fare riferimento all’ampia anteprima pubblicata su Google Books [1], che peraltro copre tutte le basi.
Oltre a questo, è disponibile su YouTube un corso gratuito in italiano che copre Nimbella [2], che è un servizio serverless commerciale basato su OpenWhisk. Tutto quanto si applica a Nimbella è generalmente valido anche per OpenWhisk, fatta eccezione per alcune estensioni fornite esclusivamente da Nimbella. Ma le informazioni fornite in questi video sono sicuramente utili a comprendere l’utilizzo di OpenWhisk.
Compilazione in locale
Vista la parte introduttiva, iniziamo le operazioni di installazione partendo dalla modalità più semplice: installazione in locale in modalità singola (standalone). Questo passo è propedeutico per poi creare un’immagine Docker da usare poi in Kubernetes.
Come vediamo di seguito, si può cominciare a usare OpenWhisk in maniera molto semplice e immediata. Tutto quello che vi serve è Docker stesso, un Java Development Kit per compilare il backend, e Node.js per poter compilare il frontend. Se siete uno sviluppatore, molto probabilmente avrete tutto questo già installato nella vostra macchina.
Scaricare i sorgenti
Se avete i prerequisiti sulla vostra macchina, potete cimentarvi nell’impresa, tutto sommato piuttosto semplice, di installare OpenWhisk e farlo partire in locale. Potete semplicemente scaricare i sorgenti da qui:
https://github.com/apache/openwhisk
Nelle release troverete la versione 1.0, in formato zip e tar.gz. Vi conviene comunque prendere il master con un bel git clone, in quando è stabile e di solito più aggiornato delle release, e quindi contiene le ultime novità e bug fix.
Compilare
Una volta scaricato e spacchettato, o clonato il sorgente, andate nella directory principale e potete compilare OpenWhisk standalone con:
./gradlew :core:standalone:build
Dovete avere un attimo di pazienza, perché ci mette un po’ a compilare; ma poi avrete OpenWhisk versione locale pronto all’uso. Mentre compila vi consiglio di andare su:
https://github.com/apache/openwhisk-cli
per scaricare la command line interface per il vostro sistema operativo. Una volta scaricata, scompattate il pacchetto e mettete il comandu wsk nel PATH da qualche parte nel vostro sistema. Ad esempio, su Mac e Linux è tipicamente in
/usr/local/bin
mentre su Windows va in
C:\Windows\System32
Avviare OpenWhisk
A questo punto, tutto è pronto per lanciarvi nel mondo del serverless! Potete lanciare OpenWhisk in locale con il comando:
java –jar bin/openwhisk-standalone.jar
Questo dovrebbe normalmente aprire il browser con il playground. Si tratta di una semplice applicazione JavaScript che vi permette di scrivere direttamente nel browser una funzione serverless nei vari linguaggi e di provarla.
Sperimentare con il serverless
Una volta che avrete fatto “Hello World!” nel playground, la cosa migliore è scrivere delle applicazioni con un editor, visto che il playground non è un ambiente di sviluppo completo. E qui si rivela utile l’interfaccia a riga di comando wsk.
Questa CLI (Command Line Interface) va anzitutto configurata. Se leggete accuratamente l’output di OpenWhisk quando lo lanciate — fate attenzione, è verso l’inizio, e viene immediatamente “scrollato via” dagli altri messaggi che vengono mostrati — troverete il comando per configurare. Qualcosa tipo:
wsk property set … (omissis)
A questo punto, copiate in un file uno degli esempi che vi presenta il playground, per esempio hello.js, e scrivete:
wks action update hello hello.js
per creare l’azione hello. Ora è possibile invocare tale azione e vedere l’output con
wsk action invoke hello –p name Michele -r
Dovreste vedere un messaggio di benvenuto in formato JSON.
Conclusioni
Abbiamo fatto i primi passi con OpenWhisk, imparato come prendere i sorgenti e compilarlo e anche come utilizzarlo in locale. Questo dovrebbe dare l’idea del suo potenziale, che si estrinseca pienamente quando viene messo in Docker e se ne fa il deployment in Kubernetes. Il prossimo passo sarà appunto quello di impacchettarlo in un’immagine Docker, e ne approfitteremo per spiegare un po’ di Docker. Alla seconda parte, dunque.