Ce face kubectl apply
Comanda kubectl apply este modul declarativ recomandat de a gestiona resurse în Kubernetes: îi dai un fișier YAML (sau un director de manifeste) care descrie cum ar trebui să arate obiectele, iar kubectl le creează dacă nu există sau le actualizează doar pe câmpurile modificate dacă există deja.
La aplicarea clasică (client-side), kubectl salvează ultima configurație aplicată în adnotarea kubectl.kubernetes.io/last-applied-configuration și face o îmbinare în trei căi între starea veche, cea din cluster și noul YAML. Cu --server-side, îmbinarea o face direct API server-ul prin câmpul managedFields, evitând adnotările uriașe și detectând conflictele între unelte diferite.
Înainte de a aplica în producție, folosește --dry-run=server (validează manifestul pe API server fără a salva nimic) și kubectl diff -f ca să vezi exact ce linii s-ar schimba.
Opțiuni și argumente
| Opțiune / Parametru | Descriere |
|---|---|
-f, --filename=CALE |
Fișier YAML/JSON, director sau URL; se poate repeta. |
-R, --recursive |
Parcurge recursiv subdirectoarele când -f indică un director. |
-k, --kustomize=DIR |
Construiește și aplică un director ce conține kustomization.yaml. |
--server-side |
Executarea îmbinării pe server (Server-Side Apply), cu urmărirea proprietarilor de câmpuri. |
--force-conflicts |
Împreună cu --server-side, preia forțat câmpurile deținute de alt manager. |
--dry-run=client|server |
Simulează comanda local sau pe API server fără a persista modificările. |
--prune -l SELECTOR |
Șterge resursele cu eticheta dată care nu mai apar în fișierele aplicate. |
-o, --output=yaml|json|name |
Afișează obiectul rezultat în loc de mesajul scurt created/configured. |
Exemple
Exemplul 1: Aplicarea unui manifest și apoi a unei modificări
La prima rulare obiectele sunt create; la a doua, doar cele schimbate apar ca configured.
kubectl apply -f k8s/deployment.yaml
# modificăm numărul de replici în fișier, apoi:
kubectl apply -f k8s/
Ieșire în terminal
deployment.apps/api created
deployment.apps/api configured
service/api unchanged
Exemplul 2: Validare pe server fără aplicare (dry-run)
Prinde atât erorile de schemă, cât și respingerile de la admission webhooks (de exemplu politici Kyverno/Gatekeeper).
kubectl apply -f k8s/deployment.yaml --dry-run=server
Ieșire în terminal
deployment.apps/api configured (server dry run)
Exemplul 3: Aplicarea unui overlay Kustomize cu Server-Side Apply
kubectl apply -k overlays/production --server-side
Ieșire în terminal
namespace/shop serverside-applied
configmap/api-config-8g4b2m9k5f serverside-applied
deployment.apps/api serverside-applied
service/api serverside-applied
Greșeli frecvente
- Combinarea comenzilor imperative (
kubectl create,kubectl edit) cukubectl applyfără--server-side: lipsește adnotarealast-applied-configurationși apar avertismente sau câmpuri care nu se șterg. - Folosirea lui
--prunecu un selector prea larg, ceea ce poate șterge din greșeală alte resurse din namespace.
Comenzi înrudite
kubectl diff: Arată diferențele (în format unified diff) dintre manifestele locale și starea actuală din cluster.kubectl create: Creează imperativ o resursă nouă din fișier sau direct din argumente în linia de comandă.kubectl delete: Șterge resurse după nume, etichete sau fișierele YAML din care au fost create.Obiectul Deployment: Gestionează aplicații stateless replicabile: menține numărul de pod-uri, le înlocuiește când cad și face rolling updates.