Sobes.tech
Middle+

Jak je implementováno vyvažování zátěže v Kubernetes?

sobes.tech AI

Odpověď od AI

Vyvažování zátěže v Kubernetes je realizováno na několika úrovních:

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

    • Každý Pod ve službě získává jedinečnou IP adresu.
    • Kube-proxy, který běží na každém uzlu, sleduje změny ve službě a EndpointSlice.
    • Nastavuje pravidla přesměrování provozu (iptables, ipvs) na clusterovou IP adresu služby.
    • Provoz směřující na clusterovou IP adresu služby je rozdělen mezi Pods této služby podle vybraného algoritmu (výchozí Round Robin).
    • Existují dva režimy činnosti Kube-proxy: iptables (standardní, založené na Linux netfilter) a ipvs (výkonnější pro velké clustery, založené na Virtual Server API).
    apiVersion: v1
    kind: Service
    metadata:
      name: my-service
    spec:
      selector:
        app: my-app # Vybere Pods s označením app: my-app
      ports:
        - protocol: TCP
          port: 80 # Port služby
          targetPort: 8080 # Port na Pods
    
  2. Ingress (na úrovni L7):

    • Funguje jako jednotný vstupní bod pro externí vyvažování HTTP/S provozu.
    • Vyžaduje kontrolér Ingress (například Nginx Ingress Controller) pro implementaci pravidel.
    • Směřuje provoz na konkrétní službu uvnitř clusteru na základě cesty URL, názvu hostitele a dalších pravidel L7.
    • Umožňuje implementovat různé strategie vyvažování, ukončení SSL, virtuální hosting podle názvu.
    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 # Směřuje provoz na tuto službu
                port:
                  number: 80
    
  3. LoadBalancer Service (na úrovni poskytovatele cloudových služeb):

    • Při vytvoření služby typu LoadBalancer Kubernetes komunikuje s API cloudového poskytovatele (AWS, GCP, Azure atd.).
    • Poskytovatel vytvoří externí vyvažovač zátěže, který směřuje provoz na uzly clusteru.
    • Poté Kube-proxy přesměruje provoz na Pods uvnitř clusteru.
    • Tento typ služby zajišťuje externí přístup a vyvažování zátěže na úrovni L4 (TCP/UDP) nebo L7 (HTTP/S) v závislosti na poskytovateli.
    apiVersion: v1
    kind: Service
    metadata:
      name: my-external-service
    spec:
      selector:
        app: my-app
      ports:
        - protocol: TCP
          port: 80
          targetPort: 8080
      type: LoadBalancer # Vytvoří externí vyvažovač zátěže
    
  4. Vlastní Load Balancers (například HAProxy, Nginx jako Pod):

    • Lze nasadit load balancer uvnitř clusteru jako Deployment a Service (ClusterIP nebo NodePort).
    • Nastavit externí provoz na tento Service.
    • Load balancer bude sám rozdělovat provoz mezi další Pod.

Tímto způsobem Kubernetes nabízí vícestupňový přístup k vyvažování zátěže, kombinující vestavěné mechanismy (Service, Kube-proxy) s externími řešeními (Ingress, cloudové Load Balancers) a možností nasadit vlastní load balancery.