Ce face Obiectul Deployment
Deployment este cel mai folosit obiect din Kubernetes pentru aplicații web, API-uri, microservicii și workeri fără stare (stateless). În spate, un Deployment creează și controlează un ReplicaSet, care la rândul lui menține în viață numărul dorit de Pod-uri.
Când modifici ceva în spec.template (de exemplu versiunea imaginii), Deployment-ul creează un ReplicaSet nou și mută treptat replicile de pe cel vechi pe cel nou, conform strategiei RollingUpdate (controlată de maxSurge și maxUnavailable). Vechile ReplicaSet-uri sunt păstrate la 0 replici (implicit ultimele 10, prin revisionHistoryLimit) ca să poți face instantaneu kubectl rollout undo.
Legătura critică: toate etichetele din spec.selector.matchLabels trebuie să apară identic în spec.template.metadata.labels, altfel API server-ul va respinge manifestul.
Opțiuni și argumente
| Opțiune / Parametru | Descriere |
|---|---|
spec.replicas |
Numărul de pod-uri identice care trebuie să ruleze permanent. |
spec.selector.matchLabels |
Selectorul imutabil după care Deployment-ul își recunoaște propriile pod-uri. |
spec.strategy.type |
RollingUpdate (implicit, fără downtime) sau Recreate (oprește toate pod-urile vechi înainte de a le porni pe cele noi). |
rollingUpdate.maxSurge / maxUnavailable |
Câte pod-uri în plus pot fi create și câte pot fi indisponibile în timpul actualizării (număr întreg sau procent, ex. 25%). |
spec.template |
Șablonul complet al Pod-ului (metadata.labels + spec.containers). |
spec.revisionHistoryLimit |
Câte revizii vechi de ReplicaSet sunt păstrate pentru rollback (implicit 10). |
Exemple
Exemplul 1: Manifest YAML recomandat pentru un Deployment de producție
Include 3 replici, strategie de rolling update fără scădere de capacitate (maxUnavailable: 0), variabile din ConfigMap/Secret și probe de sănătate.
apiVersion: apps/v1
kind: Deployment
metadata:
name: api
namespace: shop
labels:
app: api
spec:
replicas: 3
revisionHistoryLimit: 5
selector:
matchLabels:
app: api
strategy:
type: RollingUpdate
rollingUpdate:
maxSurge: 1
maxUnavailable: 0
template:
metadata:
labels:
app: api
spec:
containers:
- name: api
image: ghcr.io/exemplu/api:1.4.2
ports:
- name: http
containerPort: 8080
envFrom:
- configMapRef:
name: api-config
- secretRef:
name: api-secrets
resources:
requests:
cpu: 200m
memory: 256Mi
limits:
cpu: 1000m
memory: 512Mi
readinessProbe:
httpGet:
path: /healthz
port: http
periodSeconds: 5
Ieșire în terminal
deployment.apps/api created
Greșeli frecvente
- Modificarea lui
spec.selector.matchLabelspe un Deployment existent: câmpul este imutabil; pentru a-l schimba trebuie să ștergi și să recreezi Deployment-ul. - Folosirea tag-ului
:latestla imagine: nu știi ce versiune rulează în fiecare pod, iarkubectl rollout undodevine inutil.
Comenzi înrudite
Obiectul Pod: Cea mai mică unitate de execuție în Kubernetes: unul sau mai multe containere care împart IP-ul și volumele.Obiectul Service: Oferă o adresă IP stabilă, un nume DNS intern și load-balancing către un grup de Pod-uri.kubectl rollout: Monitorizează lansarea unei versiuni noi, revine la o revizie anterioară (undo) sau repornește treptat pod-urile.kubectl scale: Modifică manual numărul de replici al unui Deployment, StatefulSet sau ReplicaSet.kubectl autoscale: Creează un HorizontalPodAutoscaler (HPA) care ajustează automat numărul de replici după consumul de CPU.