Sobes.tech
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:

  1. 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.
  2. 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.
  3. 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).
  4. 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).
  5. 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.
  6. 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.
  7. 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.