Capítulo 3.6 - Deployments
Objetivos de Aprendizagem
Ao final deste capítulo, você será capaz de:
- Compreender o papel dos Deployments
- Criar e gerenciar Deployments
- Realizar rolling updates
- Gerenciar rollbacks
- Escalar Deployments
O que é um Deployment?
Um Deployment gerencia os ReplicaSets e oferece funcionalidades de atualização declarativa, rollback e scaling.
Vantagens:
- Gerenciamento de versões
- Rolling updates
- Rollbacks automáticos
- Escalabilidade fácil
Declaração YAML
apiVersion: apps/v1
kind: Deployment
metadata:
name: web-deployment
labels:
app: web
spec:
replicas: 3
selector:
matchLabels:
app: web
template:
metadata:
labels:
app: web
spec:
containers:
- name: nginx
image: nginx:1.20
ports:
- containerPort: 80
resources:
requests:
cpu: "100m"
memory: "128Mi"
limits:
cpu: "500m"
memory: "512Mi"
strategy:
type: RollingUpdate
rollingUpdate:
maxSurge: 1
maxUnavailable: 0
Rolling Updates
Processo
Estratégias
RollingUpdate (padrão):
- Substitui os Pods gradualmente
- Sem interrupção de serviço
- Configurável (maxSurge, maxUnavailable)
Recreate:
- Remove todos os Pods antigos
- Cria os novos Pods
- Interrupção de serviço
Atualizando um Deployment
Método 1: Modificar a Imagem
# Atualizar a imagem
kubectl set image deployment/web-deployment nginx=nginx:1.21
# Ver o status da atualização
kubectl rollout status deployment/web-deployment
Método 2: Editar o YAML
# Editar o Deployment
kubectl edit deployment web-deployment
# Ou modificar o arquivo e aplicar
kubectl apply -f deployment.yaml
Método 3: Patch
# Modificar uma parte específica
kubectl patch deployment web-deployment -p '{"spec":{"replicas":5}}'
Rollback
Ver o Histórico
# Ver o histórico dos rollouts
kubectl rollout history deployment/web-deployment
# Detalhes de uma revisão
kubectl rollout history deployment/web-deployment --revision=2
Realizar um Rollback
# Rollback para a versão anterior
kubectl rollout undo deployment/web-deployment
# Rollback para uma revisão específica
kubectl rollout undo deployment/web-deployment --to-revision=2
Scaling
Scaling Manual
# Aumentar o número de réplicas
kubectl scale deployment web-deployment --replicas=5
# Ou editar
kubectl edit deployment web-deployment
Scaling Automático (HPA)
# Criar um Horizontal Pod Autoscaler
kubectl autoscale deployment web-deployment --min=2 --max=10 --cpu-percent=80
Comandos Úteis
# Ver os Deployments
kubectl get deployments
# Detalhes de um Deployment
kubectl describe deployment web-deployment
# Ver os ReplicaSets criados
kubectl get replicasets
# Pausar/Retomar um rollout
kubectl rollout pause deployment/web-deployment
kubectl rollout resume deployment/web-deployment
Resumo
Neste capítulo, você aprendeu:
Deployment: Gerencia ReplicaSets com funcionalidades avançadas
Rolling Updates: Atualizações sem interrupção
Rollback: Retorno para uma versão anterior
Scaling: Manual ou automático (HPA)
Gerenciamento: kubectl set image, rollout, scale
Próximos Passos
Agora que você domina os Deployments:
Capítulo 3.7: Estratégias de Deploy
Capítulo 3.8: Health Checks
Troubleshooting
Problemas Comuns com Deployments
Problema 1: Deployment não cria Pods
Sintomas:
kubectl get deployment
# NAME READY UP-TO-DATE AVAILABLE
# my-app 0/3 0 0
Soluções:
-
Verificar os eventos:
kubectl describe deployment my-app
kubectl get events --sort-by='.lastTimestamp' -
Verificar os ReplicaSets:
kubectl get replicasets
kubectl describe replicaset <rs-name> -
Verificar quotas de recursos:
kubectl describe quota
Problema 2: Rolling Update travado
Sintomas:
- O deployment permanece em "Updating"
- Os novos pods não iniciam
Soluções:
-
Verificar os eventos:
kubectl describe deployment my-app -
Verificar recursos disponíveis:
kubectl top nodes
kubectl describe nodes -
Verificar os health checks:
- As probes (liveness/readiness) podem impedir o deploy
- Verifique os logs dos pods
-
Forçar rollback se necessário:
kubectl rollout undo deployment/my-app
Problema 3: Pods em CrashLoopBackOff
Sintomas:
kubectl get pods
# NAME READY STATUS RESTARTS
# my-app-xxx-123 0/1 CrashLoopBackOff 5
Soluções:
-
Verificar os logs:
kubectl logs <pod-name>
kubectl logs <pod-name> --previous -
Verificar a configuração:
kubectl describe pod <pod-name> -
Verificar recursos:
- Limites de CPU/Memory muito baixos
- Volumes ausentes
- Secrets/ConfigMaps incorretos
Problema 4: Scaling não funciona
Sintomas:
kubectl scale deployment my-app --replicas=5
# Mas ainda 3 pods
Soluções:
-
Verificar quotas:
kubectl describe quota -
Verificar recursos dos nodes:
kubectl describe nodes -
Verificar restrições:
kubectl get deployment my-app -o yaml
# Verificar nodeSelectors, affinity, etc.
Navegação
Capítulo anterior: Capítulo 3.5 - ReplicaSets
Próximo capítulo: Capítulo 3.7 - Estratégias de Deploy
Voltar ao módulo: Módulo 3 - Pods e Deployments
Capítulo criado em: Dezembro 2024