Sobes.tech
Middle+

Jak vytvořit odolný cluster Kubernetes?

sobes.tech AI

Odpověď od AI

Pro vytvoření odolného Kubernetes clusteru je nutné zajistit redundanci klíčových komponent a dat.

Hlavní kroky:

  1. Master uzly:

    • Nasadit několik master uzlů (minimálně tři) pro komponentu kube-apiserver, které běží za load balancerem. To zajišťuje dostupnost API serveru i při selhání jednoho z master uzlů.
    • Každý master uzel musí mít přístup ke sdílenému úložišti stavu clusteru — etcd.
  2. etcd:

    • Nasadit cluster etcd složený z několika uzlů (doporučuje se lichý počet, minimálně tři), rozložených do různých dostupnostních zón nebo na fyzických serverech. To zaručuje bezpečnost dat o stavu clusteru.
  3. Load Balancer:

    • Použít L4/L7 load balancer pro rozdělení provozu mezi master uzly (kube-apiserver).
    • Použít jiný load balancer pro příchozí provoz k aplikacím v clusteru (například Ingress Controller s podporou odolnosti vůči selhání).
  4. Pracovní uzly (Worker Nodes):

    • Nasadit dostatečný počet pracovních uzlů pro spuštění Podů.
    • Rozložit pracovní uzly do různých dostupnostních zón nebo na fyzické servery, aby byla zajištěna odolnost vůči selhání na úrovni infrastruktury.
    • Nakonfigurovat Pod Disruption Budgets (PDBs) pro určení minimálního počtu dostupných Podů během dobrovolných přerušení (například při aktualizaci uzlů).
  5. Úložiště:

    • Používat distribuované úložiště nebo cloudové úložiště s vlastní odolností vůči selhání pro Persistent Volumes.
    • Příklady: Rook (Ceph), GlusterFS, cloudoví poskytovatelé (AWS EBS, GCP Persistent Disk, Azure Managed Disks) s replikací.
  6. Síť:

    • Používat spolehlivé síťové řešení CNI s podporou odolnosti (například Calico, Cilium s replikovanými komponentami).
    • Zajistit propojení mezi master uzly, uzly etcd a pracovními uzly.
  7. Zálohování:

    • Pravidelně vytvářet zálohy dat etcd.
    • Používat nástroje jako Velero pro zálohování a obnovu stavu clusteru a Persistent Volumes.

Příklad architektury:

graph LR
    subgraph Uživatelé
        A[Uživatel] --> B(Load balancer pro provoz aplikací)
    end

    subgraph Kubernetes Cluster
        subgraph Master uzly
            C1(Master uzel 1)
            C2(Master uzel 2)
            C3(Master uzel 3)
        end

        subgraph Cluster etcd
            D1(etcd 1)
            D2(etcd 2)
            D3(etcd 3)
        end

        subgraph Pracovní uzly
            E1(Pracovní uzel 1)
            E2(Pracovní uzel 2)
            E3(Pracovní uzel 3)
        end

        subgraph Úložiště
            F(Distribuované úložiště)
        end

        subgraph Síť
            G(CNI síť)
        end

        B --> Bal(Load balancer API-serveru)
        Bal --> C1
        Bal --> C2
        Bal --> 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: Spuštění Podů
        G --> E2: Spuštění Podů
        G --> E3: Spuštění Podů

        E1 --> B: Provoz aplikací
        E2 --> B: Provoz aplikací
        E3 --> B: Provoz aplikací
    end

Při nasazení se používají nástroje automatizace jako kubeadm, Kubespray nebo managed Kubernetes služby od cloudových poskytovatelů (EKS, GKE, AKS), které usnadňují tvorbu odolné infrastruktury.