kubectl replace în Kubernetes (kubectl)

Creare și actualizare kubectl 1.0+

Înlocuiește complet un obiect existent cu definiția din fișier; cu --force îl șterge și îl recreează.

Sintaxă comandă
kubectl replace -f <fișier> [--force] [--grace-period=N]

Ce face kubectl replace

kubectl replace trimite obiectul întreg și îl înlocuiește pe cel din cluster. Spre deosebire de kubectl apply, nu combină modificările: câmpurile care lipsesc din fișier dispar din obiect. Obiectul trebuie să existe deja.

Dacă fișierul conține metadata.resourceVersion (de exemplu a fost obținut cu kubectl get -o yaml), API-ul refuză înlocuirea când obiectul a fost modificat între timp de altcineva, cu o eroare Conflict. Cu --force, obiectul este șters și creat din nou: util pentru câmpuri care nu se pot modifica (de exemplu selectorul unui Job), dar Pod-urile asociate sunt recreate.

Parametri

Parametru Descriere
-f, --filename Fișierul (sau - pentru intrarea standard) cu definiția completă.
--force Șterge obiectul și îl creează din nou.
--grace-period=N Cu --force: câte secunde au Pod-urile să se oprească.
--save-config Salvează configurația în adnotare, pentru folosirea ulterioară a lui apply.
--subresource Înlocuiește o subresursă (de exemplu status).

Exemple

Exemplul 1: Exportare, modificare, înlocuire

Luăm ConfigMap-ul actual, îl edităm local și îl înlocuim.

kubectl get configmap setari-magazin -n magazin -o yaml > setari.yaml
sed -i 's/ORAS: Cluj/ORAS: Iasi/' setari.yaml
kubectl replace -f setari.yaml

Ieșire în terminal

configmap/setari-magazin replaced

Exemplul 2: Conflict: obiectul s-a schimbat între timp

Un coleg a modificat ConfigMap-ul după ce l-ai exportat. Exportă-l din nou și refă modificarea.

kubectl replace -f setari.yaml

Ieșire în terminal

Error from server (Conflict): error when replacing "setari.yaml": Operation cannot be fulfilled on configmaps "setari-magazin": the object has been modified; please apply your changes to the latest version and try again

Exemplul 3: Recrearea unui Job cu –force

Șablonul unui Job nu se poate modifica după creare; cu --force îl ștergem și îl creăm din nou.

kubectl replace --force -f migrare-job.yaml

Ieșire în terminal

job.batch "migrare" deleted
job.batch/migrare replaced

Greșeli frecvente

  • Folosirea unui fișier parțial cu replace: tot ce lipsește (etichete, adnotări, variabile) este șters din obiect. Pentru modificări parțiale folosește apply sau patch.
  • Rularea replace --force pe un Deployment în producție: toate Pod-urile sunt oprite și pornite din nou, deci aplicația este indisponibilă câteva momente.

Comenzi înrudite

  • kubectl patch: Modifică doar câteva câmpuri ale unui obiect existent, direct din linia de comandă, fără să editezi tot manifestul.