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șteapplysaupatch. - Rularea
replace --forcepe 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.