Dieses Projekt wurde für die Präsentation im Modul "Informationsmanagement / ERP-Systeme" entwickelt, um Kubernetes-Konzepte zu demonstrieren. Es zeigt die kontinuierliche Lastgenerierung und Backend-Absturz zur Demonstration des Horizontal Pod Autoscaling (HPA).
- Hauptkomponenten
- Voraussetzungen
- Projekt klonen
- Docker-Images bauen
- Lokale Ausführung mit Docker Compose
- Installation in Kubernetes
- Aktualisierung in Kubernetes
/generate-load
: Berechnung der angegebenen Fibonacci-Folge/crash-backend
: Simuliert einen Fatal Crash des Backends/healthz
: Gibt Auskunft, ob der Backendservice bereit ist
- Interaktion mit Backend und Visualisierung
- Docker Desktop: Stellt leichtgewichtige Kubernetes Distribution bereit
- NGINX Ingress Controller: Verwaltet eingehenden Netzwerkverkehr
- Helm: Fungiert als Paketmanager für Kubernetes-Anwendungen
Stellen Sie sicher, dass Sie folgende Tools installiert haben:
- Git
- Docker und Docker Compose
- Kubernetes-Cluster (z.B. Minikube für lokale Entwicklung)
- kubectl
- Helm
Klonen Sie das Repository mit folgendem Befehl:
git clone https://github.com/mst2k/IMAKube.git
cd IMAKube
Bauen Sie die Docker-Images mit Docker Compose:
docker compose build
Führen Sie das Projekt lokal aus:
docker compose up
Um im Hintergrund auszuführen, fügen Sie die -d
Flag hinzu:
docker compose up -d
-
Stellen Sie sicher, dass Ihr Kubernetes-Cluster läuft und
kubectl
korrekt konfiguriert ist. -
Installieren Sie den Helm-Chart:
helm install imakube . \
-f values.yaml \
-f values-metrics-server.yaml \
--create-namespace \
--namespace imakube
- Überprüfen Sie die Installation:
kubectl get pods -n imakube
kubectl get hpa -n imakube
Wenn Sie Änderungen an Ihrem Code oder den Kubernetes-Konfigurationen vorgenommen haben:
-
Bauen Sie die Docker-Images neu
-
Aktualisieren Sie die Helm-Release:
helm upgrade --install imakube . \
-f values.yaml \
-f values-metrics-server.yaml \
--create-namespace \
--namespace imakube
Dieser Befehl führt ein Upgrade durch oder installiert die Release, falls sie noch nicht existiert. Er verwendet sowohl die values.yaml
als auch die values-metrics-server.yaml
für die Konfiguration und stellt sicher, dass der Namespace imakube
existiert.
- Überprüfen Sie die Aktualisierung:
kubectl get pods -n imakube
kubectl get hpa -n imakube
- Überwachen Sie die Leistung Ihrer Anwendung und des HPAs mit:
kubectl describe hpa imakube-backend -n imakube
-
Passen Sie die HPA-Einstellungen in der
values.yaml
undvalues-metrics-server.yaml
Ihres Helm-Charts an, um das Skalierungsverhalten zu optimieren. -
Verwenden Sie
kubectl logs
undkubectl describe
, um Probleme zu diagnostizieren. Zum Beispiel:
kubectl logs -n imakube <pod-name>
kubectl describe pod -n imakube <pod-name>
- Um den Status Ihres Helm-Releases zu überprüfen:
helm status imakube -n imakube
- Wenn Sie Änderungen an Ihren Konfigurationsdateien vornehmen, können Sie einen Dry-Run durchführen, um die Auswirkungen zu überprüfen, ohne tatsächliche Änderungen vorzunehmen:
helm upgrade --install imakube . \
-f values.yaml \
-f values-metrics-server.yaml \
--create-namespace \
--namespace imakube \
--dry-run
Viel Erfolg!
Das defaul Verhalten (Zeit) für das downscaling in Kubernetes kann durch die Folgenden Schritte verkürzt werden. Dies war notwendig, da die Zeit für die Demo begrenzt war.
priviliged shell
docker run -it --privileged --pid=host debian nsenter -t 1 -m -u -n -i sh
config vom controller manager ändern
vi /etc/kubernetes/manifests/kube-controller-manager.yaml
apiVersion: v1
kind: Pod
metadata:
creationTimestamp: null
labels:
component: kube-controller-manager
tier: control-plane
name: kube-controller-manager
namespace: kube-system
spec:
containers:
- command:
...
- --horizontal-pod-autoscaler-sync-period=10s
- --horizontal-pod-autoscaler-downscale-delay=10s
- --horizontal-pod-autoscaler-downscale-stabilization=10s
...