K8s em Exemplos: Atualizações Graduais

Rolling updates substituem Pods incrementalmente. Pods antigos servem tráfego enquanto novos iniciam. Readiness probes controlam tráfego para novos Pods. Isso habilita deploys com zero downtime.

deployment-rolling.yaml

Rolling updates são a estratégia padrão para Deployments. maxUnavailable controla quantos Pods podem estar down. maxSurge controla quantos Pods extras podem existir durante update.

spec:
  strategy:
    type: RollingUpdate
    rollingUpdate:
      maxUnavailable: 0
      maxSurge: 1
  replicas: 3
deployment-strategy.yaml

Primeiro exemplo: rollout rápido com 25%, permite algum downtime. Segundo exemplo: maxUnavailable: 0 garante zero downtime - novos Pods devem estar prontos antes dos antigos terminarem. Valores podem ser números absolutos ou porcentagens.

rollingUpdate:
  maxUnavailable: 25%
  maxSurge: 25%
---
rollingUpdate:
  maxUnavailable: 0
  maxSurge: 1
terminal

Dispare rollout mudando o template do Pod. Tag de imagem, env vars ou labels todos disparam updates. Use rollout status para acompanhar progresso e pause/resume para deploys estilo canary.

$ kubectl set image deployment/my-app app=my-app:v2.0.0
deployment.apps/my-app image updated

$ kubectl rollout status deployment/my-app
Waiting for deployment "my-app" rollout to finish: 1 of 3 updated...
Waiting for deployment "my-app" rollout to finish: 2 of 3 updated...
deployment "my-app" successfully rolled out

$ kubectl rollout pause deployment/my-app
deployment.apps/my-app paused

$ kubectl rollout resume deployment/my-app
deployment.apps/my-app resumed
terminal

Rollback instantâneo para uma revisão anterior. ReplicaSets antigos são preservados para isso. Use history para ver revisões disponíveis.

$ kubectl rollout history deployment/my-app
REVISION  CHANGE-CAUSE
1         Initial deployment
2         kubectl set image deployment/my-app app=my-app:v1.1.0
3         kubectl set image deployment/my-app app=my-app:v2.0.0

$ kubectl rollout undo deployment/my-app
deployment.apps/my-app rolled back

$ kubectl rollout undo deployment/my-app --to-revision=1
deployment.apps/my-app rolled back
deployment-recreate.yaml

Estratégia Recreate para todos os Pods antigos antes de iniciar novos. Use quando você não pode rodar duas versões simultaneamente (incompatibilidade de schema do banco, limites de licença). Causa downtime durante updates.

spec:
  strategy:
    type: Recreate

Índice | GitHub | Use as setas do teclado para navegar |