OMNI52
kubectl Cheatsheet OMNI52™ GmbH

kubectl
auf einem Blatt.

Dichte Referenz für Senior Platform Engineers und SREs zum Kubernetes-CLI. Output-Formate, Server-Side Apply mit Field-Ownership, Patch-Strategien, Debug mit Ephemeral Containers, Rollout, RBAC-Checks, Kustomize, Krew und Anti-Patterns. Keine Einsteiger-Folien.

Vorschau (2 Seiten A4 quer + Brand-Rückseite)

kubectl Cheatsheet Seite 1: Kontexte, Output-Formate, Apply/Diff/Server-Side Apply, Patch-Strategien
kubectl Cheatsheet Seite 2: Debug, Rollout, Auth/Events/Wait, Port-Forward, Explain, Kustomize, Plugins, Anti-Patterns

PDF herunterladen

Direkter Download, keine Mail-Adresse nötig. CC BY-SA 4.0 , kopieren, drucken, weiterverteilen ist ausdrücklich erlaubt, solange die Quellenangabe sichtbar bleibt.

kubectl Cheatsheet (PDF, ~100 KB)

Was drin steht

Output & Abfragen

-o jsonpath, custom-columns, go-template (inkl. base64decode), --sort-by, Label- und Field-Selektoren. Script-Futter statt grep-Kaskaden.

Apply & SSA

kubectl diff, --dry-run=server, Server-Side Apply mit Field-Ownership (managedFields), --force-conflicts, Patch-Strategien strategic/merge/json.

Debug

Ephemeral Containers für distroless Images, Copy-Debug mit --copy-to, Node-Debug mit Host-FS unter /host, --profile bis sysadmin.

Rollout & Warten

rollout status/history/undo/restart als Pipeline-Gates, kubectl events, top, wait --for statt sleep-Schleifen.

Auth & Kontexte

auth can-i mit Impersonation, auth whoami, Kontexte + KUBECONFIG-Merge, Version-Skew-Policy (+/-1 Minor).

Kustomize, Plugins & Anti-Patterns

apply -k mit Overlays, Krew-Plugin-Manager, explain/api-resources. Dazu: edit in Prod, --force delete, scale gegen HPA.

Cheatsheet im Volltext

Derselbe Inhalt wie im PDF, zum Mitlesen, Durchsuchen und direkten Kopieren der Snippets. Stand: Kubernetes/kubectl v1.36 (Edition 2026.07).

Kontexte & kubeconfig

Kontext = Cluster + User + Namespace

kubectl config get-contexts zeigt alle, use-context wechselt, set-context --current setzt den Default-Namespace.

Merge: KUBECONFIG nimmt eine Pfad-Liste (:-getrennt), erste Definition gewinnt. config view --flatten schreibt daraus eine Datei. --kubeconfig pinnt pro Aufruf.

Version-Skew

kubectl ist ein Minor +/- um den kube-apiserver supported: v1.36-Client passt zu v1.35–v1.37-Servern. kubectl version zeigt beide Seiten, bei Cluster-Flotten mit Versions-Spread den Client bewusst wählen.

kubectl config get-contexts
kubectl config use-context prod-admin
kubectl config set-context --current --namespace=payments
export KUBECONFIG=~/.kube/prod.yaml:~/.kube/lab.yaml
kubectl config view --flatten > ~/.kube/merged.yaml
kubectl version   # Client- vs. Server-Version (Skew)

Output-Formate

-o: von wide bis go-template

-o wide|yaml|json|name für den Alltag.

jsonpath: Feld-Extraktion mit range/Filter, Script-Futter statt grep-Kaskaden. custom-columns: eigene Tabellen direkt aus dem API-Objekt. go-template: volle Template-Logik inkl. base64decode für Secrets.

Sortieren & Filtern

--sort-by nimmt einen JSONPath. -l filtert nach Labels (app=web,tier!=cache), --field-selector nach Objektfeldern (status.phase=Running). -A = alle Namespaces.

kubectl get pods -o jsonpath='{.items[*].spec.containers[*].image}'
kubectl get pods -o jsonpath='{range .items[*]}{.metadata.name}{"\t"}{.status.podIP}{"\n"}{end}'
kubectl get nodes -o custom-columns='NAME:.metadata.name,TAINT:.spec.taints[*].key'
kubectl get secret db -o go-template='{{index .data "ca.crt" | base64decode}}'
kubectl get pods -A --sort-by=.metadata.creationTimestamp

Apply, Diff & Server-Side Apply

diff & dry-run

kubectl diff -f zeigt den Diff gegen den Live-Stand vor dem Apply (Exit-Code 1 = Unterschiede, CI-tauglich).

--dry-run=client validiert nur lokal; --dry-run=server lässt Admission-Webhooks + Defaulting am API-Server laufen, ohne zu persistieren, das ehrlichere Preflight.

Server-Side Apply, Field-Ownership

apply --server-side (GA seit v1.22) merged am API-Server. Ownership steht pro Feld in metadata.managedFields, jeder Writer trägt einen --field-manager.

Conflict (HTTP 409), wenn ein anderer Manager das Feld hält: --force-conflicts übernimmt die Ownership, bewusst einsetzen, das entzieht dem anderen Controller das Feld.

kubectl diff -f deploy.yaml
kubectl apply -f deploy.yaml --dry-run=server
kubectl apply --server-side --field-manager=ci -f deploy.yaml
kubectl apply --server-side --force-conflicts -f deploy.yaml
kubectl get deploy web --show-managed-fields -o yaml

Patch-Strategien

strategic, merge, json

strategic (Default): kennt Merge-Keys aus dem Schema, patcht z.B. containers per name statt die Liste zu ersetzen.

--type=merge (RFC 7386): simpel, aber Listen werden komplett ersetzt. --type=json (RFC 6902): Op-Liste (add/replace/remove) mit präzisen Pfaden.

CRDs: kein strategic-Support, merge oder json verwenden.

kubectl patch deploy web -p '{"spec":{"replicas":4}}'
kubectl patch deploy web --type=merge \
  -p '{"metadata":{"labels":{"team":"pay"}}}'
kubectl patch deploy web --type=json -p \
  '[{"op":"replace","path":"/spec/template/spec/containers/0/image","value":"web:2.0"}]'

Debug & Ephemeral Containers

Pod-Debug, distroless-tauglich

kubectl debug -it pod/x --image=... hängt einen Ephemeral Container an (stable seit v1.25), Debug-Tools für Images ohne Shell. --target teilt den Prozess-Namespace des Ziel-Containers.

Ephemeral Containers sind nicht entfernbar; aufräumen heisst Pod löschen. Alternativ --copy-to=dbg + --share-processes: Kopie debuggen, Original bleibt unangetastet.

Node-Debug & Profile

kubectl debug node/<n> startet einen Pod auf dem Node, Host-Dateisystem unter /host.

--profile steuert die Rechte: general (Default seit v1.36), baseline, restricted, netadmin, sysadmin; legacy ist deprecated (Removal geplant für v1.39).

kubectl debug -it pod/api --image=nicolaka/netshoot --target=api
kubectl debug pod/api --copy-to=api-dbg \
  --share-processes -it --image=busybox
kubectl debug node/worker-3 -it --image=busybox --profile=sysadmin
chroot /host   # im Node-Debug-Pod

Rollout

status, history, undo

rollout status blockt bis Ready bzw. progressDeadline, das Gate für Pipelines. history listet Revisionen (--revision=N zeigt Details; CHANGE-CAUSE kommt aus der Annotation kubernetes.io/change-cause).

undo --to-revision=N rollt gezielt zurück. restart erzwingt ein neues Rollout (z.B. nach ConfigMap-Änderung). Gilt für Deployments, DaemonSets, StatefulSets.

kubectl rollout status deploy/web --timeout=120s
kubectl rollout history deploy/web --revision=3
kubectl rollout undo deploy/web --to-revision=2
kubectl rollout restart deploy/web
kubectl rollout pause deploy/web   # und: resume

Auth, Events & Wait

can-i, whoami

auth can-i prüft RBAC vor dem Incident; --as / --as-group testet fremde Identitäten (ServiceAccounts als system:serviceaccount:<ns>:<sa>). --list zeigt alle Rechte im Namespace.

auth whoami (GA seit v1.28, SelfSubjectReview-API): UserInfo inkl. Gruppen, wie der API-Server sie nach Authentifizierung sieht.

events, top, wait

kubectl events --for pod/x --types=Warning: chronologisch, gefiltert, ergonomischer als get events + --sort-by. top pod|node braucht den metrics-server.

wait --for=condition=..., --for=delete oder --for=jsonpath=...: deklaratives Warten mit --timeout statt sleep-Schleifen.

kubectl auth can-i create deploy -n prod
kubectl auth can-i --list -n prod
kubectl auth can-i get secrets --as system:serviceaccount:ci:builder
kubectl auth whoami
kubectl events --for pod/api --types=Warning
kubectl top pods --containers -n prod
kubectl wait --for=condition=Ready pod -l app=web --timeout=90s

Port-Forward, Proxy & cp

port-forward, proxy, cp

port-forward tunnelt über den API-Server , kein Ingress, kein NodePort nötig; svc/x wählt einen Ready-Pod dahinter.

proxy legt die REST-API authentifiziert auf 127.0.0.1:8001, zum Explorieren und für curl-Debugging. cp braucht ein tar-Binary im Container , bei distroless nicht vorhanden.

kubectl port-forward svc/web 8080:80
kubectl port-forward pod/db 5432 --address 127.0.0.1
kubectl proxy --port=8001 &
curl localhost:8001/api/v1/namespaces/prod/pods
kubectl cp prod/api-6d5f7:/var/log/app.log ./app.log

Explain, Kustomize & Plugins

explain & API-Discovery

explain deploy.spec.strategy: Feld-Doku aus dem OpenAPI-Schema des Clusters, inkl. CRDs. --recursive zeigt den ganzen Teilbaum, --api-version pinnt die Version.

api-resources / api-versions: was der Cluster kann, inkl. Shortnames.

Kustomize (-k)

Kustomize ist in kubectl integriert: apply|diff|delete -k <dir> rendert Base + Overlay und wendet an; kubectl kustomize <dir> rendert nur. Overlays statt kopierter YAML-Varianten pro Stage.

Plugins & Krew

Jedes Binary kubectl-<name> im PATH wird Subcommand; kubectl plugin list zeigt sie.

Krew (kubernetes-sigs) ist der Plugin-Manager: krew search|install|upgrade, über 200 Plugins im Index.

kubectl explain deploy.spec.strategy --recursive
kubectl api-resources --namespaced=false
kubectl kustomize overlays/prod | kubectl diff -f -
kubectl apply -k overlays/prod
kubectl krew install ctx ns tree

Anti-Patterns

Was du nicht tun solltest

edit in Prod: unversionierter Live-Drift; der nächste Apply/GitOps-Sync überschreibt still. Änderung ins Repo, dann apply.

delete --force --grace-period=0: entfernt nur das API-Objekt, der Prozess kann am Node weiterlaufen, bei StatefulSets Risiko doppelter Identitäten.

Apply-Modi mischen: client-side und server-side auf demselben Objekt erzeugt managedFields-Konflikte, pro Objekt einen Modus festlegen.

:latest + rollout restart als Deployment-Ersatz: nicht reproduzierbar, kein Rollback-Ziel, immutable Tags.

Blind im falschen Kontext: destruktive Kommandos ohne config current-context-Check; Prod-Kontexte explizit benennen und im Prompt markieren.

scale gegen HPA: der Autoscaler setzt den Wert zurück, Min/Max am HPA ändern statt manuell zu skalieren.

Aus der OMNI52 Cheatsheet-Fabrik

Verwandte Sheets in dichter Senior-Qualität:
kubernetes-cheatsheet.de, Kubernetes Core
helm-cheatsheet.de, Helm Charts
kyverno-cheatsheet.de, Policy-as-Code
rke2-cheatsheet.de, RKE2-Distribution

Lizenz & Weiterverteilung

CC BY-SA 4.0. Du darfst dieses Cheatsheet kopieren, weiterverteilen, ausdrucken und in eigenen Materialien zitieren. Bedingung: Quellenangabe „kubectl Cheatsheet, OMNI52 GmbH, kubectl-cheatsheet.de“ bleibt sichtbar, und abgeleitete Werke stehen unter der gleichen Lizenz (Share-Alike).

Nicht erlaubt: Logo, Marken oder den Eindruck zu vermitteln, dass der Inhalt von dir/euch stammt oder dass OMNI52 GmbH die Weiterverwendung sponsort.

Volltext der Lizenz: creativecommons.org/licenses/by-sa/4.0/deed.de.

Kubernetes is a registered trademark of The Linux Foundation (in the United States and other countries). kubectl is part of the Kubernetes project. OMNI52™ is a trademark of OMNI52 GmbH (filed, not yet registered). This website is operated by OMNI52 GmbH and is not affiliated with, endorsed by, or sponsored by The Linux Foundation or the Cloud Native Computing Foundation. “Kubernetes” and “kubectl” are used in a nominative / descriptive sense to indicate the technology this cheatsheet documents.