Ce face kubectl patch
kubectl patch trimite API-ului doar bucata care se schimbă, în JSON sau YAML, de exemplu numărul de replici sau imaginea unui container. Este potrivită pentru scripturi și pentru modificări rapide, punctuale.
Există trei tipuri de patch. strategic (implicit pentru resursele Kubernetes) știe să combine listele după cheie, de exemplu containerele după name. merge (JSON Merge Patch) înlocuiește listele întregi și este singurul tip de combinare suportat pentru resursele proprii (CRD). json (JSON Patch) aplică operații exacte (add, replace, remove) pe căi precum /spec/template/spec/containers/0/image.
Parametri
| Parametru | Descriere |
|---|---|
-p, --patch |
Conținutul patch-ului (JSON sau YAML). |
--patch-file |
Citește patch-ul dintr-un fișier. |
--type |
strategic (implicit), merge sau json. |
--dry-run=server -o yaml |
Arată rezultatul fără să-l salveze. |
--subresource |
Modifică o subresursă, de exemplu scale sau status. |
Exemple
Exemplul 1: Schimbarea numărului de replici și a imaginii
Patch strategic: containerul este găsit după nume, ceilalți containeri din Pod rămân neatinși.
kubectl patch deployment magazin-api -n magazin -p '{"spec":{"replicas":5}}'
kubectl patch deployment magazin-api -n magazin \
-p '{"spec":{"template":{"spec":{"containers":[{"name":"api","image":"firma/magazin-api:1.4.1"}]}}}}'
Ieșire în terminal
deployment.apps/magazin-api patched
deployment.apps/magazin-api patched
Exemplul 2: JSON Patch: operații exacte pe căi
Adăugăm o variabilă de mediu la primul container. Dacă rulezi din nou un patch care nu schimbă nimic, mesajul este patched (no change).
kubectl patch deployment magazin-api -n magazin --type=json \
-p '[{"op":"add","path":"/spec/template/spec/containers/0/env/-","value":{"name":"ORAS","value":"Iasi"}}]'
Ieșire în terminal
deployment.apps/magazin-api patched
Exemplul 3: Merge patch pentru o resursă proprie
Pentru obiectele dintr-un CRD folosim --type=merge.
kubectl patch backup baza-zilnic -n magazin --type=merge -p '{"spec":{"pastrare":14}}'
Ieșire în terminal
backup.firma.ro/baza-zilnic patched
Greșeli frecvente
- Folosirea patch-ului implicit (
strategic) pe resurse proprii: eroarea spune că tipul nu este suportat. Adaugă--type=merge. - Modificarea cu
kubectl patcha unor obiecte gestionate din Git (GitOps,kubectl applyîn CI): la următoarea sincronizare, modificarea dispare. Schimbă manifestul din depozit.
Comenzi înrudite
kubectl replace: Înlocuiește complet un obiect existent cu definiția din fișier; cu –force îl șterge și îl recreează.kubectl auth can-i: Verifică dacă tu (sau alt utilizator ori ServiceAccount) ai voie să faci o anumită acțiune în cluster, conform regulilor RBAC.