Sobes.tech
Middle+

Какво ще се случи, ако разположим приложението с помощта на деплой и след това променим версията на приложението в репликасета?

sobes.tech AI

Отговор от AI

След като промените версията на приложението в ресурса Deployment, свързаният с него ReplicaSet ще бъде актуализиран. Deployment ще създаде нов ReplicaSet с новата версия на изображението на контейнера. Старият ReplicaSet ще бъде постепенно намален, а новият ще бъде увеличен. Този процес се нарича rolling update (плавно обновяване) и по подразбиране се изпълнява автоматично.

Конкретни стъпки:

  1. Потребителят или системата CI/CD актуализира Deployment.
  2. Deployment създава нов ReplicaSet с конфигурация, съдържаща новата версия на изображението.
  3. Новият ReplicaSet започва да създава подове с новата версия.
  4. След като част от новите подове преминат в състояние Ready, Deployment започва да намалява стария ReplicaSet, като премахва старите подове.
  5. Процесът продължава, докато всички подове не попаднат под контрола на новия ReplicaSet с новата версия.
  6. Старият 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.