Middle+
Como criar um cluster Kubernetes resistente a falhas?
sobes.tech IA
Resposta da IA
Para criar um cluster Kubernetes resistente a falhas, é necessário garantir a redundância dos componentes-chave e dados.
Principais passos:
-
Nós mestres:
- Desdobrar vários nós mestres (pelo menos três) para o componente
kube-apiserver, que funcionem atrás de um balanceador de carga. Isto garante a disponibilidade da API mesmo se um dos nós mestres falhar. - Cada nó mestre deve ter acesso a um armazenamento partilhado do estado do cluster —
etcd.
- Desdobrar vários nós mestres (pelo menos três) para o componente
-
etcd:
- Desdobrar um cluster de etcd com vários nós (recomenda-se um número ímpar, mínimo três), distribuídos em diferentes zonas de disponibilidade ou servidores físicos. Isto garante a integridade dos dados do estado do cluster.
-
Balanceador de carga:
- Utilizar um balanceador de carga L4/L7 para distribuir o tráfego entre os nós mestres (
kube-apiserver). - Utilizar outro balanceador de carga para o tráfego de entrada às aplicações no cluster (por exemplo, um Controlador Ingress com suporte de alta disponibilidade).
- Utilizar um balanceador de carga L4/L7 para distribuir o tráfego entre os nós mestres (
-
Nós de trabalho:
- Desdobrar nodos de trabalho suficientes para executar Pods.
- Distribuir os nós de trabalho em diferentes zonas de disponibilidade ou servidores físicos para garantir a resistência a falhas ao nível da infraestrutura.
- Configurar os Orçamentos de Disrupção de Pods (PDBs) para definir o número mínimo de Pods acessíveis durante interrupções voluntárias (por exemplo, durante atualizações de nós).
-
Armazenamento:
- Utilizar armazenamento distribuído ou na cloud com alta disponibilidade para os Volumes Persistentes.
- Exemplos: Rook (Ceph), GlusterFS, provedores na cloud (AWS EBS, GCP Persistent Disk, Azure Managed Disks) com replicação.
-
Rede:
- Utilizar uma solução de rede fiável CNI (Interface de Rede de Contêineres) com suporte de alta disponibilidade (por exemplo, Calico, Cilium com componentes replicados).
- Assegurar a conectividade entre os nós mestres, os nós etcd e os nós de trabalho.
-
Cópia de segurança:
- Realizar backups periódicos dos dados etcd.
- Utilizar ferramentas como Velero para fazer backup e restaurar o estado do cluster e dos Volumes Persistentes.
Exemplo de arquitetura:
graph LR
subgraph Utilizadores
A[Utilizador] --> B(Equilibrador de carga de aplicações)
end
subgraph Cluster Kubernetes
subgraph Nós mestres
C1(Nó mestre 1)
C2(Nó mestre 2)
C3(Nó mestre 3)
end
subgraph Cluster etcd
D1(etcd 1)
D2(etcd 2)
D3(etcd 3)
end
subgraph Nós de trabalho
E1(Nó de trabalho 1)
E2(Nó de trabalho 2)
E3(Nó de trabalho 3)
end
subgraph Armazenamento
F(Armazenamento distribuído)
end
subgraph Rede
G(Interface de rede CNI)
end
B --> Balanceador(Balancer API do servidor)
Balanceador --> C1
Balanceador --> C2
Balanceador --> C3
C1 <--> D1
C1 <--> D2
C1 <--> D3
C2 <--> D1
C2 <--> D2
C2 <--> D3
C3 <--> D1
C3 <--> D2
C3 <--> D3
C1 --> G
C2 --> G
C3 --> G
E1 <--> G
E2 <--> G
E3 <--> G
E1 <--> F
E2 <--> F
E3 <--> F
G --> E1: Deploy de Pods
G --> E2: Deploy de Pods
G --> E3: Deploy de Pods
E1 --> B: Tráfego de aplicações
E2 --> B: Tráfego de aplicações
E3 --> B: Tráfego de aplicações
end
Ao fazer o deploy, utilizam-se ferramentas de automação como kubeadm, Kubespray ou serviços geridos de Kubernetes na cloud (EKS, GKE, AKS), que simplificam a criação de uma infraestrutura resistente a falhas.