Was ist Kubernetes?
Willkommen zu unserem Kubernetes-Grundlagen-Guide! Kubernetes, oft abgekürzt als K8s, ist eine Open-Source-Plattform, die für die automatische Bereitstellung, Skalierung und den Betrieb von Anwendungscontainern entwickelt wurde. Im Kern bietet Kubernetes ein Framework für den robusten Betrieb verteilter Systeme, mit dem sich Aufgaben wie Failover, Skalierung und Bereitstellung effizient bewältigen lassen. Damit werden die Container, aus denen eine Anwendung besteht, zur Erleichterung der Verwaltung und Erkennung in logische Einheiten gruppiert.
Warum brauchen wir Kubernetes?
In der schnelllebigen digitalen Welt von heute streben Organisationen ständig nach Effizienz und Agilität in der Anwendungsentwicklung und -verwaltung. Kubernetes erfüllt diese Anforderung, indem es den Prozess der Bereitstellung und Verwaltung komplexer Anwendungen vereinfacht. Es übernimmt die Skalierung und Ausfallsicherung von Anwendungen, stellt Bereitstellungsmuster bereit und vieles mehr. Das bedeutet, dass sich die Entwickler auf ihre Anwendungen konzentrieren können, während Kubernetes sich um die operationellen Herausforderungen kümmert. Dadurch wird nicht nur die Produktivität verbessert, sondern auch die Zuverlässigkeit und Skalierbarkeit der Anwendungen erhöht.
Kubernetes Grundkonzepte
Container und Kubernetes
Ein Container ist ein leichtgewichtiges, eigenständiges Paket, das alles enthält, was zur Ausführung einer Software benötigt wird, einschließlich Code, Runtime, Systemtools, Bibliotheken und Einstellungen. Container isolieren sich voneinander und vom Hostsystem, wodurch sie in hohem Maße portabel und konsistent über verschiedene Umgebungen hinweg sind.
Kubernetes geht bei der Containerisierung noch einen Schritt weiter. Es orchestriert diese Container und stellt sicher, dass sie dort laufen, wo und wann du es wünscht, und unterstützt sie dabei hoch zu skalieren, wenn es erforderlich wird. Kubernetes bietet ein Framework für den stabilen Betrieb verteilter Systeme und verwaltet containerisierte Anwendungen auf mehreren Hosts. Es automatisiert die Bereitstellung, Skalierung und den Betrieb von Anwendungscontainern und erleichtert so die Verwaltung komplexer containerisierter Anwendungen.
Nodes und Cluster verstehen
Im Zentrum von Kubernetes stehen zwei Schlüsselkonzepte: Nodes und Cluster.
Nodes: Ein Node ist die kleinste Einheit im Kubernetes Ökosystem. Dies kann eine physische oder virtuelle Maschine sein, auf der die Container (die Arbeitslasten) ausgeführt werden. Jede Node verfügt über die erforderlichen Dienste für die Ausführung von Containern, die von Kubernetes verwaltet werden, einschließlich des runtime environment für den Container und der Kubernetes-eigenen Tools für die Kommunikation und Verwaltung.
Cluster: Ein Cluster ist eine Menge an Nodes, die in einer Gruppe zusammengefasst sind. Hier laufen alle von Kubernetes verwalteten Containeranwendungen. Cluster bieten die hohe Verfügbarkeit, Skalierbarkeit und Redundanz, für die Kubernetes bekannt ist. Wenn du Anwendungen in Kubernetes bereitstellst, werden diese genau genommen in einem Cluster bereitgestellt. Zu den Hauptkomponenten des Clusters gehören eine Kontrollebene (die globale Entscheidungen über den Cluster trifft) und Nodes (auf denen die Anwendungen tatsächlich laufen).
Dies sind die grundlegenden Konzepte, wie Kubernetes Containeranwendungen verwaltet und eine robuste Infrastruktur für den Einsatz und die Skalierung von Anwendungen bereitstellt.
Kubernetes einrichten
Kubernetes installieren
Zu den ersten Schritten mit Kubernetes gehört das Einrichten der Umgebung, in der du deine Containeranwendungen ausführen kannst. Dieses Setup umfasst ebenfalls die Installation von Kubernetes. Du kannst Kubernetes auf verschiedenen Plattformen installieren, einschließlich lokaler Maschinen, Cloud-Dienste wie unsere VPS, VDS oder unsere Dedicated Serverund Hybrid-Systeme.
Für ein lokales Setup sind Tools wie Minikube oder Kind beliebt. Diese Tools bieten eine einfache Möglichkeit, einen Kubernetes Cluster auf deinem lokalen Rechner zu erstellen. Für Cloud-basierte Lösungen bieten die meisten großen Cloud-Anbieter einen Kubernetes-basierten Dienst (wie GKE von Google, EKS von Amazon oder AKS von Microsoft), der die Erstellung und Verwaltung von Clustern vereinfacht.
Der Installationsprozess umfasst im Allgemeinen folgende Schritte:
- Einrichtung einer Maschine (physisch oder virtuell), die die Systemanforderungen von Kubernetes erfüllt.
- Installation einer Container runtime environment, wie zum Beispiel Docker. (Lese unseren Leitfaden Wie installiert man Docker mit Cloud-Init)
- Die Installation von Kubernetes selbst, die die Einrichtung der Kontrollebene und der Arbeitsknoten umfassen kann.
- Konfigurieren von Netzwerkeinstellungen um die Kommunikation zwischen der Steuerungsebene und den Arbeiterknoten zu ermöglichen.
Für eine erfolgreiche Installation ist es wichtig, die spezifische Installationsanleitung für die von dir gewählte Plattform und Umgebung zu befolgen.
Überblick über die wichtigsten Komponenten
Sobald Kubernetes installiert ist, ist es wichtig, seine Schlüsselkomponenten zu verstehen. Diese Komponenten arbeiten zusammen, um den Status deines Clusters zu verwalten und deine Anwendungen auszuführen. Zu den Hauptkomponenten gehören:
- Kontrollebene: Die Kontrollebene ist dafür verantwortlich, globale Entscheidungen über den Cluster zu treffen, wie zum Beispiel der Planung, Erkennung und Reaktion auf Cluster-Ereignisse. Zu den Schlüsselelementen der Kontrollebene gehören der Kube-API-Server, etcd (ein Key-Value-Speicher für Clusterdaten), der Scheduler und der Controller-Manager.
- Nodes: Worker-Nodessind die Maschinen, die deine Anwendungen und Arbeitslasten ausführen. Jede Node hat einen Kubelet, einen Agenten zur Verwaltung der Nodes und zur Kommunikation mit der Kubernetes-Kontrollebene sowie eine Container-Runtime zur Ausführung der Container.
- Pods: Die Grundeinheit der Bereitstellung in Kubernetes. Ein Pod repräsentiert eine einzelne Instanz einer Anwendung oder eines Prozesses, der in deinem Cluster läuft. Pods enthalten einen oder mehrere Container.
- Services und Ingress: Diese Komponenten bieten Mechanismen für die Darstellung, den Zugriff und die Kommunikation mit deinen Anwendungen.
- Speicher: Zum Verständnis von Speicher in Kubernetes gehören Konzepte wie Volumes und PersistentVolumes, die eine Möglichkeit zum Speichern von Daten und zustandsbezogenen Informationen für deine Anwendungen bereitstellen.
- ConfigMaps and Secrets: Du verwendest diese um Konfigurationsdaten und sensible Informationen für deine Anwendungen und den Kubernetes Cluster zu verwalten.
Bereitstellen von Anwendungen
In diesem Kapitel befassen wir uns mit den praktischen Aspekten der Bereitstellung und Verwaltung von Anwendungen in Kubernetes und konzentrieren uns dabei auf die Erstellung und Verwaltung von Pods und die Nutzung von Diensten zur Verbindung und Skalierung von Anwendungen.
Pods erstellen und verwalten
Die Bereitstellung von Anwendungen in Kubernetes beginnt mit Pods. Kubernetes erstellt und verwaltet einen Pod, die kleinste einsatzfähige Einheit, die typischerweise einen oder mehrere Container enthält.
Pods erstellen:
1. Definiere einen Pod: Dies geschieht mittels YAML oder JSON in einer Pod-Manifest-Datei. Das Manifest beschreibt den Inhalt des Pods, wie zum Beispiel das Container-Image, Ports und Volume-Mounts.
Hier ist ein Beispiel für eine Pod-Konfiguration, welche den Apache-Webserver ausführt:
apiVersion: v1
kind: Pod
metadata:
name: apache-pod
labels:
purpose: serve-web
spec:
containers:
- name: apache-container
image: httpd
ports:
- containerPort: 80
2. Pod bereitstellen: Verwende den Befehl „kubectl apply“ mit der Pod-Manifestdatei, um den Pod in deinem Cluster zu erstellen.
Für unseren Beispiel-Pod würde der Befehl zur Bereitstellung lauten:
kubectl apply -f apache-pod.yaml
Pods verwalten:
- Überwachung: Prüfe den Status der Pods mit „kubectl get pods“. Dieser Befehl enthält Informationen über den Status jedes Pods im Cluster.
- Debugging und Logs: Benutze „kubectl logs [POD_NAME]“, um die Protokolle eines Pods einzusehen, was für die Diagnose von Problemen entscheidend ist.
- Pods löschen: Pods können mit „kubectl delete pod [POD_NAME]“ entfernt werden. Kubernetes wird versuchen, den Pod herunterzufahren und sauber aus dem Cluster zu entfernen.
Services: Verbinden und Skalieren
Services in Kubernetes sind eine abstrakte Methode, um Anwendungen, die auf einer Gruppe von Pods laufen, darzustellen. Sie bieten eine konsistente Möglichkeit, auf die funktionalen Aspekte einer Gruppe von Pods zuzugreifen, unabhängig von den Änderungen im Cluster.
Services erstellen:
- Service definieren: Wie Pods werden auch Dienste in YAML oder JSON definiert. Die Service-Definition enthält Selektoren, um die Pods und Ports zu bestimmen, die aufgedeckt werden sollen.
- Dienst bereitstellen: Verwende „kubectl apply“ mit der Dienstdefinitionsdatei, um den Dienst zu erstellen.
Arten von Services:
- ClusterIP (Standard): Zeigt den Dienst auf einer internen IP im Cluster an. Dieser Typ macht den Dienst nur innerhalb des Clusters erreichbar.
- NodePort: Zeigt den Dienst auf der IP jedes Knotens an einem statischen Port an. Dies ermöglicht externen Zugriff auf den Dienst über einen festgelegten Port.
- LoadBalancer: Integriert mit Cloud-basierten Load Balancern, um den Dienst extern bereitzustellen. Dies wird häufig in Cloud-Umgebungen verwendet.
Anwendungen skalieren:
- Horizontale Pod-Autoskalierung: Erhöht oder verringert automatisch die Anzahl der Pod-Replikate auf Grundlage der CPU-Auslastung oder anderer ausgewählter Metriken.
- ReplicaSets und Deployments: Verwalte die Bereitstellung und Skalierung von Pods und stelle deklarative Updates für Anwendungen bereit.
Services und Skalierungsmechanismen in Kubernetes ermöglichen eine stabile, zugängliche und effiziente Bereitstellung von Anwendungen. Sie stellen die notwendigen Werkzeuge zur Verfügung, um sicherzustellen, dass Anwendungen unterschiedliche Belastungen bewältigen können und für die Benutzer zugänglich bleiben.
Da du nun die Grundlagen von Kubernetes kennst, zögere nicht ein Kubernetes Profi mit unserem nächsten Leitfaden in der Reihe „Mastering Kubernetes“ zu werden.