Sobes.tech
Middle+

Co se stane, když nasadíme aplikaci pomocí deploymentu a pak změníme verzi aplikace v replika setu?

sobes.tech AI

Odpověď od AI

Po změně verze aplikace v resource Deployment bude aktualizován i s tím související ReplicaSet. Deployment vytvoří nový ReplicaSet s novou verzí obrazu kontejneru. Starý ReplicaSet bude postupně snižován, zatímco nový ReplicaSet bude zvyšován. Tento proces se nazývá rolling update (postupná aktualizace) a je ve výchozím nastavení prováděn automaticky.

Konkrétní kroky:

  1. Uživatel nebo systém CI/CD aktualizuje Deployment.
  2. Deployment vytvoří nový ReplicaSet s definicí obsahující novou verzi obrazu.
  3. Nový ReplicaSet začne vytvářet pody s novou verzí.
  4. Jakmile část nových podů přejde do stavu Ready, Deployment začne snižovat starý ReplicaSet odstraňováním starých podů.
  5. Proces pokračuje, dokud všechny pody nejsou pod kontrolou nového ReplicaSetu s novou verzí.
  6. Starý ReplicaSet zůstává, ale s požadovaným počtem replik 0.

Toto zajišťuje nulový čas výpadku při aktualizaci aplikace (za předpokladu, že jsou k dispozici dostatečné zdroje a pody jsou správně připravené) a umožňuje snadný návrat k předchozí verzi pouhým opětovným aktualizováním Deploymentu.

Příklad aktualizace YAML Deploymentu:

# Aktualizovaný YAML Deploymentu
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ální počet podů, které mohou být vytvořeny nad požadovaný počet
      maxUnavailable: 25% # Maximální počet podů, které mohou být nedostupné během aktualizace
  template:
    metadata:
      labels:
        app: my-app
    spec:
      containers:
      - name: my-app-container
        image: my-registry/my-app:v1.1.0 # Změněná verze obrazu
        ports:
        - containerPort: 80

Manuální změna ReplicaSetu je důrazně nedoporučována a může vést k nepředvídatelnému chování, protože Deployment se pokusí sladit stav ReplicaSetu s požadovaným stavem, přepisujíc vaše změny. Všechny spravované změny aplikace by měly být prováděny přes resource Deployment.