Pular para o conteúdo principal

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