Pular para o conteúdo principal

Capítulo 2.3 - etcd

Objetivos de Aprendizagem​

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

  • Compreender o papel do etcd no Kubernetes
  • Explicar como o etcd armazena o estado do cluster
  • Entender replicação e alta disponibilidade
  • Identificar boas práticas de backup

O que é o etcd?​

etcd é um banco de dados chave-valor distribuído, consistente e altamente disponível utilizado como fonte única de verdade para o Kubernetes. Toda a configuração e o estado do cluster são armazenados no etcd.


Papel no Kubernetes​

Fonte Única de Verdade​

etcd armazena:

  • Todos os recursos (Pods, Services, Deployments, etc.)
  • Configuração do cluster
  • Estado atual de todos os recursos
  • Metadados e anotações

Sem Acesso Direto​

Importante: Usuários e componentes NUNCA acessam o etcd diretamente. Todas as interações passam pelo API Server.


Estrutura dos Dados​

Formato Chave-Valor​

Os dados são organizados hierarquicamente:

/registry/pods/default/my-pod
/registry/services/default/my-service
/registry/deployments/default/my-deployment

Exemplo de Dados Armazenados​

{
"kind": "Pod",
"apiVersion": "v1",
"metadata": {
"name": "my-pod",
"namespace": "default",
"uid": "123-456-789"
},
"spec": {
"containers": [...]
},
"status": {
"phase": "Running"
}
}

Alta Disponibilidade​

Replicação​

Para produção, o etcd deve ser replicado (geralmente 3 ou 5 nodes):

Vantagens:

  • Tolerância a falhas (1 node pode falhar)
  • Performance aprimorada (leituras distribuídas)
  • Consistência garantida

Consenso: Raft​

etcd utiliza o algoritmo de consenso Raft:

Características:

  • Um líder eleito
  • Replicação para os seguidores
  • Consenso por maioria
  • Consistência forte garantida

Backup e Restauração​

Importância Crítica​

⚠️ etcd contém TODO o estado do cluster. Sua perda = perda do cluster!

Backup Regular​

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

# Restaurar de um backup
ETCDCTL_API=3 etcdctl snapshot restore /backup/etcd-snapshot.db

Boas Práticas​

  • Backups automáticos diários
  • Armazenamento off-site
  • Testes regulares de restauração
  • Documentação do processo

Performance​

Fatores que Impactam a Performance​

  1. Tamanho do cluster: Mais recursos = mais dados
  2. Frequência de mudanças: Atualizações frequentes
  3. Tamanho dos objetos: Grandes ConfigMaps/Secrets
  4. Compaction: Limpeza de versões antigas

Otimizações​

  • Compaction regular dos dados
  • Desfragmentação do disco
  • SSD para melhor performance
  • Monitoramento das métricas

Segurança​

Criptografia​

  • Em trânsito: TLS entre API Server e etcd
  • Em repouso: Criptografia opcional dos dados

Acesso Restrito​

  • Apenas o API Server acessa o etcd
  • Certificados de cliente obrigatórios
  • Sem acesso público de rede

Monitoramento​

Métricas Importantes​

  • Tamanho do banco de dados
  • Latência das operações
  • Taxa de erros
  • Estado do líder
  • Espaço em disco disponível

Comandos Úteis​

# Verificar o estado do etcd
kubectl get componentstatuses

# Ver métricas (se o monitoramento estiver configurado)
# Via Prometheus ou ferramentas similares

Resumo​

Neste capítulo, você aprendeu:

etcd: Banco de dados distribuído, fonte única de verdade
Armazenamento: Todos os recursos e configuração do cluster
Alta Disponibilidade: Replicação com consenso Raft
Backup: Crítico para a continuidade do cluster
Segurança: Acesso restrito, criptografia em trânsito


Próximos Passos​

Agora que você entende o etcd:

Capítulo 2.4: Controller Manager - Manutenção do Estado Desejado
Capítulo 2.5: Scheduler - Planejamento dos Pods


Capítulo criado em: Dezembro de 2024