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:
- Findet heraus:
- Wie viele CPUs stehen auf dem Node zur Verfügung?
- Welches Betriebssystem in welcher Version ist installiert? (Stichwort: "OS Image")
- Wie viel RAM ist insgesamt verfügbar? (Stichwort: "Capacity")
-
Wie viel Prozent des RAMs ist bereits allokiert? (Stichwort: "Allocated resources")
-
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-systemlaufen 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:
- Findet in der Liste den Eintrag für
pods– wie lautet die Kurzform (SHORTNAMES)? - Welche Kurzformen haben
services,deploymentsundnamespaces? - 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:
- Schaut euch die YAML-Ausgabe an – findet ihr Abschnitte wie
metadata,specundstatus? - Mit
jsonpathkö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)