Kubernetes (K8s) ist eine Open-Source-Plattform zur automatisierten Bereitstellung, Skalierung und Verwaltung von containerisierten Anwendungen und Services. Kubernetes bietet ein umfangreiches und schnell wachsendes Ökosystem mit einer breiten Palette an Services, Support und Tools.
Der Name Kubernetes stammt aus dem Griechischen und bedeutet Steuermann oder Lotse. Google hat Kubernetes im Jahr 2014 als Open Source veröffentlicht. Die Plattform basiert auf über einem Jahrzehnt Erfahrung von Google im Betrieb großer Workloads und vereint Best Practices aus der Community.
Evolution der Anwendungsbereitstellung:
Traditionelle Bereitstellung: Anfänglich wurden Anwendungen auf physischen Servern ausgeführt. Die Ressourcenzuweisung war ineffizient, da keine klaren Grenzen zwischen den Anwendungen definiert werden konnten.
Virtualisierte Bereitstellung: Die Virtualisierung ermöglicht den Betrieb mehrerer virtueller Maschinen (VMs) auf einer physischen CPU. Anwendungen werden isoliert und die Sicherheit erhöht, da der Zugriff auf Informationen zwischen VMs beschränkt ist. Die Virtualisierung verbessert die Ressourcenauslastung und Skalierbarkeit.
Container-Bereitstellung: Container ähneln VMs, teilen sich jedoch das Betriebssystem (OS). Dadurch sind Container ressourcenschonender („lightweight“). Ähnlich wie VMs verfügen Container über ein eigenes Dateisystem, CPU, Arbeitsspeicher, Prozessbereich usw. Container bieten Vorteile wie: schnelle Anwendungserstellung und -bereitstellung, Continuous Integration und Continuous Delivery (CI/CD), Trennung von Entwicklung und Betrieb, verbesserte System- und Anwendungsüberwachung, Umgebungskonsistenz, Portabilität, zentrale Anwendungsverwaltung, verteilte Microservices, Ressourcenisolierung und effiziente Ressourcenauslastung.
Warum Kubernetes?
In Produktionsumgebungen müssen Container, die Anwendungen ausführen, verwaltet werden, um Ausfallzeiten zu vermeiden. Fällt ein Container aus, muss ein anderer gestartet werden. Kubernetes bietet ein Framework für den zuverlässigen Betrieb verteilter Systeme. Es automatisiert Skalierung, Failover und Bereitstellungsmuster.
Kubernetes bietet:
- Service Discovery und Load Balancing: Kubernetes kann Container über DNS oder eine eigene IP-Adresse verfügbar machen. Bei hohem Traffic verteilt Kubernetes die Last, um die Stabilität der Anwendung zu gewährleisten.
- Speicherverwaltung: Kubernetes ermöglicht die automatische Bereitstellung von Speicherlösungen.
- Automatisierte Rollouts und Rollbacks: Kubernetes ermöglicht kontrollierte Updates und Rückrollungen von Anwendungen.
- Automatisches Scheduling: Kubernetes verteilt Container optimal auf die verfügbaren Nodes, um Ressourcen effizient zu nutzen.
- Self-Healing: Kubernetes startet ausgefallene Container neu, ersetzt sie, entfernt nicht reagierende Container und verhindert den Zugriff von Clients, bis diese wieder funktionsfähig sind.
- Konfigurations- und Sicherheitsverwaltung: Kubernetes ermöglicht die sichere Speicherung und Verwaltung sensibler Informationen.
Was Kubernetes nicht ist:
Kubernetes ist keine traditionelle, umfassende PaaS-Lösung (Platform as a Service). Es operiert auf der Container-Ebene, nicht auf der Hardware-Ebene. Kubernetes:
- Beschränkt nicht die Art der unterstützten Anwendungen.
- Stellt keinen Quellcode bereit und baut keine Anwendungen.
- Bietet keine anwendungsspezifischen Services wie Middleware.
- Erfordert keine Logging-, Monitoring- oder Alerting-Lösungen.
- Erfordert oder erzwingt keine spezifische Programmiersprache oder Systemkonfiguration.
- Bietet oder erzwingt keine umfassende Konfiguration, Wartung, Verwaltung oder Selbstheilungssysteme.
- Ist kein reines Orchestrierungssystem. Es eliminiert die Notwendigkeit der manuellen Orchestrierung.