↓ Zum Hauptinhalt springen
  1. Lernen/
  2. Kubernetes/

Kubernetes-Befehle: Die wichtigsten kubectl-Befehle im Überblick

Patrick Adams
Autor
Patrick Adams
Linux-Administrator und IT-Specialist. Ich schreibe über Server, Self-Hosting und Open-Source-Software, praxisnah und selbst getestet. Mehr über mich →
Inhaltsverzeichnis
Kubernetes - Dieser Artikel ist Teil einer Serie.
Teil 2: Dieser Artikel
Mit kubectl steuerst du deinen Kubernetes-Cluster von der Kommandozeile aus. Hier stehen die Befehle, die man im Alltag immer wieder braucht, nach Themen sortiert.
Fast alle Befehle wirken im aktuellen Namespace. Mit -n name arbeitest du in einem anderen Namespace, mit -A siehst du alle auf einmal.

Cluster und Kontext
#

BefehlBeschreibung
kubectl cluster-infoZeigt, mit welchem Cluster du verbunden bist.
kubectl get nodes -o wideListet alle Nodes mit IP-Adresse und Version auf.
kubectl config get-contextsZeigt alle eingerichteten Cluster-Verbindungen.
kubectl config use-context nameWechselt zu einem anderen Cluster.
kubectl versionZeigt die Version von kubectl und vom Cluster.

Namespaces
#

BefehlBeschreibung
kubectl get namespacesListet alle Namespaces auf.
kubectl create namespace testLegt einen neuen Namespace an.
kubectl config set-context --current --namespace=testMacht test zum Standard-Namespace, damit du nicht jedes Mal -n schreiben musst.

Pods
#

Pods anzeigen
#

BefehlBeschreibung
kubectl get podsListet die Pods im aktuellen Namespace auf.
kubectl get pods -AListet alle Pods in allen Namespaces auf.
kubectl get pods -o wideZeigt zusätzlich IP-Adresse und Node jedes Pods.
kubectl get pods -wBeobachtet die Pods live. Beenden mit Strg+C.

Mit Pods arbeiten
#

BefehlBeschreibung
kubectl describe pod nameZeigt alle Details und die letzten Ereignisse eines Pods. Bei Problemen der erste Blick.
kubectl logs nameZeigt die Logs eines Pods.
kubectl logs name -fVerfolgt die Logs live.
kubectl logs name --previousZeigt die Logs des abgestürzten Vorgängers. Gold wert bei CrashLoopBackOff.
kubectl exec -it name -- shÖffnet eine Shell im Pod.
kubectl delete pod nameLöscht einen Pod. Gehört er zu einem Deployment, startet sofort ein neuer.

Deployments
#

BefehlBeschreibung
kubectl get deploymentsListet alle Deployments auf.
kubectl create deployment web --image=nginxLegt ein Deployment mit einem Image an.
kubectl set image deployment/web nginx=nginx:1.27Aktualisiert das Image eines Deployments.
kubectl rollout status deployment/webVerfolgt, ob ein Update erfolgreich durchläuft.
kubectl rollout restart deployment/webStartet alle Pods eines Deployments nacheinander neu.
kubectl rollout undo deployment/webMacht das letzte Update rückgängig.

Pods skalieren
#

Manuell skalieren
#

BefehlBeschreibung
kubectl scale deployment web --replicas=5Setzt die Anzahl der Pods auf genau 5.
kubectl scale deployment web --replicas=0Fährt alle Pods herunter, ohne das Deployment zu löschen.
kubectl get deployment webZeigt, wie viele Pods gewünscht und wie viele bereit sind.

Automatisch skalieren
#

BefehlBeschreibung
kubectl autoscale deployment web --min=2 --max=10 --cpu-percent=70Startet zwischen 2 und 10 Pods, je nachdem, ob die CPU-Auslastung über oder unter 70 Prozent liegt.
kubectl get hpaZeigt alle automatischen Skalierungen mit aktueller Auslastung.
kubectl describe hpa webZeigt Details und wann zuletzt skaliert wurde.
kubectl delete hpa webSchaltet das automatische Skalieren wieder ab.
Das automatische Skalieren braucht den Metrics Server im Cluster und CPU-Requests in deinem Deployment. Ohne sie zeigt kubectl get hpa bei der Auslastung nur unknown. Läuft eine automatische Skalierung, überschreibt sie außerdem jedes manuelle kubectl scale.

Services und Netzwerk
#

BefehlBeschreibung
kubectl get servicesListet alle Services auf.
kubectl expose deployment web --port=80 --type=ClusterIPMacht ein Deployment im Cluster unter einem festen Namen erreichbar.
kubectl get ingressListet alle Ingress-Regeln auf, also die Weiterleitungen von außen.
kubectl port-forward svc/web 8080:80Leitet einen Port auf deinen Rechner weiter. Ideal zum Testen ohne Ingress.

Konfiguration und Secrets
#

BefehlBeschreibung
kubectl get configmapsListet alle ConfigMaps auf.
kubectl get secretsListet alle Secrets auf.
kubectl create secret generic db --from-literal=password=geheimLegt ein Secret mit einem Wert an.
Secrets sind in Kubernetes standardmäßig nur Base64-kodiert und nicht verschlüsselt. Jeder mit Leserechten im Namespace kann sie auslesen. Vergib die Rechte deshalb sparsam.

Manifeste anwenden
#

BefehlBeschreibung
kubectl apply -f datei.yamlLegt Ressourcen aus einer Datei an oder aktualisiert sie.
kubectl apply -f ordner/Wendet alle Dateien in einem Ordner an.
kubectl diff -f datei.yamlZeigt vorher, was sich ändern würde.
kubectl delete -f datei.yamlLöscht alle Ressourcen aus der Datei.
kubectl get deployment web -o yamlZeigt die komplette Konfiguration einer Ressource als YAML.

Fehlersuche
#

BefehlBeschreibung
kubectl get events --sort-by=.lastTimestampZeigt die letzten Ereignisse im Namespace, sortiert nach Zeit.
kubectl top nodesZeigt CPU- und RAM-Auslastung der Nodes. Braucht den Metrics Server.
kubectl top podsZeigt die Auslastung der Pods.
kubectl get allZeigt Pods, Deployments, Services und mehr auf einen Blick.

Die häufigsten Pod-Zustände und was sie bedeuten:

  • Pending: Der Pod findet keinen passenden Node, oft wegen zu wenig Ressourcen. Mehr dazu zeigt kubectl describe pod.
  • ImagePullBackOff: Das Image kann nicht geladen werden, meist wegen eines Tippfehlers im Namen oder fehlender Zugangsdaten zur Registry.
  • CrashLoopBackOff: Der Container startet und stürzt sofort wieder ab. Die Ursache steht fast immer in kubectl logs name --previous.

Wenn du mit einzelnen Containern statt mit einem Cluster arbeitest, findest du die passenden Befehle in meiner Übersicht der Docker-Befehle.

Kubernetes - Dieser Artikel ist Teil einer Serie.
Teil 2: Dieser Artikel

Verwandte Artikel