Sobes.tech
Middle+

Kaip įgyvendinama apkrovos paskirstymas Kubernetes?

sobes.tech AI

Atsakymas iš AI

Kubernetes apkrova apkrovos paskirstymas įgyvendinamas keliuose lygiuose:

  1. Paslauga (Kube-proxy lygyje):

    • Kiekvienas Pod gauna unikalų IP adresą.
    • Kube-proxy, veikiantis kiekviename mazge, stebi paslaugos ir EndpointSlice pokyčius.
    • Nustato taisykles srautui peradresuoti (iptables, ipvs) į klasterio IP adresą.
    • Srautas, pasiekiantis klasterio IP adresą, paskirstomas tarp šios paslaugos Podų pagal pasirinktą algoritmą (numatyta Round Robin).
    • Yra du Kube-proxy veikimo režimai: iptables (standartinis, Linux netfilter pagrindu) ir ipvs (efektyvesnis dideliems klasteriams, Virtual Server API pagrindu).
    apiVersion: v1
    kind: Service
    metadata:
      name: my-service
    spec:
      selector:
        app: my-app # Pasirinkti Podus su žyme app: my-app
      ports:
        - protocol: TCP
          port: 80 # Paslaugos prievadas
          targetPort: 8080 # Podų prievadas
    
  2. Ingress (L7 lygyje):

    • Veikia kaip vieninga įėjimo taškas išorinei HTTP/S srautui paskirstyti.
    • Reikalingas Ingress kontroleris (pvz., Nginx Ingress Controller) taisyklių įgyvendinimui.
    • Nukreipia srautą į konkretų paslaugą klasteryje pagal URL kelią, hosto vardą ir kitus L7 taisykles.
    • Leidžia įgyvendinti įvairias paskirstymo strategijas, SSL terminaciją, virtualų hostinimą pagal vardą.
    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 # Nukreipia srautą į šį paslaugą
                port:
                  number: 80
    
  3. LoadBalancer Service (Cloud teikėjo lygyje):

    • Sukūrus LoadBalancer tipą paslaugą, Kubernetes sąveikauja su debesų teikėjo API (AWS, GCP, Azure ir kt.).
    • Teikėjas sukuria išorinį apkrovos paskirstytoją, kuris nukreipia srautą į klasterio mazgus.
    • Tada Kube-proxy nukreipia srautą į Podus klasteryje.
    • Šis paslaugos tipas užtikrina išorinį prieigą ir paskirstymą L4 (TCP/UDP) arba L7 (HTTP/S) lygiu, priklausomai nuo teikėjo.
    apiVersion: v1
    kind: Service
    metadata:
      name: my-external-service
    spec:
      selector:
        app: my-app
      ports:
        - protocol: TCP
          port: 80
          targetPort: 8080
      type: LoadBalancer # Sukuria išorinį apkrovos paskirstytoją
    
  4. Individualūs apkrovos paskirstytojai (pvz., HAProxy, Nginx kaip Pod):

    • Gali būti įdiegti kaip Deployment ir Service (ClusterIP arba NodePort) viduje klasterio.
    • Nustato išorinį srautą į šį Service.
    • Apkrovos paskirstytojas savarankiškai paskirsto srautą tarp kitų Podų.

Taip Kubernetes siūlo daugiasluoksį požiūrį į apkrovos paskirstymą, derindamas įmontuotus mechanizmus (Service, Kube-proxy) su išoriniais sprendimais (Ingress, Cloud Provider Load Balancers) ir galimybe įdiegti savo apkrovos paskirstytojus.