Mehr Spaß mit Kubernetes
Kubernetes ist mächtig – aber machen wir uns nichts vor: Das Deployment kann frustrierend sein. Dieses Tutorial zeigt dir, wie du mit Podman, Skaffold und Kind ein entwicklerfreundliches Setup baust, das dir beim Speichern (CTRL+S
) automatisch deine NestJS-App neu baut und in dein lokales Kubernetes-Cluster deployed.
Voraussetzungen
|
|
NestJS Projekt erzeugen
Wir starten mit einem neuen NestJS-Projekt, das wir später in ein Docker-Image verpacken und in Kubernetes deployen.
|
|
Dockerfile für Podman
Damit Skaffold und Podman wissen, wie deine App gebaut werden soll, definieren wir ein einfaches Dockerfile. Es baut deine NestJS-App und startet sie über Node.
|
|
Kind-Cluster starten
Wir nutzen kind
, um ein lokales Kubernetes-Cluster zu starten – ideal für schnelles Feedback beim Entwickeln. Der Port 3000 wird auf den Host weitergeleitet.
|
|
Deployment YAML
Die Kubernetes-Ressourcen definieren, wie dein Container ausgeführt wird. Deployment und Service sorgen für einen laufenden Pod und den Netzwerkzugang.
|
|
Skaffold config
Skaffold orchestriert den gesamten Build- und Deploy-Prozess. Mit dieser Konfiguration wird dein Projekt bei jeder Änderung automatisch neu gebaut und ins Cluster geladen.
skaffold init
erzeugt die golgende Datei
|
|
Dev-Modus starten
Sobald alles vorbereitet ist, startest du Skaffold im Dev-Modus. Das bedeutet: Änderungen am Code lösen automatisch einen Build & Redeploy aus.
|
|
Du kannst jetzt im Editor speichern (CTRL+S
), und Skaffold wird automatisch:
- den Container mit Buildah bauen
- das Image ins Kind-Cluster bereitstellen
- das Deployment updaten
- die Logs anzeigen
- Port 3000 forwarden
Spaß haben
Ruf im Browser auf: http://localhost:3000 – deine NestJS-App läuft nun direkt im Kubernetes-Cluster. Und wenn du was änderst? Einfach speichern.
Weiterführend
Bonus: Infrastruktur mit Pulumi (TypeScript)
Für komplexere Konfigurationen wie Rollen, Rechte und Namespaces nutzen wir Pulumi. Damit lässt sich die Clusterstruktur in TypeScript beschreiben – wiederverwendbar und versionierbar.
Wenn du zusätzliche Ressourcen wie ServiceAccounts, Roles oder Policies brauchst, kannst du Pulumi verwenden. Beispiel:
|
|
Dann einfach ausführen mit:
|
|
Damit vermeidest du YAML-Orgien und bleibst trotzdem deklarativ und wiederholbar.
Diagramm: Dev-Flow mit Skaffold
graph TD A[CTRL+S im Editor] --> B[Skaffold erkennt Änderung] B --> C[Buildah baut neues Image] C --> D[Image wird im lokalen Kind bereitgestellt] D --> E[Kubectl Deployment aktualisieren] E --> F[PortForwarding: 3000 → 3000] F --> G[App im Browser erreichbar]