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:
- O usuário ou o sistema CI/CD atualiza o Deployment.
- O Deployment cria um novo ReplicaSet com um spec contendo a nova versão da imagem.
- O novo ReplicaSet começa a criar pods com a nova versão.
- 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. - O processo continua até que todos os pods estejam sob o controle do novo ReplicaSet com a nova versão.
- 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.