Orchestrierung & Kubernetes

Warum brauchen wir Orchestrierung?

Ein einzelner Docker-Container auf einem einzelnen Server ist einfach zu verwalten. Aber was passiert wenn du 50 Microservices, 200 Container- Instanzen auf 10 Servern hast und diese automatisch skalieren, bei Ausfällen neu starten und Updates ohne Downtime einspielen willst? Dann braucht man einen Container-Orchestrator.

Was ist Kubernetes?

Kubernetes (kurz: K8s – das "8" steht für die 8 Buchstaben zwischen K und s) ist das führende Open-Source-System zur Automatisierung von Container-Deployment, Skalierung und Verwaltung. Ursprünglich von Google entwickelt (basierend auf internem "Borg"-System) und 2014 als Open Source veröffentlicht.

Kubernetes-Architektur

Kubernetes Cluster:

┌──────────────────────────────────────────────────┐
│                Control Plane                     │
│  ┌──────────┐ ┌──────────┐ ┌──────────────────┐  │
│  │API Server│ │Scheduler │ │Controller Manager│  │
│  └──────────┘ └──────────┘ └──────────────────┘  │
│  ┌──────────────────────────────────────────────┐│
│  │                  etcd                        ││
│  └──────────────────────────────────────────────┘│
└──────────────────────────────────────────────────┘
                      │
        ┌─────────────┼─────────────┐
        │             │             │
┌───────────┐  ┌───────────┐  ┌───────────┐
│  Worker   │  │  Worker   │  │  Worker   │
│  Node 1   │  │  Node 2   │  │  Node 3   │
│  kubelet  │  │  kubelet  │  │  kubelet  │
│  kube-    │  │  kube-    │  │  kube-    │
│  proxy    │  │  proxy    │  │  proxy    │
│ [Pod][Pod]│  │ [Pod][Pod]│  │ [Pod][Pod]│
└───────────┘  └───────────┘  └───────────┘

Kubernetes-Komponenten

Control Plane

Komponente

Aufgabe

API Server

Zentrale Schnittstelle – alle Befehle gehen durch den API Server

etcd

Verteilte Key-Value-Datenbank – speichert den Cluster-Zustand

Scheduler

Entscheidet auf welchem Node ein Pod gestartet wird

Controller Manager

Überwacht Cluster-Zustand und stellt Soll-Zustand sicher

Worker Nodes

Komponente

Aufgabe

kubelet

Agent auf jedem Node – startet und überwacht Pods

kube-proxy

Netzwerk-Proxy – leitet Traffic zu den richtigen Pods

Container Runtime

Startet Container (containerd, CRI-O)

Kubernetes-Objekte

Pod

Kleinste deploybare Einheit in Kubernetes:
- Enthält einen oder mehrere Container
- Container in einem Pod teilen Netzwerk und Storage
- Hat eine eigene IP-Adresse im Cluster

Beispiel:
apiVersion: v1
kind: Pod
metadata:
  name: webserver
spec:
  containers:
  - name: nginx
    image: nginx:1.25
    ports:
    - containerPort: 80

Deployment

Verwaltet eine Menge von Pods (ReplicaSet):
- Definiert Soll-Zustand (z.B. 3 Replicas)
- Rollt Updates automatisch aus
- Rollback bei Fehlern möglich

Beispiel:
apiVersion: apps/v1
kind: Deployment
metadata:
  name: webserver
spec:
  replicas: 3                    ← 3 Instanzen
  selector:
    matchLabels:
      app: webserver
  template:
    metadata:
      labels:
        app: webserver
    spec:
      containers:
      - name: nginx
        image: nginx:1.25
        resources:
          requests:
            cpu: "100m"
            memory: "128Mi"
          limits:
            cpu: "500m"
            memory: "256Mi"

Service

Stabiler Endpunkt für Pods (Pods kommen und gehen):

Typen:
ClusterIP   → Nur intern im Cluster erreichbar (Standard)
NodePort    → Auf jedem Node auf einem Port erreichbar
LoadBalancer → Externer Load Balancer (Cloud)
ExternalName → DNS-Alias für externen Dienst

Beispiel:
apiVersion: v1
kind: Service
metadata:
  name: webserver-svc
spec:
  selector:
    app: webserver             ← Leitet zu Pods mit diesem Label
  ports:
  - port: 80
    targetPort: 80
  type: ClusterIP

Kubernetes Features

Feature

Beschreibung

Auto-Scaling

HPA skaliert Replicas basierend auf CPU/RAM automatisch

Self-Healing

Abgestürzte Container werden automatisch neu gestartet

Rolling Updates

Updates ohne Downtime – Pod für Pod erneuert

Rollback

Bei Fehlern sofort zur vorherigen Version zurück

Service Discovery

Container finden sich per DNS-Namen

Secrets

Passwörter und Zertifikate sicher verwalten

ConfigMaps

Konfiguration von Container-Images trennen

Namespaces

Cluster in virtuelle Cluster aufteilen (Teams/Projekte)

kubectl – Kubernetes CLI

Cluster-Info:
kubectl cluster-info
kubectl get nodes

Pods:
kubectl get pods
kubectl get pods -n kube-system        → Pods im Namespace kube-system
kubectl describe pod webserver
kubectl logs webserver
kubectl exec -it webserver -- bash

Deployments:
kubectl get deployments
kubectl apply -f deployment.yaml       → Deployment erstellen/aktualisieren
kubectl delete -f deployment.yaml      → Deployment löschen
kubectl scale deployment webserver --replicas=5
kubectl rollout status deployment webserver
kubectl rollout undo deployment webserver  → Rollback

Services:
kubectl get services
kubectl expose deployment webserver --port=80 --type=LoadBalancer

K3s – Leichtgewichtiges Kubernetes

K3s ist eine leichtgewichtige Kubernetes-Distribution von Rancher/SUSE – ideal für Homelab, Edge-Computing und ressourcenbeschränkte Umgebungen:

Unterschiede zu Standard-Kubernetes:
- Einzelne Binary (~70 MB statt mehrere GB)
- Integrierte SQLite statt etcd (für Single-Node)
- Weniger RAM-Bedarf (~512 MB)
- Einfache Installation (ein Befehl)

Installation:
curl -sfL https://get.k3s.io | sh -

K3s läuft auf:
- Raspberry Pi (ARM)
- Kleine VMs
- Edge-Geräte
- Homelab

Managed Kubernetes – Cloud-Angebote

Anbieter

Produkt

Besonderheit

AWS

EKS (Elastic Kubernetes Service)

Control Plane von AWS verwaltet

Azure

AKS (Azure Kubernetes Service)

Kostenloser Control Plane

Google

GKE (Google Kubernetes Engine)

Autopilot-Modus verfügbar

Hetzner

Hetzner Cloud + K3s

Günstigste Option

Zusammenfassung

  • Kubernetes orchestriert Container über mehrere Server hinweg

  • Der Control Plane (API Server, Scheduler, etcd) verwaltet den Cluster-Zustand

  • Worker Nodes führen die eigentlichen Container in Pods aus

  • Pods sind die kleinste deploybare Einheit – enthalten einen oder mehrere Container

  • Deployments verwalten Replicas und ermöglichen Rolling Updates

  • Services bieten stabile Endpunkte für dynamisch kommende und gehende Pods

  • Kubernetes heilt sich selbst – abgestürzte Container werden automatisch neu gestartet

  • K3s ist eine leichtgewichtige Alternative ideal für Homelab und Edge