Top

Kubeless

Funktionen sind Hauptbestandteil und können in verschiedenen Sprachen geschrieben werden.
Kubeless fügt Funktionen als Custom Resource Definition (CRD) zu Kubernetes hinzu.

Kubeless nutzt als Standard einen eigenen Namespace kubeless.
Diesen legt man an und dann erstellt man Kubeless im Cluster.

$ kubectl create ns kubeless
$ export RELEASE=$(curl -s https://api.github.com/repos/kubeless/kubeless/releases/latest | grep tag_name | cut -d '"' -f 4)
$ kubectl create -f https://github.com/kubeless/kubeless/releases/download/$RELEASE/kubeless-$RELEASE.yaml

Man kann auch Helm nutzen um kubeless zu installieren, der Chart ist im incubator Repository enthalten.

$ helm repo add incubator https://kubernetes-charts-incubator.storage.googleapis.com/
$ helm install incubator/kubeless --name kubeless --namespace kubeless

kubeless ist eine zusätzliche CLI, diese installiert man einfach mit curl.

$ export RELEASE=$(curl -s https://api.github.com/repos/kubeless/kubeless/releases/latest | grep tag_name | cut -d '"' -f 4)
$ export OS=$(uname -s| tr '[:upper:]' '[:lower:]')
$ curl -OL https://github.com/kubeless/kubeless/releases/download/$RELEASE/kubeless_$OS-amd64.zip && \
    unzip kubeless_$OS-amd64.zip && \
    sudo mv bundles/kubeless_$OS-amd64/kubeless /usr/local/bin/

Jede Funktion bekommt zwei Argumente event, context und sollte einen String zurückgeben.
Der Standardwert der Ausführungszeit beträgt 180 Sekunden, definiert durch die Umgebungsvariable FUNC_TIMEOUT die mit --timeout gesetzt werden kann.

Kubeless Funktion können über PubSub aufgerufen werden, derzeit werden Kafka und NATS als Lösung unterstützt.
Monitoring kann mit Prometheus und Granfana gemacht werden, ein Beispiel Dashboard gibt es auch.

Kubeless UI

Es gibt eine UI zu kubeless diese kann man beim installieren einfach aktivieren.

$ helm install incubator/kubeless --name kubeless --namespace kubeless --set ui.enabled=true

Den UI Pod anzeigen lassen und den Namen zum Port Forwarding nutzen.

$ kubectl get pod --namespace=kubeless | grep kubeless-kubeless-ui

Man braucht ein Port Forwarding um den UI Pod zu erreichen.

$ kubectl port-forward <kubeless-ui-name> 30461 --namespace kubeless

Python Beispiel

Eine Python Funktion könnte die folgende Form haben.
Kubeless nutzt intern Bottle um Routen für Health Checks und Metriken hinzuzufügen.

def echo(event, context):
    print(event)
    return event['data']

Die Funktion im Cluster bereitstellen oder aktualisieren.

$ kubeless function deploy echo --runtime python3.7 \
                                --from-file kubeless.py \
                                --handler kubeless.echo \
                                --trigger-http

$ kubeless function update echo --runtime python3.7 \
                                --from-file kubeless.py \
                                --handler kubeless.echo \
                                --trigger-http

Die installierten Funktionen kann man sich anzeigen lassen.

$ kubectl get functions
$ kubeless function ls

$ kubeless function describe echo

Funktion können wie folgt aufgerufen werden.

$ kubeless function call echo --data 'Hello Kubeless!'

Mit kubectl proxy bekommt man dann Zugriff über eine URL.

$ kubectl proxy -p 8080 &

localhost:8080/api/v1/namespaces/default/services/echo:http-function-port/proxy/

Die Logs der Funktion betrachten.

$ kubectl logs -l function=echo

Die Funktionen entfernen.

$ kubeless function delete echo