Semesterarbeit 5: Aufbau einer GitOps basierten Kubernetes Plattform mit Preisüberwachungs WebApp¶
| Feld | Wert |
|---|---|
| Autor | Efekan Demirci |
| Klasse | ITCNE24 |
| Schule | Technische Berufsschule Zürich TBZ, Höhere Fachschule |
| Lehrgang | Dipl. Informatiker HF, Cloud Native Engineer |
| Semesterarbeit | Nummer 5 |
| Fachexperte IaCA, CNC, CNA | Marcel Bernet |
| Fachexperte Projektmanagement | Thanam Pangri |
| Module | Projektmanagement, IaCA, CNC und CNA, optional DevOps |
| Geplanter Aufwand | ca. 50 Stunden über 9 Wochen |
| Repository | https://github.com/Cancani/gitops-platform-semesterarbeit5 |
| Pages | https://cancani.com/gitops-platform-sem5/ |
| Version | 0.2, Stand nach Kickoff Anpassung |
Semesterarbeit 5: Aufbau einer GitOps basierten Kubernetes Plattform mit Preisüberwachungs WebApp¶
| Feld | Wert |
|---|---|
| Autor | Efekan Demirci |
| Klasse | ITCNE24 |
| Schule | Technische Berufsschule Zürich TBZ, Höhere Fachschule |
| Lehrgang | Dipl. Informatiker HF, Cloud Native Engineer |
| Semesterarbeit | Nummer 5 |
| Fachexperte IaCA, CNC, CNA | Marcel Bernet |
| Fachexperte Projektmanagement | Thanam Pangri |
| Module | Projektmanagement, IaCA, CNC und CNA, optional DevOps |
| Geplanter Aufwand | ca. 50 Stunden über 9 Wochen |
| Repository | https://github.com/Cancani/gitops-platform-semesterarbeit5 |
| Pages | https://cancani.com/gitops-platform-sem5/ |
| Version | 0.2, Stand nach Kickoff Anpassung |
Inhaltsverzeichnis¶
- Semesterarbeit 5: Aufbau einer GitOps basierten Kubernetes Plattform mit Preisüberwachungs WebApp
- Semesterarbeit 5: Aufbau einer GitOps basierten Kubernetes Plattform mit Preisüberwachungs WebApp
- Inhaltsverzeichnis
- 1. Management Summary
- 2. Einleitung
- 3. Projektmanagement
- 3.1 Vorgehensmodell
- 3.2 Sprintplan
- Sprint 1, Wochen 1 bis 3, Setup und Fundament
- Sprint 2, Wochen 4 bis 6, GitOps Durchstich
- Sprint 3, Wochen 7 bis 9, Stabilisierung, Runbooks, Doku
- 3.3 Sprint Reviews und Retrospektiven (Vorlage)
- 3.4 Branching Strategie
- 3.5 Repository Strategie: Monorepo
- 3.6 Definition of Done
- Test
1. Management Summary¶
In dieser Semesterarbeit wird eine kleine, aber realistische Cloud Native Plattform auf Basis von Kubernetes aufgebaut. Auf der Plattform läuft eine einfache Preisüberwachungs WebApp als Referenzanwendung. Sie ruft regelmässig Preisdaten von digitalen Marktplatzobjekten ab, speichert aktuelle und historische Werte und stellt diese über eine einfache Weboberfläche dar.
Der fachliche Fokus liegt nicht auf der WebApp, sondern auf der Plattform und dem Bereitstellungsprozess. Konkret werden Containerisierung, deklarative Konfiguration mit Helm, eine CI Pipeline mit Container Registry sowie GitOps mit Argo CD umgesetzt. Der gewünschte Soll Zustand der Anwendung wird im Git Repository abgelegt. Argo CD synchronisiert ihn automatisch in den Cluster. Änderungen erfolgen deklarativ, sind nachvollziehbar und reproduzierbar.
Die Arbeit zeigt anhand eines praxisnahen Use Cases, wie zentrale Cloud Native Konzepte in einer überschaubaren, prüfbaren Umgebung kombiniert werden können. Sie deckt die Pflichtmodule Projektmanagement, IaCA und CNC/CNA ab und tangiert das optionale Modul DevOps durch CI Pipeline, Container Registry und automatisierte Auslieferung. Die Anwendung selbst bleibt bewusst einfach. Der Mehrwert liegt im strukturierten Plattformaufbau und in der nachvollziehbaren Betriebsdokumentation.
Ergebnis: Ein versionierter, deklarativer und automatisierbarer Deployment Workflow auf einer kleinen Kubernetes Plattform, dokumentiert mit Architekturdiagrammen, Runbooks und einer reproduzierbaren Umgebung.
2. Einleitung¶
2.1 Ausgangslage¶
Containerisierte Anwendungen werden in vielen Umgebungen noch manuell oder nur teilweise automatisiert bereitgestellt. Daraus ergeben sich typische Probleme:
- Deployments sind schwer nachvollziehbar.
- Rollbacks sind nicht eindeutig definiert.
- Konfigurationen sind nicht zentral dokumentiert.
- Der Soll Zustand einer Anwendung ist nicht versioniert.
- Wer was wann geändert hat, lässt sich nachträglich oft nur mit Aufwand rekonstruieren.
GitOps adressiert diese Probleme, indem der Soll Zustand der Plattform und der Anwendung in einem Git Repository definiert wird. Ein Operator wie Argo CD synchronisiert diesen Zustand automatisch in den Cluster und meldet Abweichungen.
2.2 Zielgruppe¶
Diese Dokumentation richtet sich an:
- den Fachexperten und die Lehrgangsleitung der TBZ,
- spätere Studierende, die einen vergleichbaren Plattformaufbau als Referenz nutzen wollen,
- den Autor selbst als Nachschlagewerk im Betrieb der Plattform.
2.3 Zielsetzung und Messkriterien¶
| Nr. | Ziel | Messkriterium |
|---|---|---|
| 1 | Kubernetes Umgebung aufbauen | Cluster ist lauffähig und mit kubectl erreichbar. |
| 2 | Preisüberwachungs WebApp erstellen | WebApp zeigt aktuelle und gespeicherte Preisdaten an. |
| 3 | Anwendung mit Helm paketieren | Anwendung kann über ein Helm Chart reproduzierbar installiert werden. |
| 4 | GitOps mit Argo CD umsetzen | Änderungen im Git Repository werden durch Argo CD auf Kubernetes synchronisiert. |
| 5 | Build und Image Veröffentlichung automatisieren | CI Pipeline erstellt ein Container Image und veröffentlicht es in einer Container Registry. |
| 6 | Dokumentation und Runbooks erstellen | Dokumentation enthält Architektur, Aufbau, Deployment Ablauf und mindestens drei Runbooks. |
2.4 Abgrenzung¶
Bewusst nicht im Scope:
- produktive Hochverfügbarkeit, Multi Cluster, Service Mesh,
- vollwertiger Observability Stack (Prometheus, Grafana, Loki) als Pflicht; falls Zeit übrig, optional,
- Identity Provider Integration (OIDC, SSO) für Argo CD,
- vollständige Sicherheitshärtung wie Network Policies, Pod Security Standards, RBAC für mehrere Teams,
- vollständige Frontend Architektur, das UI bleibt absichtlich minimal.
2.5 Themenfeldabdeckung¶
| Modul | Abdeckung in dieser Arbeit |
|---|---|
| Projektmanagement (PRJ) | Projektplanung, Sprints, User Stories, Risikomanagement, Reflexion |
| IaCA (Infrastructure as Code Advanced) | Cluster Bootstrap per Skript, Helm Chart als deklarative Anwendungsbeschreibung, Argo CD Manifeste, alles versioniert |
| CNC, Cloud Native Core | Kubernetes Grundlagen, Pods, Services, Deployments, ConfigMaps, Secrets, CronJob |
| CNA, Cloud Native Advanced | Helm, GitOps mit Argo CD, Health Checks, deklarative Application Lifecycle |
| DevOps (optional) | CI Pipeline mit GitHub Actions, Container Registry, automatisierte Auslieferung |
2.6 Anpassung der Projektdauer nach Kickoff Präsentation¶
Die ursprüngliche Planung im Einreichungsformular ging von einer Projektdauer von 12 Wochen aus, aufgeteilt in vier Sprints zu je drei Wochen. In der Kickoff Präsentation wurde durch die Lehrgangsleitung präzisiert, dass die Semesterarbeit tatsächlich nur 9 Wochen dauert. Empfohlen wurde eine Sprintdauer von drei Wochen, sodass insgesamt drei Sprints durchgeführt werden.
Die beiden Zwischenpräsentationen fallen damit jeweils auf das Ende von Sprint 1 und Sprint 2. Sie bieten eine strukturierte Gelegenheit, den Fortschritt zu reflektieren und gegebenenfalls den Plan anzupassen.
Konsequenzen für diese Arbeit:
- Die Sprintplanung wurde von vier auf drei Sprints reduziert (siehe Kapitel 3.2).
- Inhaltlich wurden die ursprünglichen 21 User Stories auf 16 verdichtet, wobei der GitOps Durchstich von Sprint 3 auf Sprint 2 vorgezogen wurde.
- Die Doku Pflege erfolgt parallel ab Sprint 1, damit Sprint 3 nicht durch Doku Nachholarbeit unter Druck gerät.
- Optional geplante Erweiterungen (Argo CD Image Updater, mehrere Values Profile, PostgreSQL als Subchart, vollwertiges Monitoring) wurden gestrichen oder als reine Bonus Items eingestuft.
Diese Anpassung wurde nicht als Risiko, sondern als Präzisierung des Scopes verstanden. Der reduzierte Zeitrahmen schärft den Fokus auf die Plattform und auf einen sauberen GitOps Lifecycle.
3. Projektmanagement¶
3.1 Vorgehensmodell¶
Die Arbeit folgt einem schlanken, agilen Vorgehensmodell mit drei Sprints zu je drei Wochen. Pro Sprint werden ein Sprint Ziel, eine kleine Anzahl User Stories und ein definierter Demo Stand festgelegt. Am Ende jedes Sprints werden Sprint Review und Sprint Retrospektive im Dokument festgehalten.
Das Projektmanagement erfolgt vollständig auf GitHub:
- Issues für User Stories, Tasks, Bugs und technische Abklärungen,
- GitHub Projects als Kanban Board (Spalten: Backlog, Ready, In Progress, Review, Done),
- Custom Fields im Project Board für Story Points, Priority und Sprint Zuordnung,
- Milestones pro Sprint (Sprint 1, Sprint 2, Sprint 3),
- Pull Requests für Code Reviews mit sich selbst, das heisst jede grössere Änderung wird über einen Branch und PR eingebracht,
- Tags und Releases für Sprint Abschlüsse und die Demo Version.
3.2 Sprintplan¶
Realistisch geplant mit ca. 50 Stunden Aufwand verteilt auf 9 Wochen, also rund 5 bis 6 Stunden pro Woche.
Sprint 1, Wochen 1 bis 3, Setup und Fundament¶
Sprint Ziel: Repository, Cluster, WebApp Skelett und Container sind lokal lauffähig.
| Story | Inhalt | Story Points |
|---|---|---|
| US01 | Repository, Project Board, Milestones, Branch Protection, Issue Templates aufgesetzt | 1 |
| US02 | Architekturentscheide dokumentiert (mindestens 5 ADRs) | 2 |
| US03 | Lokaler Kubernetes Cluster mit kind, idempotentes Setup Skript | 3 |
| US04 | WebApp Skelett mit FastAPI, Endpoints /, /healthz, /ready, lokal lauffähig |
3 |
| US05 | Dockerfile baut Image lokal, Container startet, /healthz liefert 200 |
2 |
Sprint 1 Total: 11 Story Points.
Demo Stand am Sprint Ende, Zwischenpräsentation 1:
- Cluster läuft, kubectl get nodes zeigt zwei Ready Nodes.
- WebApp läuft per docker run, Browser zeigt Hello World mit Health Check.
- Repository, Board und Doku Skelett sind auf Pages sichtbar.
Sprint 2, Wochen 4 bis 6, GitOps Durchstich¶
Sprint Ziel: Push auf main führt automatisch zu Build, Push, Sync und Deployment im Cluster.
| Story | Inhalt | Story Points |
|---|---|---|
| US06 | Preisabruf gegen Quelle oder Testdaten implementiert, Daten in SQLite | 3 |
| US07 | API liefert aktuelle und historische Preise, Frontend zeigt Tabelle und einfachen Verlauf | 3 |
| US08 | GitHub Actions Workflow baut Image und pusht nach GHCR | 3 |
| US09 | Helm Chart price-watch mit Deployment, Service, ConfigMap, Secret, PVC, CronJob |
3 |
| US10 | Argo CD installiert, Application zeigt auf Helm Chart, automatisches Sync funktioniert | 3 |
| US11 | Liveness und Readiness Probes konfiguriert | 1 |
Sprint 2 Total: 16 Story Points. Bewusst der schwerste Sprint, da hier der Durchstich entsteht.
Demo Stand am Sprint Ende, Zwischenpräsentation 2:
- Push auf main führt zu CI Build, Argo CD synct, neue Version läuft im Cluster.
- WebApp im Cluster zeigt Preise (echt oder Testdaten).
- Argo CD UI zeigt Application im Status Synced, Healthy.
Sprint 3, Wochen 7 bis 9, Stabilisierung, Runbooks, Doku¶
Sprint Ziel: Plattform und Dokumentation sind prüfbar abgeschlossen, Schlussdemo ist vorbereitet.
| Story | Inhalt | Story Points |
|---|---|---|
| US12 | Rollback Szenario per Git Revert dokumentiert | 2 |
| US13 | Drei Runbooks erstellt, getestet und in Doku eingebunden | 3 |
| US14 | Tests und Lint laufen automatisiert in der Pipeline | 2 |
| US15 | Architekturdiagramme, Glossar, Quellen, Abbildungsverzeichnis vollständig | 2 |
| US16 | Management Summary, Reflexion und Demo Skript fertig | 3 |
Sprint 3 Total: 12 Story Points.
Demo Stand am Sprint Ende, Schlusspräsentation:
- Komplette Toolchain läuft, Live Demo zeigt Push und Sync.
- Rollback per git revert wird vorgeführt.
- Doku ist vollständig auf Pages erreichbar.
3.3 Sprint Reviews und Retrospektiven (Vorlage)¶
Pro Sprint nach diesem Schema dokumentieren:
#### Sprint X Review
- Geplante Stories: ...
- Erreicht: ...
- Nicht erreicht und Grund: ...
- Demo Stand: ...
#### Sprint X Retrospektive
- Was lief gut?
- Was war schwierig?
- Was nehme ich in den nächsten Sprint mit?
3.4 Branching Strategie¶
Bewusst einfach gehalten, passend für ein Einpersonen Projekt mit Nachweisanspruch.
mainist der stabile Hauptbranch und gleichzeitig der GitOps Soll Zustand. Direktpushes sind durch Branch Protection unterbunden.developist der permanente Arbeitsbranch. Hier erfolgen die täglichen Commits.gh-pageswird ausschliesslich vom MkDocs Workflow geschrieben, niemals manuell.- Pull Requests gehen
developnachmain, jeweils am Sprint Ende, per Squash Merge. - Optional Feature Branches
feat/<kurzname>für grössere parallele Themen. - Tags pro Sprint Abschluss:
sprint-1,sprint-2,sprint-3unddemo.
Branch Protection ist über GitHub Rulesets umgesetzt:
| Branch | Schutz |
|---|---|
main |
kein Direktpush, PR Pflicht, linear history, kein Force Push, keine Löschung |
develop |
keine Löschung, kein Force Push |
gh-pages |
keine Löschung (Force Push erlaubt, da MkDocs gh-deploy ihn benötigt) |
3.5 Repository Strategie: Monorepo¶
Es wurde zwischen Monorepo und mehreren Repositories abgewogen.
| Kriterium | Monorepo | Multi Repo |
|---|---|---|
| Komplexität | gering | höher |
| Nachvollziehbarkeit Commit zu Deployment | direkt | indirekt, mehrere Repos beobachten |
| GitOps Konfiguration | einfacher Pfad in Argo CD | benötigt zusätzliches Konfigurations Repo |
| Realistisch für 50 Stunden Projekt | ja | nein |
| HF Bewertbarkeit, alles an einem Ort | ja | nein |
Entscheid: Monorepo. Code, Helm Chart, Argo CD Application und Dokumentation liegen in einem Repository. Argo CD beobachtet helm/price-watch. Die Anwendung wird im selben Repository entwickelt, wodurch der Lifecycle transparent ist.
3.6 Definition of Done¶
Eine User Story gilt als erledigt, wenn:
- der Code auf
mainist (überdevelopund Pull Request), - ein Issue Eintrag dokumentiert, was erledigt wurde,
- relevante Screenshots oder Logs in
docs/screenshots/abgelegt sind, - die Funktion lokal reproduzierbar ist (Anleitung in der Doku oder im Runbook),
- wo sinnvoll, Tests oder Lint Schritte in der Pipeline grün sind,
- wo zutreffend, Argo CD die Application im Status
Synced, Healthyzeigt.