Č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:
- Používateľ alebo CI/CD systém aktualizuje Deployment.
- Deployment vytvorí nový ReplicaSet s špecifikáciou obsahujúcou novú verziu obrazu.
- Nový ReplicaSet začne vytvárať pody s novou verziou.
- 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. - Proces pokračuje, kým všetky pody nie sú pod správou nového ReplicaSetu s novou verziou.
- 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.