kubectl diff în Kubernetes (kubectl)

Creare și actualizare kubectl 1.13+

Arată diferențele (în format unified diff) dintre manifestele locale și starea actuală din cluster.

Sintaxă comandă
kubectl diff (-f FIȘIER_SAU_DIR | -k DIR_KUSTOMIZE) [--server-side]

Ce face kubectl diff

Comanda kubectl diff îți arată exact ce s-ar modifica în cluster dacă ai rula kubectl apply cu aceleași argumente. Trimite un server-side dry-run către API server, deci include în comparație și valorile implicite completate de Kubernetes sau de mutating webhooks.

Codul de ieșire este gândit pentru scripturi și pipeline-uri CI/CD: returnează 0 dacă nu există nicio diferență, 1 dacă există diferențe și >1 dacă a apărut o eroare.

Opțiuni și argumente

Opțiune / Parametru Descriere
-f, --filename=CALE Fișierul sau directorul comparat cu starea live din cluster.
-k, --kustomize=DIR Compară rezultatul unui director Kustomize.
--server-side Calculează diferența folosind regulile Server-Side Apply.
--prune -l SELECTOR Include în diff și obiectele care ar fi șterse de apply --prune.

Exemple

Exemplul 1: Verificarea modificărilor înainte de deploy

Vedem că imaginea și numărul de replici urmează să se schimbe.

kubectl diff -f k8s/deployment.yaml

Ieșire în terminal

diff -u -N /tmp/LIVE-1842/apps.v1.Deployment.shop.api /tmp/MERGED-9301/apps.v1.Deployment.shop.api
--- /tmp/LIVE-1842/apps.v1.Deployment.shop.api
+++ /tmp/MERGED-9301/apps.v1.Deployment.shop.api
@@ -6,7 +6,7 @@
   name: api
   namespace: shop
 spec:
-  replicas: 2
+  replicas: 4
   selector:
     matchLabels:
       app: api
@@ -18,7 +18,7 @@
     spec:
       containers:
-      - image: ghcr.io/exemplu/api:1.4.1
+      - image: ghcr.io/exemplu/api:1.4.2
         name: api

Greșeli frecvente

  • În scripturi Bash cu set -e, kubectl diff oprește scriptul când găsește diferențe deoarece returnează codul 1; tratează explicit codul de ieșire.
  • Secretele apar în clar (în Base64) în output-ul de diff; ai grijă când îl afișezi în loguri publice de CI.

Comenzi înrudite

  • kubectl apply: Creează sau actualizează declarativ resurse din fișiere YAML/JSON ori directoare Kustomize.
  • kubectl edit: Deschide definiția YAML a unei resurse din cluster în editorul de text și aplică modificările la salvare.
  • kubectl rollout: Monitorizează lansarea unei versiuni noi, revine la o revizie anterioară (undo) sau repornește treptat pod-urile.