Pular para o conteúdo principal

Capítulo 12.1 - Deploy em Produção

Objetivos de Aprendizagem​

Ao final deste capítulo, você será capaz de:

  • Compreender os requisitos de produção
  • Implementar alta disponibilidade
  • Configurar a segurança em produção
  • Gerenciar recursos de forma eficiente
  • Implementar monitoramento e alertas
  • Aplicar as melhores práticas

Introdução​

Fazer deploy em produção exige uma preparação rigorosa para garantir disponibilidade, segurança e desempenho.


Alta Disponibilidade​

Clusters Multi-Node​

Recomendações:

  • Mínimo de 3 nodes para o Control Plane
  • Mínimo de 3 worker nodes
  • Distribuição em múltiplas zonas de disponibilidade

Pod Disruption Budgets​

apiVersion: policy/v1
kind: PodDisruptionBudget
metadata:
name: app-pdb
spec:
minAvailable: 2
selector:
matchLabels:
app: my-app

Resultado: Garante que pelo menos 2 Pods estejam disponíveis durante atualizações.


Segurança​

RBAC Configurado​

# Limitar permissões
apiVersion: rbac.authorization.k8s.io/v1
kind: Role
metadata:
name: app-role
rules:
- apiGroups: [""]
resources: ["pods"]
verbs: ["get", "list"]

Network Policies​

apiVersion: networking.k8s.io/v1
kind: NetworkPolicy
metadata:
name: deny-all
spec:
podSelector: {}
policyTypes:
- Ingress
- Egress

Secrets Criptografados​

# Ativar criptografia em repouso
apiVersion: apiserver.config.k8s.io/v1
kind: EncryptionConfiguration
resources:
- resources:
- secrets
providers:
- aescbc:
keys:
- name: key1
secret: <base64-encoded-secret>

Imagens Escaneadas​

Utilize ferramentas de scan de imagens (Trivy, Clair) antes do deploy.


Gerenciamento de Recursos​

Requests e Limits​

apiVersion: apps/v1
kind: Deployment
metadata:
name: my-app
spec:
template:
spec:
containers:
- name: app
image: my-app:1.0
resources:
requests:
cpu: 250m
memory: 512Mi
limits:
cpu: 500m
memory: 1Gi

Resource Quotas​

apiVersion: v1
kind: ResourceQuota
metadata:
name: namespace-quota
namespace: production
spec:
hard:
requests.cpu: "10"
requests.memory: 20Gi
limits.cpu: "20"
limits.memory: 40Gi
persistentvolumeclaims: "10"

Limit Ranges​

apiVersion: v1
kind: LimitRange
metadata:
name: namespace-limits
namespace: production
spec:
limits:
- default:
cpu: "500m"
memory: "1Gi"
defaultRequest:
cpu: "250m"
memory: "512Mi"
type: Container

Monitoramento e Alertas​

Métricas Essenciais​

  • Uso de CPU/Memória
  • Latência das requisições
  • Taxa de erros
  • Disponibilidade dos serviços

Alertas Críticos​

  • Pods em CrashLoop
  • Uso de CPU > 90%
  • Uso de Memória > 90%
  • Serviços indisponíveis

Backup e Disaster Recovery​

Backup do etcd​

# Backup
ETCDCTL_API=3 etcdctl snapshot save /backup/etcd-snapshot.db \
--endpoints=https://127.0.0.1:2379 \
--cacert=/etc/etcd/ca.crt \
--cert=/etc/etcd/server.crt \
--key=/etc/etcd/server.key

# Restore
ETCDCTL_API=3 etcdctl snapshot restore /backup/etcd-snapshot.db

Backup de Volumes​

Utilize snapshots de volumes (EBS, Azure Disk, etc.).


Boas Práticas​

1. Multi-Ambientes​

Separe dev, staging, produção usando namespaces ou clusters.

2. Versionamento​

Utilize tags de imagens específicas, nunca latest.

3. Health Checks​

Configure liveness, readiness e startup probes.

4. Rolling Updates​

Utilize estratégias de deploy sem interrupção.

5. Documentação​

Documente os procedimentos de deploy e rollback.


Resumo​

Neste capítulo, você aprendeu:

Alta disponibilidade: Multi-nodes, Pod Disruption Budgets
Segurança: RBAC, Network Policies, secrets criptografados, imagens escaneadas
Recursos: Requests, limits, quotas, limit ranges
Monitoramento: Métricas essenciais, alertas críticos
Backup: etcd, volumes, disaster recovery
Boas práticas: Multi-ambientes, versionamento, health checks


Próximos Passos​

Capítulo 12.2: CI/CD
Capítulo 12.3: Ambientes
Lab 12.1: Configuração de Resource Management


Capítulo criado em: Dezembro 2024