Sobes.tech
Middle+

O que acontecerá se implantarmos a aplicação com um deployment e depois alterarmos a versão da aplicação no replica set?

sobes.tech IA

Resposta da IA

Após alterar a versão da aplicação no recurso Deployment, o ReplicaSet associado a esse Deployment será atualizado. O Deployment criará um novo ReplicaSet com a nova versão da imagem do contêiner. O ReplicaSet antigo será escalado gradualmente para baixo, e o novo ReplicaSet será escalado para cima. Este processo é chamado de atualização contínua (rolling update) e é realizado automaticamente por padrão.

Etapas específicas:

  1. O usuário ou o sistema CI/CD atualiza o Deployment.
  2. O Deployment cria um novo ReplicaSet com um spec contendo a nova versão da imagem.
  3. O novo ReplicaSet começa a criar pods com a nova versão.
  4. Assim que alguns dos novos pods atingirem o estado Ready, o Deployment começa a escalar para baixo o ReplicaSet antigo, removendo os pods com a versão antiga.
  5. O processo continua até que todos os pods estejam sob o controle do novo ReplicaSet com a nova versão.
  6. O ReplicaSet antigo permanece, mas com um número desejado de réplicas igual a 0.

Isso garante um tempo de inatividade zero durante a atualização da aplicação (desde que haja recursos suficientes e os pods estejam prontos corretamente) e permite reverter facilmente para a versão anterior simplesmente atualizando o Deployment novamente.

Exemplo de atualização do YAML do Deployment:

# Deployment YAML atualizado
apiVersion: apps/v1
kind: Deployment
metadata:
  name: my-app-deployment
spec:
  replicas: 3
  selector:
    matchLabels:
      app: my-app
  strategy:
    type: RollingUpdate
    rollingUpdate:
      maxSurge: 25% # Número máximo de pods que podem ser criados acima do número desejado
      maxUnavailable: 25% # Número máximo de pods que podem estar indisponíveis durante a atualização
  template:
    metadata:
      labels:
        app: my-app
    spec:
      containers:
      - name: my-app-container
        image: my-registry/my-app:v1.1.0 # Versão da imagem modificada
        ports:
        - containerPort: 80

Alterar manualmente o ReplicaSet é altamente desaconselhável e pode levar a comportamentos imprevisíveis, pois o Deployment tentará ajustar o estado do ReplicaSet para corresponder ao seu estado desejado, sobrescrevendo suas alterações. Todas as alterações gerenciadas da aplicação devem ser feitas através do recurso Deployment.