====== FiberOps Platform – DevOps Showcase ====== Dieses Projekt ist ein praxisnahes DevOps-Showcase und demonstriert den Aufbau, die Automatisierung und den Betrieb einer containerisierten Plattform für einen internen Glasfaser-/Netzbetriebsservice. Die Dokumentation richtet sich bewusst sowohl an **technische Entscheider** als auch an **nicht-technische Leser**. ===== Ziel des Projekts ===== Ziel ist es zu zeigen, wie moderne DevOps-Arbeit in einer On-Prem- oder Cloud-nahen Umgebung aussieht: * reproduzierbare Infrastruktur * klare Trennung von Verantwortlichkeiten * automatisiertes Deployment * stabiler, beobachtbarer Betrieb Der fachliche Use Case orientiert sich an einem realen Szenario aus dem Glasfaserbetrieb (POP, OLT, Segmente, Incidents). ===== Architekturübersicht ===== Root Server (Debian 12) │ ├─ KVM / QEMU / Libvirt │ ├─ VM 1: Kubernetes (k3s) │ └─ FiberOps Webservice (Container) │ └─ VM 2: Monitoring ├─ Prometheus └─ Grafana **Warum diese Architektur?** * Virtualisierung (KVM): saubere Isolation, typisch für On-Prem-Betrieb * Kubernetes: deklarativer Betrieb, Self-Healing, saubere Updates * k3s: gleiche Kubernetes-API bei geringerem Ressourcenbedarf * Trennung von Anwendung und Monitoring ===== Voraussetzungen ===== * Root-Server mit Debian 12 * Root-Zugriff * 8 CPU-Kerne * ca. 16 GB RAM empfohlen * Internetzugang * SSH-Zugriff ===== Schritt 1: Virtualisierung vorbereiten ===== Installation der notwendigen Komponenten auf dem Root-Server: apt update apt install -y \ qemu-kvm \ libvirt-daemon-system \ libvirt-clients \ virtinst \ bridge-utils \ cloud-image-utils systemctl enable --now libvirtd Optional: aktuellen Benutzer zur libvirt-Gruppe hinzufügen: usermod -aG libvirt,kvm $USER ===== Schritt 2: Virtuelle Maschinen erstellen ===== Die VMs werden per **cloud-init** automatisiert erzeugt. Dadurch ist das Setup reproduzierbar und ohne manuelle Installation. Beispiel (verkürzt): virt-install \ --name fiberops-k3s \ --memory 4096 \ --vcpus 4 \ --disk size=30 \ --os-variant debian12 \ --network network=default \ --graphics none \ --import Eine zweite VM wird analog für Monitoring erstellt. ===== Schritt 3: Kubernetes (k3s) installieren ===== In der Kubernetes-VM: curl -sfL https://get.k3s.io | sh - kubectl get nodes k3s wurde bewusst gewählt: * gleiche Kubernetes-API wie „vollwertiges“ k8s * geringerer Overhead * ideal für kleine bis mittlere Plattformen ===== Schritt 4: Anwendung deployen ===== Die Anwendung wird containerisiert und über Kubernetes betrieben. Deployment ausführen: kubectl apply -f k8s/namespace.yaml kubectl apply -f k8s/deployment.yaml kubectl apply -f k8s/service.yaml kubectl apply -f k8s/ingress.yaml Status prüfen: kubectl get pods -n fiberops kubectl get svc -n fiberops ===== Schritt 5: CI/CD ===== Der Build- und Deployment-Prozess ist automatisiert: * Code-Änderung → Git Push * CI baut Container-Image * Image wird in Registry gespeichert * Kubernetes rollt neue Version kontrolliert aus Dadurch sind **keine manuellen Deployments** notwendig. ===== Schritt 6: Monitoring ===== Monitoring erfolgt getrennt von der Anwendung: * Prometheus sammelt Metriken * Grafana visualisiert: * Node-Auslastung * Pod-Status * Verfügbarkeit des Services Dies bildet die Grundlage für: * Fehlererkennung * Kapazitätsplanung * spätere Alerts ===== Betrieb & Wartung ===== * Kubernetes Probes überwachen die Anwendung * Pods werden bei Fehlern automatisch neu gestartet * Updates erfolgen als Rolling Update ohne Downtime * Infrastruktur ist vollständig neu aufsetzbar ===== Erweiterungsmöglichkeiten ===== * Multi-Node Kubernetes * GitOps (z. B. ArgoCD) * Backups * High Availability Control Plane * Network Policies / RBAC-Härtung ====== ---------- ====== ====== FiberOps Platform – Showcase & Demo-Anleitung ====== seed: internal/fiberops/data.go ** Das System zeigt den Zustand eines Glasfaser-/Netzbetriebs in einer einfachen, klaren Form. Es liefert live Informationen zu Segmenten (gesund, degradiert, down) und zu aktuellen Incidents mit Priorität und Status, Operations-Dashboard-Backend, das jederzeit abrufbar ist.** ==== 1) Live-Service prüfen (sofort sichtbarer Nutzen) ==== curl http://185.207.106.68:30080/health curl http://185.207.106.68:30080/segments curl http://185.207.106.68:30080/incidents curl http://185.207.106.68:30080/metrics | head * Health-Endpunkt wird auch von Kubernetes-Probes genutzt * /segments zeigt den fachlichen Use Case (Glasfaserbetrieb) * /metrics zeigt Betriebs- und Monitoring-Fähigkeit ==== 2) Kubernetes-Betrieb zeigen ==== export KUBECONFIG=/etc/rancher/k3s/k3s.yaml kubectl get nodes -o wide kubectl get ns kubectl get pods -n fiberops -o wide kubectl get deploy,svc,ingress -n fiberops -o wide kubectl -n fiberops rollout status deploy/fiberops kubectl -n fiberops logs deploy/fiberops --tail=50 * get nodes → Cluster-Gesundheit * get pods → Laufzeitstatus der Anwendung * deploy/svc/ingress → Kernobjekte von Kubernetes * rollout status → kontrollierte Updates (kein Blindflug) * logs → Fehlersuche ohne SSH in Container → Zeigt operativen Kubernetes-Betrieb, nicht nur Deployment. ==== 3) CI/CD auslösen (Automatisierung demonstrieren) ==== cd /home/boothtml/fiberops-platform gh auth status gh workflow run ci-cd.yaml --ref main -f deploy=true gh run list --workflow ci-cd.yaml --limit 5 gh run watch **GitHub Actions + gh CLI** * CI/CD ist reproduzierbar und versioniert * kein manuelles Deployment auf dem Server * gh CLI vermeidet UI-Klicken und ist skriptfähig → Änderungen werden über Git gesteuert, nicht per Handarbeit. ==== 4) Deployment verifizieren ==== kubectl -n fiberops get pods -o wide kubectl -n fiberops rollout status deploy/fiberops curl http://185.207.106.68:30080/version * stellt sicher, dass das Deployment erfolgreich war * zeigt, dass neue Versionen tatsächlich aktiv sind * Verbindung zwischen CI/CD und laufender Anwendung → Vertrauen in den automatisierten Prozess. ==== 5) Change → Deploy → Verify (DevOps-Kern) ==== cd /home/boothtml/fiberops-platform apply_patch <<'PATCH' *** Begin Patch *** Update File: internal/app/config.go @@ - Version: getEnv("APP_VERSION", "dev"), + Version: getEnv("APP_VERSION", "demo-change"), *** End Patch PATCH git add internal/app/config.go git commit -m "demo: change default version" git push gh workflow run ci-cd.yaml --ref main -f deploy=true gh run watch curl http://185.207.106.68:30080/version **Warum dieser Ablauf wichtig ist** * Änderung erfolgt ausschließlich über Git * kein direkter Eingriff auf dem Server * CI/CD baut, verteilt und deployed automatisch * Ergebnis ist sofort überprüfbar → Genau dieser Zyklus beschreibt moderne DevOps-Arbeit. ==== 6) Repository & Dokumentation ==== * Repository: https://github.com/HannesFehre/m-IT_FiberOps * Einstieg: README.md * Architektur: docs/architecture.md * Runbooks: runbooks/deploy.md, runbooks/operations.md **Warum Dokumentation?** * ermöglicht Übergabe an andere Teams * reduziert Bus-Faktor * zeigt strukturierte Arbeitsweise ==== Wichtige Design-Entscheidungen ==== * Kubernetes (k3s) statt Docker-only: → deklarativer Betrieb, Self-Healing, saubere Updates * k3s statt volles k8s: → gleiche API, geringerer Ressourcenbedarf, ideal für On-Prem * NodePort für Demo: → schnell sichtbar → in Produktion: Ingress + TLS * Trennung Code / CI / Infrastruktur: → klare Verantwortlichkeiten → wartbar und erweiterbar