Kubernetes (K8s)

Was ist Kubernetes? 🤔

Kubernetes, oft als K8s abgekürzt (K, gefolgt von 8 Buchstaben, dann s), ist eine portable, erweiterbare Open-Source-Plattform zur Automatisierung der Bereitstellung (Deployment), Skalierung und Verwaltung von containerisierten Anwendungen. Ursprünglich von Google entwickelt und auf dessen internem System "Borg" basierend, wird Kubernetes heute von der Cloud Native Computing Foundation (CNCF) gepflegt. Es hat sich als De-facto-Standard für die Container-Orchestrierung etabliert.

Die Hauptaufgabe von Kubernetes ist es, die Komplexität des Betriebs von Anwendungen, die in Containern (wie z.B. Docker-Containern) verpackt sind, über einen Cluster von Maschinen hinweg zu managen. Es automatisiert operative Aufgaben wie das Starten und Stoppen von Containern, die Zuweisung von Ressourcen, die Lastverteilung (Load Balancing), die Sicherstellung der Verfügbarkeit (Self-Healing) und das Durchführen von Updates, wodurch sich Entwicklungs- und Betriebsteams stärker auf die Anwendungslogik konzentrieren können.

Kernkonzepte und Architektur

Kubernetes basiert auf einer Reihe von Abstraktionen und Komponenten:

  • Cluster: Ein Verbund von Rechnern (Nodes), auf denen Kubernetes läuft und Anwendungen ausgeführt werden. Ein Cluster besteht aus mindestens einer Control Plane und einem oder mehreren Worker Nodes.
  • Node (Knoten): Eine physische oder virtuelle Maschine innerhalb des Clusters, die als Worker fungiert und die Container ausführt. Auf jedem Node laufen notwendige Dienste wie die Container Runtime (z.B. containerd, CRI-O oder Docker), das kubelet (Agent zur Kommunikation mit der Control Plane) und der kube-proxy (verantwortlich für Netzwerkregeln).
  • Control Plane (Steuerungsebene): Das "Gehirn" des Clusters. Sie trifft globale Entscheidungen über den Cluster (z.B. Scheduling von Anwendungen), erkennt und reagiert auf Cluster-Ereignisse. Ihre Hauptkomponenten sind der API Server (zentrale Schnittstelle), etcd (konsistenter Key-Value-Speicher für alle Clusterdaten), der Scheduler (weist neuen Pods Nodes zu) und der Controller Manager (führt Controller aus, die den Clusterzustand regeln).
  • Pod: Die kleinste bereitstellbare Einheit in Kubernetes. Ein Pod repräsentiert eine oder mehrere eng miteinander verbundene Container (z.B. eine Hauptanwendung und ein Sidecar-Container), die sich Netzwerkressourcen (eine gemeinsame IP-Adresse) und Speicher (Volumes) teilen und als eine Einheit verwaltet werden.
  • Service: Eine Abstraktion, die eine logische Gruppe von Pods definiert und einen stabilen Endpunkt (feste IP-Adresse, DNS-Name) bereitstellt, um auf diese Pods zuzugreifen. Services ermöglichen Load Balancing und Service Discovery, auch wenn sich die darunterliegenden Pods ändern (z.B. durch Skalierung oder Neustarts).
  • Deployment / StatefulSet / DaemonSet: Controller, die deklarativ den gewünschten Zustand für eine Gruppe von Pods beschreiben und verwalten. Ein Deployment ist ideal für zustandslose Anwendungen und kümmert sich um Replikation und Rolling Updates. Ein StatefulSet wird für zustandsbehaftete Anwendungen (z.B. Datenbanken) verwendet, die stabile Netzwerkidentifikatoren und persistenten Speicher benötigen. Ein DaemonSet stellt sicher, dass auf allen (oder bestimmten) Nodes im Cluster eine Kopie eines Pods läuft (z.B. für Logging- oder Monitoring-Agenten).
  • kubectl: Das primäre Kommandozeilenwerkzeug (CLI) zur Interaktion mit dem Kubernetes API Server, um Ressourcen im Cluster zu erstellen, anzuzeigen, zu ändern oder zu löschen.

Vorteile und Anwendungsfälle

Der Einsatz von Kubernetes bietet signifikante Vorteile:

  • Automatisierung: Automatisiert viele manuelle Prozesse des Anwendungsbetriebs wie Deployment, Skalierung, Updates und Fehlerbehebung (Self-Healing).
  • Skalierbarkeit und Elastizität: Ermöglicht das einfache und schnelle horizontale Skalieren von Anwendungen (mehr oder weniger Pods) basierend auf der aktuellen Last, oft auch vollautomatisch (Horizontal Pod Autoscaler).
  • Hohe Verfügbarkeit und Ausfallsicherheit: Verteilt Anwendungsinstanzen über mehrere Nodes und startet bei Ausfällen automatisch neue Container, um die Verfügbarkeit sicherzustellen.
  • Ressourcenoptimierung: Sorgt für eine effizientere Auslastung der zugrundeliegenden Hardware durch intelligentes Scheduling der Container auf den verfügbaren Nodes.
  • Plattformunabhängigkeit: Kubernetes kann auf eigener Hardware (On-Premises), in verschiedenen Public Clouds (AWS, Azure, GCP etc.) oder in hybriden Umgebungen betrieben werden, was die Portabilität von Anwendungen erhöht und einen Vendor Lock-in auf Infrastrukturebene vermeidet.
  • Service Discovery und Load Balancing: Integrierte Mechanismen zur Diensterkennung und Lastverteilung.

Typische Anwendungsfälle sind der Betrieb von Microservice-Architekturen, die Skalierung von Webanwendungen, die Integration in CI/CD-Pipelines, das Management zustandsbehafteter Anwendungen und der Aufbau cloud-nativer, portabler Anwendungslandschaften.

Kubernetes im Ökosystem (Docker, Helm, Cloud-Anbieter)

Kubernetes agiert nicht isoliert, sondern ist Teil eines größeren Ökosystems und interagiert mit anderen Technologien:

  • Verhältnis zu Docker: Kubernetes ist ein Orchestrator, Docker (bzw. genauer gesagt eine Container Runtime wie containerd oder CRI-O, die oft aus Docker extrahiert wurde) ist die Software, die die Container auf den einzelnen Nodes ausführt. Kubernetes gibt der Container Runtime Anweisungen, welche Container-Images gestartet, gestoppt oder verwaltet werden sollen. Kubernetes ist also kein Ersatz für Docker, sondern arbeitet mit Container Runtimes zusammen, die das Container Runtime Interface (CRI) implementieren.
  • Helm: Gilt als der "Paketmanager für Kubernetes". Helm Charts ermöglichen es, komplexe Kubernetes-Anwendungen und deren Abhängigkeiten als wiederverwendbare Pakete zu definieren, zu installieren und zu verwalten.
  • Monitoring und Logging: Für den Betrieb sind Monitoring-Lösungen wie Prometheus (Metriken) und Grafana (Dashboards) sowie zentrale Logging-Systeme (z.B. basierend auf Elasticsearch/OpenSearch, Fluentd/Fluent Bit, Kibana oder Loki) unerlässlich.
  • Service Mesh: Technologien wie Istio oder Linkerd können auf Kubernetes aufsetzen, um erweiterte Funktionen für die Kommunikation zwischen Services bereitzustellen (z.B. Traffic Management, Sicherheit, Beobachtbarkeit).
  • Managed Kubernetes Services: Alle großen Cloud-Provider bieten verwaltete Kubernetes-Dienste an (z.B. Amazon EKS, Azure Kubernetes Service (AKS), Google Kubernetes Engine (GKE)), die den Betrieb der komplexen Control Plane für den Nutzer übernehmen und die Bereitstellung von Clustern vereinfachen.

Zurück

Wie können wir Ihnen helfen?

Die Potenziale digitaler Möglichkeiten sind riesig. Das Allermeiste, was Sie sich vorstellen können, können wir für Sie entwickeln. Glauben Sie nicht? Dann sollten wir reden. Sonst natürlich auch gerne.

Mathias Münzner

Geschäftsführer

06221-1878440

Kontakt

cortona GmbH

Margot-Becke-Ring 8

69124 Heidelberg

T: +49 (0) 6221 18 78 440

E: info@cortona.de