Sobes.tech
Middle+

Ako je implementované vyvažovanie záťaže v Kubernetes?

sobes.tech AI

Odpoveď od AI

Vyvažovanie záťaže v Kubernetes sa realizuje na viacerých úrovniach:

  1. Služba (na úrovni Kube-proxy):

    • Každý Pod v službe dostáva jedinečnú IP adresu.
    • Kube-proxy, ktorý beží na každom uzle, sleduje zmeny v službe a EndpointSlice.
    • Nastavuje pravidlá na presmerovanie prevádzky (iptables, ipvs) na clusterovú IP adresu služby.
    • Prevádzka smerujúca na clusterovú IP adresu služby sa rovnomerne rozdeľuje medzi Podmi tejto služby podľa vybraného algoritmu (predvolene Round Robin).
    • Existujú dva režimy činnosti Kube-proxy: iptables (štandardný, založený na Linux netfilter) a ipvs (efektívnejší pre veľké clustre, založený na Virtual Server API).
    apiVersion: v1
    kind: Service
    metadata:
      name: my-service
    spec:
      selector:
        app: my-app # Vyberá Pod-ov s označením app: my-app
      ports:
        - protocol: TCP
          port: 80 # Port služby
          targetPort: 8080 # Port na Pod-och
    
  2. Ingress (na úrovni L7):

    • Funguje ako jednotný vstupný bod pre externé vyvažovanie HTTP/S prevádzky.
    • Vyžaduje kontrolér Ingress (napríklad Nginx Ingress Controller) na implementáciu pravidiel.
    • Smeruje prevádzku na konkrétnu službu v rámci klastera na základe cesty URL, názvu hostiteľa a ďalších pravidiel L7.
    • Umožňuje implementovať rôzne stratégie vyvažovania, SSL termináciu, virtuálny hosting podľa mena.
    apiVersion: networking.k8s.io/v1
    kind: Ingress
    metadata:
      name: my-ingress
    spec:
      rules:
      - host: myapp.example.com
        http:
          paths:
          - path: /
            pathType: Prefix
            backend:
              service:
                name: my-service # Smeruje prevádzku na tento Service
                port:
                  number: 80
    
  3. LoadBalancer Service (na úrovni Cloud Provider):

    • Pri vytvorení Service s typom LoadBalancer Kubernetes komunikuje s API cloudového poskytovateľa (AWS, GCP, Azure atď.).
    • Poskytovateľ vytvorí externý vyvažovač záťaže, ktorý smeruje prevádzku na uzly klastera.
    • Následne Kube-proxy presmeruje prevádzku na Pod-ov v rámci klastera.
    • Tento typ Service zabezpečuje externý prístup a vyvažovanie na úrovni L4 (TCP/UDP) alebo L7 (HTTP/S) v závislosti od poskytovateľa.
    apiVersion: v1
    kind: Service
    metadata:
      name: my-external-service
    spec:
      selector:
        app: my-app
      ports:
        - protocol: TCP
          port: 80
          targetPort: 8080
      type: LoadBalancer # Vytvára externý vyvažovač
    
  4. Vlastné Load Balancers (napríklad HAProxy, Nginx ako Pod):

    • Môže byť nasadený vyvažovač záťaže v rámci klastera ako Deployment a Service (ClusterIP alebo NodePort).
    • Nastaví sa externý prístup na tento Service.
    • Vyvažovač bude sám rozdeľovať prevádzku medzi ďalšie Pod-ové.

Týmto spôsobom Kubernetes ponúka viacvrstvový prístup k vyvažovaniu záťaže, kombinujúc zabudované mechanizmy (Service, Kube-proxy) s externými riešeniami (Ingress, Cloud Provider Load Balancers) a možnosťou nasadiť vlastné vyvažovače.