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)


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.
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
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.