Zum Inhalt

Start

# GitOps Plattform mit Preisüberwachungs WebApp **Cloud Native Deployment auf Kubernetes mit Helm, Argo CD und GitHub Actions**

Python 3.12 FastAPI Docker Kubernetes Helm Argo CD GitHub Actions GitOps


Dokumentation

Die laufende Projektdokumentation ist auf GitHub Pages verfügbar:

GitHub Pages: https://cancani.com/gitops-platform-sem5/

Dokument Inhalt
Dokumentation Hauptdokument, alle Kapitel von Management Summary bis Reflexion
Runbook 01: Plattform Initial Setup Cluster und Argo CD initial aufbauen
Runbook 02: Neue Version deployen Standard GitOps Release Workflow
Runbook 03: Rollback Release Rollback eines fehlerhaften Releases

Kurzbeschreibung

Containerisierte Anwendungen werden in vielen Umgebungen noch manuell oder nur teilweise automatisiert bereitgestellt. Deployments sind dadurch schwer nachvollziehbar, Rollbacks nicht sauber definiert und der Soll Zustand der Anwendung ist nicht zentral versioniert.

Diese Semesterarbeit baut eine kleine, aber realistische Cloud Native Plattform auf Kubernetes auf. Der Soll Zustand wird im Git Repository gepflegt. Argo CD synchronisiert ihn automatisch in den Cluster. Eine Preisüberwachungs WebApp dient als realistischer Workload und ist bewusst einfach gehalten. Der Fokus der Arbeit liegt auf Plattform, GitOps, Helm und CI Pipeline.


Sprint Status

Sprint Wochen Sprint Ziel Status
Sprint 1 1 bis 3 Setup, Cluster, WebApp Skelett, Container status
Sprint 2 4 bis 6 GitOps Durchstich (CI, Helm, Argo CD) status
Sprint 3 7 bis 9 Stabilisierung, Runbooks, Doku, Demo status

Architektur auf einen Blick

flowchart LR
    Dev[Entwickler] -->|git push| Repo[(GitHub Repository)]
    Repo -->|Trigger| CI[GitHub Actions CI]
    CI -->|Build und Push| Reg[(GitHub Container Registry)]
    Repo -->|Helm Chart Pfad| Argo[Argo CD]
    Argo -->|kubectl apply, Sync| K8s[(Kubernetes Cluster)]
    Reg -->|Image Pull| K8s
    K8s --> App[Preisüberwachungs WebApp]
    App --> DB[(SQLite)]
    App -->|HTTPS| User[Benutzer]

Tech Stack

Bereich Technologie
Cluster kind (Kubernetes in Docker)
Orchestrierung Kubernetes
Paketierung Helm
GitOps Argo CD
CI Pipeline GitHub Actions
Container Build Docker
Registry GitHub Container Registry (ghcr.io)
Backend Python 3.12, FastAPI
Frontend minimales HTML mit Chart.js
Datenbank SQLite mit PVC
Job Scheduling Kubernetes CronJob für regelmässigen Preisabruf
Quelle Preisdaten öffentliche Preis API mit Testdaten Fallback
Doku MkDocs Material auf GitHub Pages

GitOps Workflow

Änderungen am Deployment erfolgen ausschliesslich über Commits im Git Repository. Es wird nicht direkt im Cluster konfiguriert.

sequenceDiagram
    autonumber
    participant Dev as Entwickler
    participant Git as GitHub
    participant CI as GitHub Actions
    participant Reg as GHCR
    participant Argo as Argo CD
    participant K8s as Kubernetes

    Dev->>Git: git push (Code oder Helm Werte)
    Git->>CI: trigger workflow
    CI->>CI: Build, Test, Lint
    CI->>Reg: docker push image:tag
    Argo->>Git: poll oder webhook
    Argo->>K8s: apply Manifeste aus Helm Chart
    K8s->>Reg: pull image
    K8s-->>Argo: Status Healthy
    Argo-->>Dev: sichtbar im Argo CD UI

Repository Struktur

.
├── README.md                       # Repository Einstieg
├── mkdocs.yml                      # MkDocs Material Konfiguration
├── docs/                           # gesamte Doku, wird zur Pages Seite
│   ├── index.md                    # diese Startseite
│   ├── dokumentation.md            # Hauptdokument der Semesterarbeit
│   ├── runbooks/                   # drei Runbooks
│   ├── architektur/                # Diagramme und ADRs
│   └── screenshots/                # Nachweise und Belege
├── app/
│   ├── backend/                    # FastAPI Service: API, Preisabruf, DB Zugriff
│   └── frontend/                   # einfache Weboberfläche
├── docker/
│   └── Dockerfile                  # Image Definition WebApp
├── helm/
│   └── price-watch/                # Helm Chart der WebApp
├── argocd/
│   └── price-watch-app.yaml        # Argo CD Application Definition
├── .github/
│   ├── workflows/
│   │   ├── ci.yaml                 # Build und Push in Registry
│   │   └── docs.yaml               # MkDocs Build und Pages Deploy
│   ├── ISSUE_TEMPLATE/             # User Story, Task, Bug Templates
│   └── PULL_REQUEST_TEMPLATE.md
├── tests/                          # Unit Tests, Smoke Tests
└── scripts/
    ├── setup-cluster.sh            # kind Cluster aufsetzen
    └── bootstrap-argocd.sh         # Argo CD installieren

Quick Start, lokales Setup

Voraussetzungen: Docker, kubectl, Helm, kind, Git, Visual Studio Code.

# 1. Repository klonen
git clone https://github.com/Cancani/gitops-platform-semesterarbeit5.git
cd gitops-platform-semesterarbeit5

# 2. lokalen Cluster bauen
./scripts/setup-cluster.sh
kubectl get nodes                     # erwartet: 2 Nodes Ready

# 3. Argo CD installieren und initiale Application erstellen
./scripts/bootstrap-argocd.sh
kubectl -n argocd port-forward svc/argocd-server 8080:443

# 4. Status prüfen
kubectl get applications -n argocd
kubectl get pods -n price-watch

Eine vollständige Schritt für Schritt Anleitung mit Screenshots befindet sich im Runbook 01: Plattform Initial Setup.


Referenzprojekt aus früherer Semesterarbeit

Die 4. Semesterarbeit ist als Referenzprojekt verlinkt und dient als Nachweis für vorhandene Erfahrung mit strukturierter Projektdokumentation, CI/CD, Docker und Microservice Architektur.

Die neue Semesterarbeit ist keine Wiederholung, sondern eine fachliche Erweiterung in Richtung Kubernetes, GitOps, Helm, Argo CD und Cloud Native Plattform Engineering. Details und Lerntransfer siehe Dokumentation Kapitel 12.


Autor und Rahmen

Feld Wert
Autor Efekan Demirci
Klasse ITCNE24
Schule Technische Berufsschule Zürich TBZ, Höhere Fachschule
Semester 5
Fachexperte IaCA, CNC, CNA Marcel Bernet
Fachexperte PRJ Thanam Pangri
Module Projektmanagement, IaCA, CNC und CNA, optional DevOps
Geplanter Aufwand ca. 50 Stunden über 9 Wochen
Repository github.com/Cancani/gitops-platform-semesterarbeit5