Leseproben
Kamesh Sampath Red Hat

„Vergleicht man die traditionelle Kubernetes-Anwendung (app.yaml) mit der Serverless-Anwendung (serverless-app.yaml), stellt man drei Dinge fest. Zum einen wird kein zusätzlicher Service benötigt, da Knative den Service automatisch erstellen und routen wird. Da die Definition des Service manuell erfolgt, braucht es keine Selektoren mehr, einige Codezeilen fallen also weg.“

Nachdem Michael Thömmes in Ausgabe 1.2019 des Entwickler Magazins eine theoretische Einführung in die Funktionsweise von Knative gegeben hat, folgt nun der praktische Teil. Im Folgenden werden die ersten Schritte für das Erstellen von Serverless-Anwendungen mit Knative vorgestellt.

Im ersten Teil des Artikels werden wir uns mit dem Aufsetzen einer Entwicklungsumgebung beschäftigen, die für Knative in Version 0.6.0 geeignet ist. Im zweiten Teil geht es dann um das Deployment des ersten eigenen Serverless Microservice. Grundvoraussetzung für die Nutzung von Knative für das Erstellen von Serverless-Anwendungen ist eine solide Kenntnis von Kubernetes. Wer darin noch unerfahren ist, sollte das offizielle Basicstutorial von Kubernetes absolvieren. Bevor es ans sprichwörtliche Eingemachte geht, müssen noch ein paar Tools und Utilities installiert werden:

  • Minikube
  • kubectl
  • kubens

Für Windows-Nutzer hat sich WSL als ziemlich nützlich erwiesen, daher empfehle ich, das auch noch zu installieren.

Aufsetzen von Minikube

Minikube ist ein Kubernetes-Cluster mit einem einzigen Knoten, der sich hervorragend für die alltägliche Entwicklung mit Kubernetes eignet. Nach der Installation müssen die folgenden Schritte durchgeführt werden, um Minikube fit für ein Deployment mit Knative Serving zu machen. Wie das im Code aussieht, zeigt Listing 1.

minikube profile knative 

minikube start -p knative --memory=8192 --cpus=6 \
  --kubernetes-version=v1.12.0 \
  --disk-size=50g \
  --extra-config=apiserver.enable-admission-plugins="LimitRanger,NamespaceExists,NamespaceLifecycle,ResourceQuota,ServiceAccount,DefaultStorageClass,MutatingAdmissionWebhook" 

Zunächst muss ein Minikube-Profil angelegt werden, wofür die erste Zeile steht. Anschließend wird mit dem zweiten Befehl eine Minikube-Instanz aufgesetzt, die 8 GB RAM, 6 CPUs und 50 GB Festplattenspeicher erhält. Der Startbefehl beinhaltet zudem ein paar zusätzliche Konfigurationen für den Kubernetes-Cluster, die nötig sind, um Knative zum Laufen zu bekommen. Wichtig ist auch, dass die verwendete Kubernetes-Version nicht älter als Version 1.12.0 ist, ansonsten funktioniert Knative nicht. Wenn Minikube nicht sofort startet, ist das völlig normal: Es kann ein paar Minuten dauern, bis der initiale Start abgeschlossen ist, ein wenig Geduld sollte man also mitbringen beim Aufsetzen.

Aufsetzen eines Ingress Controllers/Gateways

Knative benötigt einen Ingress Controller/Gateway, um Requests an Knative Services zu routen. Neben Istio wird auch Gloo als Ingress Controller/Gateway unterstützt. Für unser Beispiel werden wir allerdings Istio nutzen. Die folgenden Schritte zeigen, wie man eine möglichst leichtgewichtige Installation von Istio durchführt, die lediglich den Ingress oder das Gateway enthält:

curl -L  https://raw.githubusercontent.com/knative/serving/release-0.6/third_party/istio-1.1.3/istio-lean.yaml \
  | sed 's/LoadBalancer/NodePort/' \
  | kubectl apply --filename -

Wie bereits das Aufsetzen von Minikube, dauert auch das Deployment des Istio Pods ein paar Minuten. Mit dem Befehl kubectl ––namespace istio-system get pods ––watch kann man sich den Status ansehen, beendet wird die Übersicht mit STRG + C. Ob das Deployment erfolgreich war, lässt sich leicht mit dem Kommando kubectl ––namespace istio-system get pods feststellen.

Den vollständigen Artikel lesen Sie in der Ausgabe:

Entwickler Magazin 5.19 - "Web & Beyond"

Alle Infos zum Heft
579901231Erste Schritte für das Erstellen von Serverless-Anwendungen mit Knative
X
- Gib Deinen Standort ein -
- or -