Sobes.tech
Middle+

Čo sa stane, ak nasadíme aplikáciu pomocou deploymentu a potom zmeníme verziu aplikácie v replika sete?

sobes.tech AI

Odpoveď od AI

Po zmene verzie aplikácie v Deployment sa aktualizuje súvisiaci ReplicaSet zdroj, ktorý je s týmto Deploymentom spojený. Deployment vytvorí nový ReplicaSet s novou verziou obrazu kontajnera. Starý ReplicaSet sa postupne zmenšuje a nový ReplicaSet sa zväčšuje. Tento proces sa nazýva rolling update (skĺzavé aktualizácie) a vykonáva sa automaticky podľa predvolieb.

Konkrétne kroky:

  1. Používateľ alebo CI/CD systém aktualizuje Deployment.
  2. Deployment vytvorí nový ReplicaSet s špecifikáciou obsahujúcou novú verziu obrazu.
  3. Nový ReplicaSet začne vytvárať pody s novou verziou.
  4. Hneď ako časť nových podov prejde do stavu Ready, Deployment začne znižovať veľkosť starého ReplicaSetu odstraňovaním podov so starou verziou.
  5. Proces pokračuje, kým všetky pody nie sú pod správou nového ReplicaSetu s novou verziou.
  6. Starý ReplicaSet zostáva, ale s požadovaným počtom replík rovnakým ako 0.

Toto zabezpečuje nulový čas prestojov pri aktualizácii aplikácie (za predpokladu dostatočných zdrojov a správnej pripravenosti podov) a umožňuje jednoduché vrátenie na predchádzajúcu verziu jednoduchým aktualizovaním Deployment späť.

Príklad aktualizácie Deployment YAML:

# Aktualizovaný Deployment YAML
apiVersion: apps/v1
kind: Deployment
metadata:
  name: my-app-deployment
spec:
  replicas: 3
  selector:
    matchLabels:
      app: my-app
  strategy:
    type: RollingUpdate
    rollingUpdate:
      maxSurge: 25% # Maximálny počet podov, ktoré môžu byť vytvorené nad požadovaný počet
      maxUnavailable: 25% # Maximálny počet podov, ktoré môžu byť nedostupné počas aktualizácie
  template:
    metadata:
      labels:
        app: my-app
    spec:
      containers:
      - name: my-app-container
        image: my-registry/my-app:v1.1.0 # Zmenená verzia obrazu
        ports:
        - containerPort: 80

Priame zmeny ReplicaSet manuálne sú veľmi neodporúčané a môžu viesť k nepredvídateľnému správaniu, pretože Deployment sa pokúsi prispôsobiť stav ReplicaSet svojmu požadovanému stavu, prepíšu vaše zmeny. Všetky spravované zmeny aplikácie by mali byť vykonávané prostredníctvom zdroja Deployment.