Vortragende: Tobias Kleine, Jochen Niebuhr
Ort: Hermes (Essener Straße 89)
Zeit: 20. Juli 19 Uhr
Vortragsfolien: Quellcode und Präsentation
Kategorie: Deployment
Tobias und Jochen (beide im Digital Lab von Hermes tätig) haben sich eines sehr spannenden Themas gewidmet: Microservices mit Spring Boot & Kubernetes
Tobias startete den Vortrag mit der Vorstellung der Kubernetes Grundlagen und Begriffsklärung:
- Container (eine über eine Containerisierungssoftware - z.B. Docker oder Rocket - virtualisierte Funktionalität)
- Pod (Verbund von Containern, Verwaltbare Einheit für Kubernetes, "kurzlebige Einheit", konkrete Instanz und Hostgebunden - gestartet werden können allerdings mehrere Pods, die somit auf verschiedenen Hosts verteilt werden können)
- Service (Gruppierung von PODs, "langlebige" Einheit)
- Replica Set (Rolling update erfolgt pro Replica Set, sie können auch Rollbacks erleichtern, da sie vorherige Konfigurationen kennen)
- Deployment (Gruppierung von Replica Sets)
- Ingress (Verbindung in den Cluster, stellt bspw. Port für Services bereit und kümmert sich bspw. um SSL oder Loadbalancing)
Danach ging es an das Live-Coding, das federführend von Jochen übernommen wurde. Spring Boot wurde verwendet, um eine Basisanwendung im Hello-Word-Format aufzusetzen, die eine Begrüßung per Rest-Service zur Verfügung gestellt hat. Damit war der Spring-Boot-Teil leider bereits beendet, so dass sich jedoch andererseits der Rest des Vortrags vollständig auf Kubernetes konzentrieren konnte. Der Prozess für die Bereitstellung auf dem Kubernetes Cluster gestaltete sich dann folgendermaßen:
- Build dockerfile (Maven)
- docker run (lokales Starten der Anwendung)
- curl (Test der Anwendung)
- push (Ablegen des Images auf dem konfigurierten Docker Repository)
- kubectl apply (Deployment der Anwendung)
Es gab kleine Zwischeninformationen, die sich im Vortrag und der abschließenden Diskussionsrunde ergeben haben:
- Als kleinen Zwischenausflug wurde gezeigt, wie man mit kubectl proxy eine graphische Übersicht auf Port 8001 anzeigen lassen kann.
- Ein Rolling Update ist auch mit einem Health-Check kombinierbar, so dass sichergestellt werden kann, dass alte Pods nur dann heruntergefahren werden, wenn neue Pods bereits "healthy" sind.
Folgende Erweiterungen wurden im Laufe des Vortrags empfohlen:
- KubeLego ist eine Erweiterung, über die man sich bspw. automatisiert ein Let's Encrypt Zertifikat bereitstellen lassen kann
- Helm ist ein Kubernetes Package Manager und eine Template Engine um z.B. redundante yamls zu vermeiden, die sich nur im Hostnamen unterscheiden
- EFK stack: Gegenüber dem wahrscheinlich bekannteren ELK-stack verwenden die Vortragenden fluentd anstelle von Logstash. Nach einer kurzen darauf folgenden Recherche scheint es hierbei keinen eindeutigen Sieger zu geben. Beide Systeme haben ihre Vor- und Nachteile.
Ein Kubernetes Cluster lässt sich übrigens über die GCE/GKEohne weitere Kosten testen (30 Tage)