Simulator · Kubernetes Deployment

Erweiterung des BHKW System Tests Projekts — Containerisierung mit Docker und Orchestrierung mit Kubernetes (Minikube), inklusive Health Checks, Auto-Healing und End-to-End Tests gegen das deployte System.

GitHub Repository

Kontext & Motivation

Das ursprüngliche BHKW-Testprojekt simulierte einen Anlagenregler über Modbus TCP und REST API. Ziel dieser Erweiterung war es, diesen Simulator professionell zu containerisieren und auf einem Kubernetes-Cluster zu betreiben — mit automatischem Neustart bei Ausfällen (Self-Healing) und Health Checks, wie es in echten Produktionsumgebungen üblich ist.

Containerisierung

Docker — Simulator als portables Image

Orchestrierung

Kubernetes (Minikube) — Deployment, Service, Probes

Self-Healing

Liveness/Readiness Probes — automatischer Neustart

Validierung

Robot Framework Tests gegen das deployte System

1 — Architektur

Vom Code bis zum laufenden, überwachten Pod im Cluster:

Kubernetes Deployment Architektur fuer BHKW Simulator Docker Image wird in Kubernetes als Deployment mit Service und Health Probes betrieben, getestet von Robot Framework ueber NodePort BHKW Simulator (Python / FastAPI / pymodbus) Identischer Code wie im Original-Testprojekt Dockerfile Docker Image: bhkw-simulator:v2 Bindet auf 0.0.0.0 statt localhost minikube image load Kubernetes Cluster (Minikube) Deployment Pod: bhkw-simulator Liveness Probe: /health Readiness Probe: /health Auto-Restart bei Ausfall Service (NodePort) Modbus: 5020 -> 30020 REST API: 8080 -> 30080 Stabile Erreichbarkeit auch bei Pod-Neustart minikube service --url Robot Framework Tests (TC18-TC20) Health Check, Modbus Connectivity, Full Start-Stop Cycle Identische BHKWLibrary wie im Original-Projekt

2 — Kubernetes Manifeste

Deployment — Pod-Verwaltung & Health Checks

apiVersion: apps/v1
kind: Deployment
metadata:
  name: bhkw-simulator
spec:
  replicas: 1
  template:
    spec:
      containers:
        - name: bhkw-simulator
          image: bhkw-simulator:v2
          ports:
            - containerPort: 5020
            - containerPort: 8080
          livenessProbe:
            httpGet:
              path: /health
              port: 8080
            initialDelaySeconds: 5
            periodSeconds: 10
          readinessProbe:
            httpGet:
              path: /health
              port: 8080
            initialDelaySeconds: 3
            periodSeconds: 5

Service — Stabile Netzwerk-Erreichbarkeit

apiVersion: v1
kind: Service
metadata:
  name: bhkw-simulator-service
spec:
  type: NodePort
  ports:
    - name: modbus
      port: 5020
      nodePort: 30020
    - name: rest-api
      port: 8080
      nodePort: 30080

3 — Realer Bug während der Entwicklung

⚠️ Symptom: Pod blieb dauerhaft in CrashLoopBackOff, Status 0/1 Ready. kubectl describe pod zeigte: Liveness probe failed: connection refused.

Diagnose: Der Container selbst lief fehlerfrei — ein direkter Test mit kubectl exec bestätigte, dass die REST API innerhalb des Containers korrekt antwortete.

Root Cause: uvicorn und der Modbus-Server waren auf localhost gebunden. Kubernetes Health Probes greifen jedoch über die Pod-IP von außerhalb des Containers zu — localhost ist aus dieser Perspektive nicht erreichbar.

# Vorher (funktioniert nicht in Kubernetes)
start_api(simulator, host='localhost', port=8080)

# Nachher (funktioniert)
start_api(simulator, host='0.0.0.0', port=8080)
✅ Fix: Bind-Adresse auf 0.0.0.0 geändert — Pod sofort 1/1 Ready, Probes bestehen zuverlässig.

4 — End-to-End Validierung

Drei neue Robot Framework Tests validieren das komplette deployte System — exakt dieselbe Testbibliothek wie im Original-Projekt, nur gegen die Kubernetes-Service-Endpunkte gerichtet:

TestWas wird geprüftStatus
TC18REST API Health Check über Kubernetes Service✅ PASS
TC19Modbus TCP Konnektivität über Kubernetes Service✅ PASS
TC20Vollständiger Start-Stop-Zyklus gegen den deployten Pod✅ PASS
20/20
Tests gesamt (inkl. Original)
1/1
Pod Ready
1
Realer Bug behoben
0
Cloud-Kosten (lokal)

5 — Zusammenfassung

Docker Kubernetes Minikube kubectl Deployment / Service Liveness / Readiness Probes Self-Healing Robot Framework Modbus TCP REST API Testing Container Networking

6 — Ausblick