Kapitel 1. Erste Schritte mit Kubernetes

Diese Arbeit wurde mithilfe von KI übersetzt. Wir freuen uns über dein Feedback und deine Kommentare: translation-feedback@oreilly.com

In diesem ersten Kapitel stellen wir Rezepte vor, die dir den Einstieg in Kubernetes erleichtern. Wir zeigen dir, wie du Kubernetes nutzen kannst, ohne es zu installieren, und stellen dir Komponenten wie die Befehlszeilenschnittstelle (CLI) und das Dashboard vor, mit denen du mit einem Cluster interagieren kannst, sowie Minikube, eine All-in-One-Lösung, die du auf deinem Laptop ausführen kannst.

1.1 Installation der Kubernetes CLI, kubectl

Problem

Du möchtest die Kubernetes-Befehlszeilenschnittstelle installieren, damit du mit deinem Kubernetes-Cluster interagieren kannst.

Lösung

Die einfachste Möglichkeit ist, die letzte offizielle Version herunterzuladen. Um zum Beispiel auf einem Linux-System die neueste stabile Version zu erhalten, gibst du Folgendes ein:

$ wget https://dl.k8s.io/release/$(wget -qO - https://dl.k8s.io/release/
stable.txt)/bin/linux/amd64/kubectl

$ sudo install -m 755 kubectl /usr/local/bin/kubectl

Über den Homebrew-Paketmanager können Linux- und macOS-Nutzer auch kubectl installieren:

$ brew install kubectl

Vergewissere dich nach der Installation von , dass du eine funktionierende kubectl hast, indem du ihre Version auflistest:

$ kubectl version --client
Client Version: v1.28.0
Kustomize Version: v5.0.4-0.20230...

Diskussion

kubectl ist das offizielle Kubernetes CLI und steht als Open Source Software zur Verfügung. Das bedeutet, dass du die Binärdatei kubectl bei Bedarf selbst erstellen kannst. In Rezept 15.1 erfährst du, wie du den Kubernetes-Quellcode lokal kompilierst.

Es ist nützlich zu wissen, dass Nutzer der Google Kubernetes Engine (siehe Rezept 2.11) kubectl mit gcloud installieren können:

$ gcloud components install kubectl

Beachte auch, dass du in den neuesten Versionen von Minikube (siehe Rezept 1.2) kubectl als Unterbefehl von minikube aufrufen kannst, um eine kubectl Binärdatei auszuführen, die der Clusterversion entspricht:

$ minikube kubectl -- version --client
Client Version: version.Info{Major:"1", Minor:"27", GitVersion:"v1.27.4", ...}
Kustomize Version: v5.0.1

Siehe auch

1.2 Installation von Minikube zum Betrieb einer lokalenKubernetes-Instanz

Problem

Du möchtest Kubernetes zum Testen, Entwickeln oder für Schulungszwecke auf deinem lokalen Rechner nutzen.

Lösung

Minikube ist ein Tool, mit dem du Kubernetes ganz einfach auf deinem lokalen Rechner nutzen kannst.

Um das Minikube CLI lokal zu installieren, kannst du dir die neueste Vorabversion besorgen oder aus den Quellen bauen. Um die neueste Version von minikube auf einem Linux-basierten Rechner zu installieren,gehe folgendermaßen vor:

$ wget https://storage.googleapis.com/minikube/releases/latest/
minikube-linux-amd64 -O minikube


$ sudo install -m 755 minikube /usr/local/bin/minikube

Dadurch wird die Binärdatei minikube in deinem Pfad abgelegt und vonüberall aus zugänglich gemacht.

Sobald es installiert ist, kannst du die Minikube-Version mit dem folgenden Befehl überprüfen:

$ minikube version
minikube version: v1.31.2
commit: fd7ecd...

Diskussion

Minikube kann als virtuelle Maschine, als Container oder als Bare Metal eingesetzt werden. Dies wird mit dem --driver Flag bei der Erstellung eines Clusters auf Minikube konfiguriert. Wenn dieses Flag nicht angegeben wird, wählt Minikube automatisch die beste verfügbare Laufzeitumgebung.

Ein Hypervisor ist eine Software- oder Hardwarekomponente, die virtuelle Maschinen erstellt und verwaltet. Er ist für die Zuweisung und Verwaltung der physischen Ressourcen (CPU, Speicher, Speicherung, Netzwerk) eines Hostsystems verantwortlich und ermöglicht es, dass mehrere virtuelle Maschinen (VMs) gleichzeitig auf derselben physischen Hardware laufen. Minikube unterstützt eine Reihe von Hypervisoren wie VirtualBox, Hyperkit, Docker Desktop, Hyper-V und so weiter. Die Treiberseite gibt einen Überblick über die unterstützten Runtimes.

Minikube kann auch eine Container-Runtime verwenden, um einen Cluster auf einem Host-Rechner zu erstellen. Dieser Treiber ist nur auf einem Linux-basierten Host verfügbar, auf dem es möglich ist, Linux-Container nativ auszuführen, ohne eine virtuelle Maschine zu verwenden. Eine Container-basierte Laufzeitumgebung bietet zwar nicht den gleichen Grad an Isolation wie eine virtuelle Maschine, dafür aber die beste Leistung und Ressourcennutzung. Zum Zeitpunkt der Erstellung dieses Artikels unterstützt Minikube die Docker Engine und Podman (experimentell).

Weitere Tools, die für den Betrieb von lokalen Kubernetes-Clustern mit Linux-Containern verwendet werden können, sind unter zu finden:

1.3 Minikube lokal für die Entwicklung nutzen

Problem

Du möchtest Minikube lokal zum Testen und Entwickeln deiner Kubernetes-Anwendung verwenden. Du hast minikube installiert und gestartet (siehe Rezept 1.2) und möchtest ein paar zusätzliche Befehle kennen, um deine Entwicklung zu vereinfachen.

Lösung

Verwende den Befehl minikube start, um lokal einen Kubernetes-Cluster zu erstellen:

$ minikube start

Standardmäßig werden dem Cluster 2 GB RAM zugewiesen. Wenn dir die Standardeinstellungen nicht gefallen, kannst du Parameter wie den Arbeitsspeicher und die Anzahl der CPUs überschreiben und eine bestimmte Kubernetes-Version für die Minikube-VM auswählen:

$ minikube start --cpus=4 --memory=4096 --kubernetes-version=v1.27.0

Außerdem kannst du die Anzahl der Clusterknoten festlegen, indem du den Standardwert von einem Knoten überschreibst:

$ minikube start --cpus=2 --memory=4096 --nodes=2

Um den Status des Minikube-Clusters zu überprüfen, gehe folgendermaßen vor:

$ minikube status
minikube
type: Control Plane
host: Running
kubelet: Running
apiserver: Running
kubeconfig: Configured

minikube-m02
type: Worker
host: Running
kubelet: Running

Um den Status des Kubernetes-Clusters in Minikube zu überprüfen,musst duFolgendes tun:

$ kubectl cluster-info
Kubernetes control plane is running at https://192.168.64.72:8443
CoreDNS is running at https://192.168.64.72:8443/api/v1/namespaces/
kube-system/services/kube-dns:dns/proxy

To further debug and diagnose cluster problems, use 'kubectl cluster-info dump'.

Der mit Minikube erstellte Kubernetes-Cluster nutzt die Ressourcen des Host-Rechners. Du musst also sicherstellen, dass dein Host über die nötigen Ressourcen verfügt. Und noch wichtiger: Wenn du fertig bist, vergiss nicht, ihn mit minikube stop zu stoppen, um die Systemressourcen freizugeben.

Diskussion

Die Minikube CLI bietet Befehle, die dir das Leben leichter machen. Die CLI hat eine eingebaute Hilfe, mit der du die Unterbefehle selbst entdecken kannst - hier ist ein Ausschnitt:

$ minikube
...
Basic Commands:
  start            Starts a local Kubernetes cluster
  status           Gets the status of a local Kubernetes cluster
  stop             Stops a running local Kubernetes cluster
  delete           Deletes a local Kubernetes cluster
...
Configuration and Management Commands:
  addons           Enable or disable a minikube addon
...

Neben den Befehlen start, stop und delete solltest du dich mit den Befehlen ip, ssh, tunnel, dashboard und docker-env vertraut machen.

Tipp

Wenn dein Minikube aus irgendeinem Grund instabil wird oder du neu anfangen willst, kannst du ihn mit minikube stop und minikube delete entfernen. Dann bekommst du mit minikube start eine neue Installation.

1.4 Deine erste Anwendung auf Minikube starten

Problem

Du hast Minikube gestartet (siehe Rezept 1.3) und möchtest nun deine erste Anwendung auf Kubernetes starten.

Lösung

Du kannst zum Beispiel die Microblogging-Plattform Ghost auf Minikube mit zwei kubectl Befehlen starten:

$ kubectl run ghost --image=ghost:5.59.4 --env="NODE_ENV=development"
$ kubectl expose pod ghost --port=2368 --type=NodePort

Überwache den Pod manuell, um zu sehen, wann er anfängt zu laufen:

$ kubectl get pods
NAME                     READY     STATUS    RESTARTS   AGE
ghost-8449997474-kn86m   1/1       Running   0          24s

Jetzt kannst du den Befehl minikube service verwenden, um die URL des Anwendungsdienstes automatisch in den Webbrowser zu laden:

$ minikube service ghost

Diskussion

Der Befehl kubectl run wird als Generator bezeichnet; er ist ein einfacher Befehl, um ein Pod Objekt zu erstellen (siehe Rezept 4.4). Der Befehl kubectl expose ist ebenfalls ein Generator, ein einfacher Befehl, um ein Service Objekt (siehe Rezept 5.1) zu erstellen, das den Netzwerkverkehr zu den Containern leitet, die von deinem Einsatz gestartet werden.

Wenn du die Anwendung nicht mehr benötigst, kannst du die Pod entfernen, um die Cluster-Ressourcen freizugeben:

$ kubectl delete pod ghost

Außerdem solltest du den Dienst ghost löschen, der mit dem Befehl kubectl expose erstellt wurde:

$ kubectl delete svc ghost

1.5 Mit kind Kubernetes lokal betreiben

Problem

kind ist eine alternative Möglichkeit, Kubernetes lokal auszuführen. Ursprünglich wurde es für das Testen von Kubernetes entwickelt, wird aber inzwischen auch oft genutzt, um Kubernetes-native Lösungen auf einem Laptop mit minimalem Aufwand zu testen. Du möchtest kind lokal zum Testen und Entwickeln deiner Kubernetes-Anwendung verwenden.

Lösung

Die Mindestanforderungen für die Verwendung von kind sind Go und eine Docker-Laufzeitumgebung. kind lässt sich einfach auf jeder Plattform installieren, zum Beispiel mit brew:

$ brew install kind

Dann ist das Erstellen eines Clusters so einfach wie das Folgende:

$ kind create cluster

Genauso einfach ist es, sie zu löschen:

$ kind delete cluster

Diskussion

Da kind ursprünglich für das Testen von Kubernetes entwickelt wurde, ist eines seiner wichtigsten Designprinzipien, dass es sich gut für die Automatisierung eignet. Wenn du vorhast, Kubernetes-Cluster zu Testzwecken automatisch einzusetzen, solltest du kind in Betracht ziehen.

Siehe auch

1.6 Kubernetes in Docker Desktop verwenden

Problem

Docker Desktop ist ein Angebot, das auf der Docker Engine aufbaut und eine Reihe nützlicher Entwicklertools bietet, darunter eine eingebaute Version von Kubernetes und einen zugehörigen Load Balancer, der den Datenverkehr in den Cluster leitet. Das bedeutet, dass du ein einziges Tool installieren kannst und Zugriff auf so ziemlich alles hast, was du brauchst, um lokal loszulegen. Du möchtest Docker Desktop lokal zum Testen und Entwickeln deiner Kubernetes-Anwendung verwenden.

Lösung

Installiere Docker Desktop und stelle sicher, dass du Kubernetes während des Installationsprozesses aktivierst.

Du kannst Kubernetes im Einstellungsfenster von Docker Desktop aktivieren und deaktivieren, wie in Abbildung 1-1 dargestellt. Das solltest du tun, wenn du Docker Desktop für die Docker-Engine, aber nicht für Kubernetes verwendest, da du so Ressourcen auf deinem Computer sparen kannst. Wie hier zu sehen ist, zeigt dir das Einstellungsfeld auch an, welche Version von Kubernetes von Docker Desktop bereitgestellt wird. Das kann bei der Fehlersuche nützlich sein, da bestimmte Lösungen Anforderungen an die minimale oder maximale Version von Kubernetes haben, mit der sie laufen können.

Snapshot of the Docker Desktop Kubernetes settings panel
Abbildung 1-1. Schnappschuss des Docker Desktop Kubernetes-Einstellungsfeldes

Es ist erwähnenswert, dass die in Docker Desktop eingebettete Version von Kubernetes ein paar Versionen hinter der neuesten Kubernetes-Version zurückbleibt, während Minikube in der Regel aktueller ist.

Wie in Abbildung 1-2 zu sehen ist, kannst du mit dem Menü der Docker-Desktop-Symbolleiste kubectl ganz einfach zwischen verschiedenen lokalen Clustern umschalten. Das bedeutet, dass du Minikube und die Kubernetes von Docker Desktop gleichzeitig laufen lassen und zwischen ihnen wechseln kannst (was wir nicht empfehlen). Wie du das direkt von kubectl aus machen kannst, erfährst du in Rezept 1.7.

Snapshot of the Docker Desktop context switcher for kubectl
Abbildung 1-2. Schnappschuss des Docker Desktop Kontextwechslers für kubectl

Diskussion

Obwohl es eine schnelle und einfache Möglichkeit ist, mit Kubernetes zu beginnen, solltest du dir bewusst sein, dass Docker Desktop kein Open Source ist und dass die kostenlose Version nur von Einzelpersonen, kleinen Unternehmen, Studierenden und Lehrenden sowie nicht-kommerziellen Open-Source-Entwicklern genutzt werden kann.

Die Docker-Engine hingegen, mit der Minikube ausgeführt werden kann, steht unter einer Apache 2.0-Lizenz, ebenso wie Minikube selbst.

1.7 Umschalten von kubectl-Kontexten

Problem

kubectl ist standardmäßig so konfiguriert, dass es mit einem bestimmten Kubernetes-Cluster spricht. Diese Konfiguration ist Teil des sogenannten Kontexts. Wenn du vergessen hast, auf welchen Cluster kubectl eingestellt ist, zwischen Clustern wechseln oder andere kontextbezogene Parameter ändern möchtest, dann ist dieses Rezept genau das Richtige für dich.

Lösung

Um die für kubectl verfügbaren Kontexte anzuzeigen, verwende den Befehl kubectl config get-contexts:

$ kubectl config get-contexts
CURRENT   NAME             CLUSTER          AUTHINFO         NAMESPACE
          docker-desktop   docker-desktop   docker-desktop
          kind-kind        kind-kind        kind-kind
*         minikube         minikube         minikube         default

Wie du der Ausgabe entnehmen kannst, sind in diesem Fall drei Kubernetes-Cluster auf kubectl verfügbar, und der aktuelle Kontext ist so eingestellt, dass er mit dem Cluster minikube spricht.

Um zum Cluster kind-kind zu wechseln, führe folgenden Befehl aus:

$ kubectl config use-context kind-kind
Switched to context "kind-kind".

Diskussion

Wenn du dein lokales kubectl für den Zugriff auf einen entfernten Cluster verwenden möchtest, kannst du die Datei kubeconfig bearbeiten. Mehr über die kubeconfig-Datei erfährst du in der offiziellen Dokumentation.

1.8 Umschalten von Kontexten und Namensräumen mitkubectx und kubens

Problem

Du möchtest einen einfacheren Weg finden, um Kontexte (d.h. Cluster) und Namensräume mit kubectl zu wechseln, denn die Befehle zum Umschalten von Kontexten sind lang und ziemlich schwer zu erinnern.

Lösung

kubectx und kubens sind zwei beliebte Open-Source-Skripte, die das Umschalten von Kontexten für kubectl und das Umschalten von Namensräumen erleichtern, damit du nicht für jeden Befehl explizit den Namensraumnamen festlegen musst.

Es gibt eine Vielzahl von Installationsmöglichkeiten. Wenn du in der Lage bist, brew zu benutzen, dann kannst du das hier versuchen:

$ brew install kubectx

Dann kannst du die verfügbaren kubectl Kontexte einfach auflisten, etwa so:

$ kubectx
docker-desktop
kind-kind
minikube

und den Kontext genauso einfach wechseln:

$ kubectx minikube
Switched to context "minikube".

Mit kubens kannst du auch ganz einfach Namensräume auflisten und wechseln:

$ kubens
default
kube-node-lease
kube-public
kube-system
test
$ kubens test
default
Context "minikube" modified.
Active namespace is "test".

Alle Befehle werden von da an im Kontext des gewählten Namensraums ausgeführt:

$ kubectl get pods
default
No resources found in test namespace.

Get Kubernetes Kochbuch, 2. Auflage now with the O’Reilly learning platform.

O’Reilly members experience books, live events, courses curated by job role, and more from O’Reilly and nearly 200 top publishers.