[go: up one dir, main page]
More Web Proxy on the site http://driver.im/
Skip to content

mst2k/IMAKube

Repository files navigation

Kubernetes HPA Demo

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).

{0791844E-63C7-4537-9CC5-039658465CC5}

Inhaltsverzeichnis

  1. Hauptkomponenten
  2. Voraussetzungen
  3. Projekt klonen
  4. Docker-Images bauen
  5. Lokale Ausführung mit Docker Compose
  6. Installation in Kubernetes
  7. Aktualisierung in Kubernetes

Hauptkomponenten

Backend (Go)

  • /generate-load: Berechnung der angegebenen Fibonacci-Folge
  • /crash-backend: Simuliert einen Fatal Crash des Backends
  • /healthz: Gibt Auskunft, ob der Backendservice bereit ist

Frontend (React)

  • Interaktion mit Backend und Visualisierung

Infrastruktur

  • Docker Desktop: Stellt leichtgewichtige Kubernetes Distribution bereit
  • NGINX Ingress Controller: Verwaltet eingehenden Netzwerkverkehr
  • Helm: Fungiert als Paketmanager für Kubernetes-Anwendungen

Voraussetzungen

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

Projekt klonen

Klonen Sie das Repository mit folgendem Befehl:

git clone https://github.com/mst2k/IMAKube.git
cd IMAKube

Docker-Images bauen

Bauen Sie die Docker-Images mit Docker Compose:

docker compose build

Lokale Ausführung mit Docker Compose

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

Installation in Kubernetes

  1. Stellen Sie sicher, dass Ihr Kubernetes-Cluster läuft und kubectl korrekt konfiguriert ist.

  2. Installieren Sie den Helm-Chart:

helm install imakube . \
  -f values.yaml \
  -f values-metrics-server.yaml \
  --create-namespace \
  --namespace imakube
  1. Überprüfen Sie die Installation:
kubectl get pods -n imakube
kubectl get hpa -n imakube

Aktualisierung in Kubernetes

Wenn Sie Änderungen an Ihrem Code oder den Kubernetes-Konfigurationen vorgenommen haben:

  1. Bauen Sie die Docker-Images neu

  2. 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.

  1. Überprüfen Sie die Aktualisierung:
kubectl get pods -n imakube
kubectl get hpa -n imakube

Zusätzliche Hinweise

  • Ü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 und values-metrics-server.yaml Ihres Helm-Charts an, um das Skalierungsverhalten zu optimieren.

  • Verwenden Sie kubectl logs und kubectl 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!

Default downscale verhalten ändern unter Docker Desktop

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
    ...