Zauberei mit Juju - Serverless Computing und Juju Charm

Serverless Computing ist die naechste Stufe auf dem Weg in den Cloud-Himmel. Waehrend in allen anderen Stufen zuvor sich der Anwender noch mit Computern, Netzwerken und Betriebssystem damit rumschlagen musste, ist er nun von allem rein gewaschen

Posted by eumel8 on March 01, 2017 · 7 mins read

Serverless Computing ist die naechste Stufe auf dem Weg in den Cloud-Himmel. Waehrend in allen anderen Stufen zuvor sich der Anwender noch mit Computern, Netzwerken und Betriebssystem damit rumschlagen musste, ist er nun von allem rein gewaschen: Er kuemmert sich nur noch um seine Daten.


Juju ist ein Werkzeug von Ubuntu aus dem Hause Canonical, was sich anschickt, etwas Ordnung in das Durcheinander mit den vielen Cloud zu bringen:

# juju clouds
Cloud Regions Default Type Description
aws 12 us-east-1 ec2 Amazon Web Services
aws-china 1 cn-north-1 ec2 Amazon China
aws-gov 1 us-gov-west-1 ec2 Amazon (USA Government)
azure 18 centralus azure Microsoft Azure
azure-china 2 chinaeast azure Microsoft Azure China
cloudsigma 5 hnl cloudsigma CloudSigma Cloud
google 4 us-east1 gce Google Cloud Platform
joyent 6 eu-ams-1 joyent Joyent Cloud
rackspace 6 dfw rackspace Rackspace Cloud
localhost 1 localhost lxd LXD Container Hypervisor. 

Es sind verschiedene Clouds und deren Service-Endpunkte vorkonfiguriert. Die kann ich entweder nutzen, indem ich die entsprechenden Credentials als Umgebungsvariablen hinzufuege, oder neue Cloud erstellen (wie etwa meine eigene OpenStack-Umgebung). In unserer Testreihe wollen wir LXD verwenden. Wie das einzurichten ist, hatte ich schon erklaert. Wer nicht nachlesen will: lxd init - und alles wird gut.

Als naechstes brauchen wir einen Controller. Dieser wird spaeter unsere Befehle empfangen und an die verschiedenen Units weiterverteilen.

juju bootstrap localhost localhost

Der naechste Layer ist das Model. Wir liegen einfach ein neues an, um unsere Anwendung darin zu deployen:

# juju add-model ebooks

Und so sieht es dann aus:

# juju models
Controller: localhost-localhost

Model Owner Status Machines Cores Access Last connection
controller admin available 1 - admin just now
ebooks* admin available 1 - admin 57 minutes ago

Kommen wir jetzt zu den Charms. Charms sind die Beschreibung einer Applikation und wie diese installiert und konfiguriert wird. In der metadata.yaml findet man zum Beispiel Name, Kurzbeschreibung, Autor und Tags. Mit Tags kann man zum Beispiel im Charm Store nach Themen sortiert Applikationen finden. config.yaml ist eine weitere JSON-Datei, in der Konfigurationsparameter fuer die Applikation definiert sind. Herzstuecke des Charms sind die sogenannten Hooks. Im gleichnamigen Unterverzeichnis kann es eine ganze Menge von ihnen geben. Es gibt vorreservierte Dateinamen. Der Hook install wird zum Beispiel immer bei der Installation aufgerufen. Die Hooks start und stop jeweils zum Starten und Stoppen der Applikation. Weitere wichtige Hooks sind config-changed und upgrade-charm, wenn es etwa neuere Revisionen des Charms gibt. Eine Beschreibung der moeglichen Hooks findet man hier . ebook wunschliste ist ein Webservice, der wiederum den Amazon Webservice benutzt, um similare Suchen auszufuehren. Die Anwendung ist in PHP/Javascript geschrieben, Daten werden auf dem Rechner der Benutzer gespeichert. Um die Anwendung in einen Charm zu ueberfuehren, ist das Schreiben einer Installationsroutine notwendig, sowie das Herausfuehren von 3 Variablen fuer die Amazon-Credentials.

Auschecken des Charms von Github und Deployen der Applikation:

# juju switch ebooks
# git clone https://github.com/eumel8/ebook-wunschliste-charm.git ~/charms/xenial/ebook-wunschliste
# juju deploy ./charms/xenial/ebook-wunschliste/ --series xenial

Der Auftrag wird an den Controller weitergeleitet. Dieser startet einen LXD-Container, installiert dort die Applikation entsprechen der Hooks im Charm und richtet so die erste Unit ein:

# juju status

Model Controller Cloud/Region Version
ebooks2 localhost-localhost localhost/localhost 2.0.0

App Version Status Scale Charm Store Rev OS Notes
ebook-wunschliste waiting 0/1 ebook-wunschliste local 0 ubuntu

Unit Workload Agent Machine Public address Ports Message
ebook-wunschliste/0 waiting allocating 0 10.84.44.56 waiting for machine

Machine State DNS Inst id Series AZ
0 pending 10.84.44.56 juju-703543-0 xenial

Durch den Aufbau unseres lokalen Repos und dem Parameter –series xenial haben wir angegeben, dass wir Ubuntu 16.04 (Xenial) verwenden moechten.

Nach einer kurzen Weile sollte die Infrastruktur fuer unsere Applikation hochgezogen sein.

# juju status
Model Controller Cloud/Region Version
ebooks2 localhost-localhost localhost/localhost 2.0.0

App Version Status Scale Charm Store Rev OS Notes
ebook-wunschliste active 1 ebook-wunschliste local 0 ubuntu

Unit Workload Agent Machine Public address Ports Message
ebook-wunschliste/0* active idle 0 10.84.44.56 application up-to-date

Machine State DNS Inst id Series AZ
0 started 10.84.44.56 juju-703543-0 xenial

Die Konfigurationsparameter mit den Credentials fehlen aber noch. WIr koennen die Juju GUI starten und das ueber die Admin-Console des Controllers tun:

# juju gui
Opening the Juju GUI in your browser.
If it does not open, open this URL:
https://10.84.44.91:17070/gui/b0681f81-91a5-4aae-8eb5-23c8f5703543/
Couldn't find a suitable web browser!
Set the BROWSER environment variable to your desired browser.

Die Credentials zum Login erhalten wir mit

# juju show-controller --show-password

Nach Eingabe der AWS-Credentials und dem Klicken auf Deploy, werden diese auf den Units ausgerollt. Danach sollte unsere Applikation laufen:

Man koennte jetzt noch mehrere Units der Applikation starten oder eine ganz andere Cloud benutzen (juju switch). Weiteres Highlight der Juju Charms sind Relations. Entweder ueber die GUI oder mit juju add-relation lassen sich Verbindungen herstellen - etwa eine Webanwendung mit einer Datenbank oder einem Proxy. Will man Dienste nach draussen freigeben, geht dies mit juju expose.

Anschauungsbeispiele kann man sich herunterladen mit charm pull lamp oder charm pull mediawiki. Man wird dann schnell feststellen, dass die meisten Hooks in Python geschrieben sind - das ist aber keine Bedingung. Im Juju Charm Store kann man in einer Sandbox die Applikationen des Stores testen oder den Source-Code der Charms dort anschauen.

Abschliessend sei noch bemerkt. Juju Charm wird aktiv weiterentwickelt. Selbst wenn man Ubuntu 16.04 frisch installiert, stimmt die Dokumentation nicht immer ueberein. Auch der Befehlssatz wird immer weiterentwickelt. Fehlgeschlagene Installationen kriegt man zum Beispiel nur mit juju destroy-model ebooks wieder los. Man darf gespannt sein, wie sich das Zauberkaestchen noch weiter entwickelt.

Alle Informationen zu Juju auf https://www.ubuntu.com/cloud/juju