Zum Inhalt

Lab 01: Kubectl Basics – Die Kommandozentrale von Kubernetes

In dieser Übung lernt ihr die wichtigsten kubectl-Befehle kennen. kubectl ist das Werkzeug, um mit dem Kubernetes-Cluster zu kommunizieren.

Ziel dieser Übung: Am Ende sollt ihr euch sicher im Cluster orientieren können, Ressourcen finden und verstehen, wie ihr Informationen aus dem Cluster holt.


Teil 1: Den Cluster verstehen

1.1 Cluster-Informationen abrufen

Bevor wir mit dem Cluster arbeiten, verschaffen wir uns einen Überblick:

# Zeigt die kubectl- und Kubernetes-Versionen
kubectl version

# Gibt grundlegende Cluster-Informationen aus
kubectl cluster-info

# Listet alle Nodes (Rechenknoten) im Cluster
kubectl get nodes

Aufgabe: Führt diese Befehle aus und beantwortet:

  • Welche Kubernetes-Version läuft auf eurem Cluster?
  • Wie viele Nodes hat euer Cluster?
  • Ist der Node im Status Ready?

1.2 Node-Details untersuchen

Mit describe erhalten wir detaillierte Informationen zu einer Ressource:

kubectl describe node minikube

Aufgaben:

  1. Findet heraus:
  2. Wie viele CPUs stehen auf dem Node zur Verfügung?
  3. Welches Betriebssystem in welcher Version ist installiert? (Stichwort: "OS Image")
  4. Wie viel RAM ist insgesamt verfügbar? (Stichwort: "Capacity")
  5. Wie viel Prozent des RAMs ist bereits allokiert? (Stichwort: "Allocated resources")

  6. Scrollt zu "Non-terminated Pods" – welche System-Pods laufen bereits auf dem Node?


Teil 2: Ressourcen im Cluster erkunden

2.1 Alle Pods anzeigen

Pods sind die kleinste deploybare Einheit in Kubernetes. Schauen wir uns an, was bereits läuft:

# Alle Pods im aktuellen Namespace (default)
kubectl get pods

# Alle Pods über alle Namespaces hinweg
kubectl get pods --all-namespaces

# Kurzform mit -A statt --all-namespaces
kubectl get pods -A

Was fällt auf?

  • Im default-Namespace läuft vermutlich noch nichts
  • In kube-system laufen System-Komponenten (CoreDNS, kube-proxy, etc.)
  • Jeder Pod hat einen Status (Running, Pending, etc.)

2.2 Welche Ressourcen gibt es überhaupt?

Kubernetes kennt viele verschiedene Ressourcentypen. Lasst euch alle anzeigen:

kubectl api-resources

Aufgaben:

  1. Findet in der Liste den Eintrag für pods – wie lautet die Kurzform (SHORTNAMES)?
  2. Welche Kurzformen haben services, deployments und namespaces?
  3. Probiert aus:
kubectl get po -A        # statt pods
kubectl get svc -A       # statt services
kubectl get deploy -A    # statt deployments
kubectl get ns           # statt namespaces

Tipp: Die Kurzformen sparen Tipparbeit. Es lohnt sich, sie sich einzuprägen.

2.3 Namespace-System verstehen

Namespaces sind wie Ordner – sie gruppieren Ressourcen logisch:

# Alle Namespaces anzeigen
kubectl get namespaces

# Pods in einem bestimmten Namespace
kubectl get pods -n kube-system
kubectl get pods --namespace kube-system  # Langform

# Pods im default-Namespace (wenn nichts angegeben wird)
kubectl get pods

Aufgabe: Wie viele Pods laufen im Namespace kube-system?


Teil 3: Ausgabeformate beherrschen

3.1 Erweiterte Informationen mit -o wide

Standardmäßig zeigt kubectl get nur die wichtigsten Spalten. Mit -o wide bekommt ihr mehr Details:

kubectl get pods -A -o wide

Was seht ihr jetzt zusätzlich?

  • IP-Adressen der Pods
  • Auf welchem Node der Pod läuft
  • Nominated Node, Readiness Gates (falls vorhanden)

Aufgabe: Notiert euch die IP-Adresse eines Pods aus dem kube-system Namespace.

3.2 YAML und JSON ausgeben

Jede Ressource in Kubernetes wird intern als JSON/YAML gespeichert. Ihr könnt euch die vollständige Definition anschauen:

# YAML-Format (lesbar)
kubectl get pod <POD-NAME> -n kube-system -o yaml

# JSON-Format (maschinenlesbar)
kubectl get pod <POD-NAME> -n kube-system -o json

Ersetzt <POD-NAME> durch einen echten Pod-Namen, z.B. kube-scheduler-minikube

Aufgaben:

  1. Schaut euch die YAML-Ausgabe an – findet ihr Abschnitte wie metadata, spec und status?
  2. Mit jsonpath könnt ihr gezielt Felder extrahieren:
# Nur die IP des Pods ausgeben
kubectl get pod <POD-NAME> -n kube-system -o jsonpath='{.status.podIP}'

3.3 Custom Columns

Ihr könnt euch auch eigene Tabellen zusammenstellen:

kubectl get pods -A -o custom-columns=NAME:.metadata.name,STATUS:.status.phase,IP:.status.podIP

Erklärt in Worten: Was zeigt dieser Befehl an?


Teil 4: Live-Beobachtung mit --watch

Mit --watch (oder -w) könnt ihr Änderungen in Echtzeit verfolgen:

kubectl get pods -A --watch

Lasst diesen Befehl laufen und öffnet in einem zweiten Terminal folgendes:

# Erstellt einen Test-Pod
kubectl run nginx-test --image=nginx

# In Terminal 1 seht ihr nun, wie der Pod entsteht:
# - Zuerst: Pending
# - Dann: ContainerCreating
# - Schließlich: Running

Stoppt --watch mit Ctrl+C.

Aufräumen:

kubectl delete pod nginx-test

Beobachtet auch das Löschen in Echtzeit, wenn ihr --watch wieder laufen lasst!


Teil 5: Kubectl-Hilfe

5.1 Die explain-Funktion

kubectl explain ist eure eingebaute API-Dokumentation:

# Was ist ein Pod?
kubectl explain pod

# Was gehört in pod.spec?
kubectl explain pod.spec

# Welche Container-Felder gibt es?
kubectl explain pod.spec.containers

Aufgabe: Findet mit explain heraus, welche Felder pod.spec.containers.resources hat.


Teil 6: Ressourcenverbrauch prüfen (Bonus)

Wenn die Metrics-Server-Erweiterung installiert ist, könnt ihr Ressourcenverbrauch einsehen:

# Metrics-Server aktivieren (falls nicht aktiv)
minikube addons enable metrics-server

# Warte 3 Minuten, dann:
kubectl top nodes
kubectl top pods -A

Was zeigt ihr?

  • CPU- und RAM-Verbrauch der Nodes
  • CPU- und RAM-Verbrauch einzelner Pods

Zusammenfassung: Die wichtigsten Befehle

Befehl Zweck
kubectl version Client- und Server-Version anzeigen
kubectl cluster-info Cluster-Endpunkte anzeigen
kubectl get <ressource> Ressourcen auflisten
kubectl get <ressource> -A Über alle Namespaces hinweg
kubectl get <ressource> -o wide Mit zusätzlichen Spalten
kubectl get <ressource> -o yaml Als vollständige YAML-Definition
kubectl describe <ressource> <name> Detailinformationen + Events
kubectl api-resources Alle verfügbaren Ressourcentypen
kubectl explain <ressource> API-Dokumentation
kubectl get <ressource> --watch Änderungen in Echtzeit beobachten
kubectl top nodes / pods Ressourcenverbrauch (benötigt metrics-server)

Kurzformen: po (pods), svc (services), deploy (deployments), ns (namespaces), cm (configmaps)


Weiterführende Ressourcen