Какво ще се случи, ако разположим приложението с помощта на деплой и след това променим версията на приложението в репликасета?
sobes.tech AI
Отговор от AI
След като промените версията на приложението в ресурса Deployment, свързаният с него ReplicaSet ще бъде актуализиран. Deployment ще създаде нов ReplicaSet с новата версия на изображението на контейнера. Старият ReplicaSet ще бъде постепенно намален, а новият ще бъде увеличен. Този процес се нарича rolling update (плавно обновяване) и по подразбиране се изпълнява автоматично.
Конкретни стъпки:
- Потребителят или системата CI/CD актуализира Deployment.
- Deployment създава нов ReplicaSet с конфигурация, съдържаща новата версия на изображението.
- Новият ReplicaSet започва да създава подове с новата версия.
- След като част от новите подове преминат в състояние
Ready, Deployment започва да намалява стария ReplicaSet, като премахва старите подове. - Процесът продължава, докато всички подове не попаднат под контрола на новия ReplicaSet с новата версия.
- Старият ReplicaSet остава, но с желано число на репликите равно на 0.
Това осигурява нулево време на престой при актуализация на приложението (при условие, че има достатъчно ресурси и подовете са правилно готови) и позволява лесно връщане към предишната версия чрез повторно актуализиране на Deployment.
Пример за актуализиране на YAML Deployment:
# Актуализиран YAML на 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% # Максималният брой подове, които могат да бъдат създадени над желаното число
maxUnavailable: 25% # Максималният брой подове, които могат да бъдат недостъпни по време на актуализация
template:
metadata:
labels:
app: my-app
spec:
containers:
- name: my-app-container
image: my-registry/my-app:v1.1.0 # Модифицирана версия на изображението
ports:
- containerPort: 80
Ръчното изменение на ReplicaSet е силно нежелателно и може да доведе до непредсказуемо поведение, тъй като Deployment ще се опита да синхронизира състоянието на ReplicaSet с желаното състояние, като презапише вашите промени. Всички управлявани промени по приложението трябва да се извършват чрез ресурса Deployment.