Appearance
Warum Kubernetes? β
Zusammenfassung β
Kubernetes ist eine Orchestrierungsplattform fΓΌr Container-Deployment, Skalierung und Verwaltung. Sie automatisiert Aufgaben wie Load-Balancing, Ressourcen-Allokation und Self-Healing in Produktionsumgebungen.
Kernkonzept β
Kubernetes lΓΆst das Skalierungs- und Verwaltungsproblem von Containern (Docker). WΓ€hrend Docker einen einzelnen Container verwaltet, orchestriert Kubernetes Tausende Container ΓΌber mehrere Server verteilt.
Automatisierung statt manuelle Verwaltung: Statt Services manuell zu starten/stoppen, definierst du den Desired State (z.B. "5 Replicas laufen immer"). Kubernetes sorgt automatisch dafΓΌr, dass dieser Zustand erhalten bleibt.
Kernkomponenten: Pods (kleinste Einheit), Services (Netzwerk-Abstraktion), Deployments (deklarative Versionierung), Namespaces (logische Isolation), ConfigMaps/Secrets (Konfiguration & Geheimnisse).
Code-Beispiel β
yaml
# Kubernetes Deployment - deklarativ definiert
apiVersion: apps/v1
kind: Deployment
metadata:
name: java-app-deployment
spec:
replicas: 3 # Kubernetes sorgt fΓΌr 3 laufende Instanzen
selector:
matchLabels:
app: java-app
template:
metadata:
labels:
app: java-app
spec:
containers:
- name: java-container
image: my-java-app:1.0
ports:
- containerPort: 8080
resources:
requests:
memory: "256Mi"
cpu: "250m"
limits:
memory: "512Mi"
cpu: "500m"
livenessProbe: # Self-Healing: Pod wird restartet, wenn unhealthy
httpGet:
path: /health
port: 8080
initialDelaySeconds: 10
periodSeconds: 5java
// Java-App: Readiness/Liveness Endpoints fΓΌr K8s
@RestController
public class HealthController {
@GetMapping("/health")
public ResponseEntity<?> health() {
// Kubernetes prΓΌft das regelmΓ€Γig
return ResponseEntity.ok("{\"status\":\"UP\"}");
}
@GetMapping("/ready")
public ResponseEntity<?> readiness() {
// Ist die App bereit, Traffic zu verarbeiten?
if (databaseConnected && cacheWarmed) {
return ResponseEntity.ok("{\"ready\":true}");
}
return ResponseEntity.status(503).build();
}
}Wichtige Punkte β
- Deklarativ statt imperativ: Du beschreibst den Zielzustand, nicht die Schritte
- Self-Healing & Redundanz: Fehlerhafte Container werden automatisch ersetzt; Lastverteilung ist eingebaut
- Multi-Cluster & Skalierbarkeit: Kann ΓΌber hunderte von Maschinen verteilt werden; horizontal skalierbar durch HPA (Horizontal Pod Autoscaler)
- Konfiguration & Secrets trennen: Umgebungsvariablen, API-Keys etc. werden externalisiert (ConfigMaps/Secrets) β nicht ins Docker-Image
- Rolling Updates & Rollbacks: Zero-Downtime-Deployments; einfaches Rollback bei Fehlern
Klassische Fragen β
Warum nicht einfach Docker verwenden? β
Docker verwaltet einen Container auf einer Maschine. Kubernetes orchestriert hunderte Container ΓΌber mehrere Maschinen, mit Auto-Scaling, Load-Balancing, Self-Healing und deklarativer Verwaltung. Docker ist fΓΌr Entwicklung, Kubernetes fΓΌr Produktion gedacht.
Was ist der Unterschied zwischen Deployment und Pod? β
Ein Pod ist die kleinste Einheit (ein oder mehrere Container). Ein Deployment ist eine hΓΆhere Abstraktion, die sicherstellt, dass immer X Replicas eines Pods laufen, Updates verwaltet und bei AusfΓ€llen automatisch neue Pods erstellt.
Wann sollte man Kubernetes verwenden? β
Kubernetes ist sinnvoll bei: Microservices-Architektur, hohe VerfΓΌgbarkeitsanforderungen, Auto-Scaling-Bedarf, Multi-Tenant-Infrastruktur. FΓΌr monolithische Apps mit stabiler Last ist K8s oft Overkill.
Wie funktioniert Service-Discovery in Kubernetes? β
Kubernetes bietet internes DNS: Jeder Service erhΓ€lt einen DNS-Namen (z.B. my-service.default.svc.cluster.local). Pods kΓΆnnen sich einfach ΓΌber Hostnamen erreichen; K8s managed die IP-Adressen transparent.
Was ist ein Namespace? β
Namespaces sind logische Cluster-Partitionen zur Isolation (Entwicklung, Staging, Produktion in einem Cluster). Sie ermΓΆglichen Multi-Tenancy und verhindern unbeabsichtigte Konflikte zwischen Teams.
Wusstest du schon? β
Kubernetes wurde von Google entwickelt und 2014 open-source freigegeben β basierend auf **Borg