Ce se întâmplă dacă implementăm aplicația cu un deployment și apoi schimbăm versiunea aplicației în replica set?
sobes.tech AI
Răspuns de la AI
După modificarea versiunii aplicației în resursa Deployment, ReplicaSet-ul asociat cu acest Deployment va fi actualizat. Deployment va crea un nou ReplicaSet cu noua versiune a imaginii containerului. ReplicaSet-ul vechi va fi redus treptat, iar cel nou va fi scalat în sus. Acest proces se numește rolling update (actualizare continuă) și se realizează automat implicit.
Pași specifici:
- Utilizatorul sau sistemul CI/CD actualizează Deployment-ul.
- Deployment creează un nou ReplicaSet cu un spec care conține noua versiune a imaginii.
- Noua ReplicaSet începe să creeze poduri cu noua versiune.
- Odată ce o parte din noile poduri trec în starea
Ready, Deployment începe să reducă ReplicaSet-ul vechi, eliminând podurile cu versiunea anterioară. - Procesul continuă până când toate podurile sunt sub controlul noului ReplicaSet cu versiunea nouă.
- ReplicaSet-ul vechi rămâne, dar cu un număr dorit de replici egal cu 0.
Aceasta asigură o perioadă de inactivitate zero în timpul actualizării aplicației (cu condiția să existe resurse suficiente și podurile să fie pregătite corect) și permite revenirea ușoară la versiunea anterioară prin actualizarea din nou a Deployment-ului.
Exemplu de actualizare YAML pentru Deployment:
# YAML actualizat pentru Deployment
apiVersion: apps/v1
kind: Deployment
metadata:
name: my-app-deployment
spec:
replicas: 3
selector:
matchLabels:
app: my-app
strategy:
type: RollingUpdate
rollingUpdate:
maxSurge: 25% # Numărul maxim de poduri care pot fi create peste numărul dorit
maxUnavailable: 25% # Numărul maxim de poduri indisponibile în timpul actualizării
template:
metadata:
labels:
app: my-app
spec:
containers:
- name: my-app-container
image: my-registry/my-app:v1.1.0 # Versiunea imaginii modificate
ports:
- containerPort: 80
Modificarea manuală a ReplicaSet-ului este extrem de nerecomandată și poate duce la comportamente imprevizibile, deoarece Deployment va încerca să ajusteze starea ReplicaSet-ului pentru a se potrivi cu starea dorită, suprascriind modificările tale. Toate modificările gestionate ale aplicației trebuie făcute prin resursa Deployment.