Capítulo 12.3 - Gerenciamento de Ambientes
Objetivos de Aprendizagem
Ao final deste capítulo, você será capaz de:
- Compreender as estratégias de gerenciamento de ambientes
- Utilizar namespaces para isolar ambientes
- Gerenciar clusters separados
- Configurar valores por ambiente
- Implementar a promoção entre ambientes
- Aplicar boas práticas
Introdução
O gerenciamento de ambientes permite separar o desenvolvimento, o staging e a produção para maior estabilidade e segurança.
Estratégias
1. Namespaces por Ambiente
Vantagens:
- Simples de gerenciar
- Compartilhamento de recursos
- Econômico
Desvantagens:
- Isolamento limitado
- Risco de conflitos
2. Clusters Separados
Vantagens:
- Isolamento completo
- Máxima segurança
- Sem conflitos
Desvantagens:
- Mais complexo
- Custo mais elevado
Namespaces por Ambiente
Criação
# Criar os namespaces
kubectl create namespace dev
kubectl create namespace staging
kubectl create namespace production
# Adicionar labels
kubectl label namespace dev environment=development
kubectl label namespace staging environment=staging
kubectl label namespace production environment=production
Deploy
# Fazer deploy em cada ambiente
kubectl apply -f deployment.yaml -n dev
kubectl apply -f deployment.yaml -n staging
kubectl apply -f deployment.yaml -n production
Resource Quotas por Ambiente
# dev-quota.yaml
apiVersion: v1
kind: ResourceQuota
metadata:
name: dev-quota
namespace: dev
spec:
hard:
requests.cpu: "5"
requests.memory: 10Gi
limits.cpu: "10"
limits.memory: 20Gi
Clusters Separados
Arquitetura
Vantagens:
- Isolamento completo
- Máxima segurança
- Sem risco de contaminação
Configuração por Ambiente
Values Files
# values-dev.yaml
replicaCount: 1
image:
tag: "dev"
resources:
requests:
cpu: 100m
memory: 128Mi
# values-staging.yaml
replicaCount: 2
image:
tag: "staging"
resources:
requests:
cpu: 250m
memory: 256Mi
# values-prod.yaml
replicaCount: 5
image:
tag: "1.0.0"
resources:
requests:
cpu: 500m
memory: 512Mi
Deploy com Helm
# Dev
helm install my-app ./my-chart -f values-dev.yaml -n dev
# Staging
helm install my-app ./my-chart -f values-staging.yaml -n staging
# Production
helm install my-app ./my-chart -f values-prod.yaml -n production
Promoção entre Ambientes
Processo
Automação
# GitHub Actions workflow
name: Promote to Production
on:
workflow_dispatch:
inputs:
version:
description: 'Version to promote'
required: true
jobs:
promote:
runs-on: ubuntu-latest
steps:
- name: Deploy to Production
run: |
helm upgrade my-app ./my-chart \
-f values-prod.yaml \
--set image.tag=${{ github.event.inputs.version }} \
-n production
Boas Práticas
1. Separação Clara
Manter uma separação clara entre os ambientes.
2. Configuração Externalizada
Utilizar ConfigMaps e Secrets para configuração.
3. Testes Automáticos
Executar testes em cada ambiente.
4. Documentação
Documentar as diferenças entre ambientes.
5. Acesso Restrito
Restringir o acesso à produção com RBAC.
Resumo
Neste capítulo, você aprendeu:
Estratégias: Namespaces ou clusters separados
Namespaces: Simples, econômico, isolamento limitado
Clusters: Isolamento completo, mais complexo
Configuração: Values files por ambiente
Promoção: Processo de promoção entre ambientes
Boas práticas: Separação, configuração externalizada, testes
Próximos Passos
Lab 12.4: Projeto Final Completo
Recapitulação do Curso
Capítulo criado em: Dezembro de 2024