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
- Tamanho do cluster: Mais recursos = mais dados
- Frequência de mudanças: Atualizações frequentes
- Tamanho dos objetos: Grandes ConfigMaps/Secrets
- 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