Sobes.tech
Middle+

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:

  1. Utilizatorul sau sistemul CI/CD actualizează Deployment-ul.
  2. Deployment creează un nou ReplicaSet cu un spec care conține noua versiune a imaginii.
  3. Noua ReplicaSet începe să creeze poduri cu noua versiune.
  4. Odată ce o parte din noile poduri trec în starea Ready, Deployment începe să reducă ReplicaSet-ul vechi, eliminând podurile cu versiunea anterioară.
  5. Procesul continuă până când toate podurile sunt sub controlul noului ReplicaSet cu versiunea nouă.
  6. ReplicaSet-ul vechi rămâne, dar cu un număr dorit de repli­ci 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.