Schnelles Entwickeln mit Kubernetes in Azure

Keine Kommentare

Kubernetes ist die de facto Deployment-Umgebung für moderne Microservice-Architekturen. Alle großen Cloud-Anbieter haben daher Angebote für Kubernetes, die durch zahlreiche Features ergänzt werden, die Ressourcen des jeweiligen Anbieters intelligent in den Cluster einbinden, so z. B. Load-Balancer, Authentifizierung, Storage etc.

Problem

Für die Entwicklung stellt das aber ein Problem da – der Unterschied zwischen der lokalen Entwicklungsumgebung und der Cloud ist ziemlich groß, sodass der reale Test erst in der Cloud stattfinden kann. Wenn dann in der Cloud-Umgebung etwas schiefgeht, kann man, im schlimmsten Fall, nur noch per printf-Debugging versuchen zu verstehen, was schief geht. Mit den oft nötigen Builds und Deployments ist man schnell bei einem Debugging-Loop, der mehrere Minuten dauert. Debugging unter diesen Bedingungen geht zwar, ist aber kaum effizient.

Azure Dev-Spaces

Abhilfe für dieses Problem verspricht Azure Dev-Spaces. Dieses erlaubt es, lokal zu entwickeln und direkt im Kubernetes Cluster zu testen und zu debuggen. Entwickler sind somit einfach in der Lage, Breakpoints zu setzen und zu schauen, was in den Microservices passiert. Dieses Feature ist derzeit leider nicht für alle IDEs und Programmiersprachen verfügbar: aktuell werden Java, .Net Core und Node.js unterstützt. Als IDE kann dabei Visual Studio Code oder Visual Studio (für .Net Core) verwendet werden.

Weitere Programmiersprachen sollen hinzu kommen, bis dahin kann man aber “Dev Spaces light” nutzen, mit diesem kann man immerhin Container direkt in den Cluster deployen und schnell aktualisieren, wenn der Code geändert wurde.

How to

Um das Azure Dev Spaces nutzen zu können, muss man einen Kubernetes Cluster mithilfe von AKS aufsetzen, das ältere ACS funktioniert nicht. Ich werde hier das Deployment scripten, dafür bietet sich die Azure CLI “az” an. Für reale Projekte bietet es sich an, das Aufsetzen des Clusters komplett zu scripten – dies macht es leicht, neue
Umgebungen für neue Kollegen, Tests, Abnahmen etc. aufzusetzen.

Zum Ausprobieren und Rumspielen bietet es sich normalerweise an, die Azure Shell zu nutzen – allerdings gibt es noch einen Bug im Zusammenspiel der Shell und Dev-Spaces, sodass dies leider nicht in Frage kommt (Stand August 2019). Daher muss eine Version der Azure CLI lokal installiert werden.

Aufsetzen

In der Shell:

  1. Login

    az login

  2. Erstellen einer Resourcegroup, die unseren Cluster, dazu gehörige Storage etc. halten kann.

    az group create --name MyResourceGroup --location westeurope

  3. Erstellen des eigentlichen AKS Clusters. Wir stellen die Zugangskontrolle per RBAC erst einmal ab, diese könnte aber auch aktiviert werden. Die VM ist im Prinzip frei wählbar, aber sollte natürlich nicht zu klein sein. Die SSH-Keys dienen dem Zugriff auf den Cluster / die VMs und werden von der Azure-Shell automatisch genutzt, müssen aber gesichert werden. Weitere Optionen wie z.B. Logging, Zugangsdaten etc. interessieren uns erst einmal nicht. Dies dauert gerne mal eine Weile – bitte Geduld haben und Kaffee trinken gehen.

    az aks create -g MyResourceGroup -n MyAKS --location westeurope --node-vm-size Standard_D2s_v3 --node-count 1 --disable-rbac --generate-ssh-keys

  4. Einrichten von Dev-Spaces

    az aks use-dev-spaces -g MyResourceGroup -n MyAKS --yes

Achtung, diese Ressourcen würden auch bestehen bleiben, also am Ende alles wieder abräumen!

Bauen einer Java-Applikation

Visual Studio Code

Bitte Visual Studio Code installieren. Zusätzlich müssen einige Extensions installiert werden:

CLI Tools

Es müssen zwei Tools installiert werden:

Achtung, Microsoft ändert die Extensions und CLI beständig, es kann daher sein, dass diese neu installiert werden müssen.

Java

  • Java an sich
  • Maven

Code

Für dieses Beispiel bietet es sich an, die Beispiele von Microsoft zu klonen.

git clone https://github.com/Azure/dev-spaces

Entwicklung

Bitte das Projekt vorbereiten und öffnen:

cd dev-spaces/samples/java/getting-started/webfrontend
azds prep

VSC öffnen:

code .

Beim ersten Start sollte Azure Dev Spaces erkennen, dass diverse Dinge in dem Projekt fehlen und vorschlagen, diese zu ergänzen. Achtung, dieser Vorschlag erscheint rechts unten beim Start und kann schnell mal übersehen werden. In dem Fall VSC neu starten.

Mit CRTL + Shift + P in den Befehlsmodus wechseln und diesen Befehl eingeben:

Azure Dev Spaces: Prepare configuration files for Azure Dev Spaces.

VSC bereitet nun alles für das Deployment in das Cluster vor. Bitte bei der folgenden Abfrage nach dem Basis Image das Image Azul Zulu OpenJDK for Azure (Free LTS) auswählen. Als Port 8080 und zuletzt ‘Yes’ für einen Public Endpoint. Hinweis: Bei mir hatte der Befehl nicht sofort einen Effekt. Ich habe ihn mehrfach aufrufen müssen, bevor ich den Dialog zur Auswahl des Basis Images bekam.

Nun ist alles Bereit – sobald wir wollen, können wir den Container in das Cluster deployen und dort debuggen. Azure wird das Image auf einer Azure Build Maschine bauen, deployen und dann debuggen.

Um das Debugging zu testen, setzt du in Application.Java Zeile 14 einen Breakpoint.

Nun können wir debuggen – klicke im Debugging-Menü auf Launch Java Program(AZDS)

Wir sollten nun den Breakpoint treffen:

Das war es! Wir haben natürlich noch keinen funkionierenden Cluster, aber das Sample-Projekt enthält alles nötige, um das zumindest zu simulieren, so ist z.B. in dem Java-Ordner des Beispielsprojeketes noch eine WebApi enthalten. Wenn du diese ebenfalls deployst, hast du eine funktionierende Microservice-Anwendung zum testen – ein Guide dafür findet sich hier

Cluster entfernen

Um Kosten zu vermeiden, sollten wir alle Ressourcen entfernen, die wir angelegt haben:

az group delete --name MyResourceGroup --yes --no-wait

Achtung, bei mir wurden noch einige weitere Ressourcengruppen für Logs u.ä. angelegt, diese bitte am besten über die Oberfläche entfernen.

Fazit

Azure Dev Spaces ist ein sehr mächtiges Werkzeug, um die Entwicklung von Kubernetes-Anwendungen zu vereinfachen.

Selbst wenn man eigentlich eher andere IDEs nutzt, kann das Live-Debugging in einen Container massiv Zeit sparen.

Ein Problem können die Kosten sein, schließlich kostet jeder laufende Cluster Geld – man kann dies optimieren, indem man z.B. die Clusters Nachts herunterfährt und ggf. die Gutschrift nutzt, die Microsoft jedem Visual-Studio-Abonnenten gewährt. Darüber hinaus bietet Azure Dev Spaces die Möglichkeit, dass mehrere Entwickler gleichzeitig in einem Cluster arbeiten können.

Kommentieren

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert.