Sobes.tech
Middle+

Kā tiek īstenota slodzes balansēšana Kubernetes?

sobes.tech AI

Atbilde no AI

Kubernetes slodzes līdzsvarošana tiek īstenota vairākos līmeņos:

  1. Service (Kube-proxy līmenī):

    • Katram Pod ir unikāla IP adrese.
    • Kube-proxy, kas darbojas katrā mezglā, seko līdzi izmaiņām Service un EndpointSlice.
    • Iestata trafika novirzīšanas noteikumus (iptables, ipvs) uz klastera IP adresi Service.
    • Trafiks, kas ienāk klastera IP Service, tiek sadalīts starp šī Service Pod'iem pēc izvēlētās algoritma (pēc noklusējuma Round Robin).
    • Ir pieejami divi Kube-proxy darba režīmi: iptables (standarta, balstīts uz Linux netfilter) un ipvs (vairāk veiktspējīgs lielākiem klasteriem, balstīts uz Virtual Server API).
    apiVersion: v1
    kind: Service
    metadata:
      name: my-service
    spec:
      selector:
        app: my-app # Izvēlas Pod'us ar marķējumu app: my-app
      ports:
        - protocol: TCP
          port: 80 # Porta Service
          targetPort: 8080 # Porta Pod'os
    
  2. Ingress (L7 līmenī):

    • Darbojas kā vienota ieejas punkts ārējai HTTP/S trafika līdzsvarošanai.
    • Nepieciešams Ingress kontrolieris (piemēram, Nginx Ingress Controller) noteikumu īstenošanai.
    • Novirza trafiku uz konkrētu Service klasterī, pamatojoties uz URL ceļu, hosta nosaukumu un citiem L7 noteikumiem.
    • Ļauj īstenot dažādas līdzsvarošanas stratēģijas, SSL termināciju, Name-based virtual hosting.
    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 # Novirza trafiku uz šo Service
                port:
                  number: 80
    
  3. LoadBalancer Service (mākonī pakalpojuma līmenī):

    • Izveidojot Service ar tipu LoadBalancer, Kubernetes sadarbojas ar mākonī pakalpojuma API (AWS, GCP, Azure utt.).
    • Pakalpojuma nodrošinātājs izveido ārēju slodzes balansētāju, kas novirza trafiku uz klastera mezgliem.
    • Tad Kube-proxy novirza trafiku uz Pod'iem klasterī.
    • Šis Service tips nodrošina ārēju piekļuvi un līdzsvarošanu L4 (TCP/UDP) vai L7 (HTTP/S) līmenī, atkarībā no pakalpojuma sniedzēja.
    apiVersion: v1
    kind: Service
    metadata:
      name: my-external-service
    spec:
      selector:
        app: my-app
      ports:
        - protocol: TCP
          port: 80
          targetPort: 8080
      type: LoadBalancer # Izveido ārēju slodzes balansētāju
    
  4. Pielāgoti slodzes balansētāji (piemēram, HAProxy, Nginx kā Pod):

    • Var izvietot slodzes balansētāju klasterī kā Deployment un Service (ClusterIP vai NodePort).
    • Konfigurēt ārējo trafiku uz šo Service.
    • Balansētājs pats sadalīs trafiku starp citām Pod'iem.

Tādējādi Kubernetes piedāvā daudzlīmeņu pieeju slodzes līdzsvarošanai, apvienojot iebūvētos mehānismus (Service, Kube-proxy) ar ārējiem risinājumiem (Ingress, mākonī pakalpojumu slodzes balansētāji) un iespēju izvietot pielāgotus balansētājus.