Sobes.tech
Middle+

Kubernetesте жүктү теңдөө кандай ишке ашырылат?

sobes.tech AI

AIден жооп

Kubernetes'te yük balanslaması birden çox səviyyədə həyata keçirilir:

  1. Xidmət (Kube-proxy səviyyəsində):

    • Hər Pod Xidmət daxilində unikal IP ünvan alır.
    • Hər bir nodda işləyən Kube-proxy, Xidmət və EndpointSlice-dəki dəyişiklikləri izləyir.
    • Trafiki yönləndirmə qaydalarını (iptables, ipvs) Xidmətin klaster IP ünvanına qurur.
    • Bu klaster IP-ə gələn trafik, seçilmiş algoritm (əvvəlcədən Round Robin) ilə Podlar arasında paylanır.
    • Kube-proxy-nin iki işləmə rejimi var: iptables (standart, Linux netfilter əsasında) və ipvs (daha səmərəli böyük klasterlər üçün, Virtual Server API əsasında).
    apiVersion: v1
    kind: Service
    metadata:
      name: my-service
    spec:
      selector:
        app: my-app # Podları seçir, etiketlə app: my-app
      ports:
        - protocol: TCP
          port: 80 # Xidmət portu
          targetPort: 8080 # Pod portu
    
  2. Ingress (L7 səviyyəsində):

    • Xarici HTTP/S trafik üçün vahid giriş nöqtəsi kimi fəaliyyət göstərir.
    • Qaydaların həyata keçirilməsi üçün Ingress kontrolörü (məsələn, Nginx Ingress Controller) tələb olunur.
    • URL yoluna, host adına və digər L7 qaydalarına əsasən trafik yönləndirir.
    • Müxtəlif balanslama strategiyaları, SSL terminasiya, ad əsasında virtual hosting həyata keçirməyə imkan verir.
    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 # Bu Xidmətə trafik yönləndirir
                port:
                  number: 80
    
  3. LoadBalancer Service (Cloud provayder səviyyəsində):

    • LoadBalancer tipli Service yaradıldıqda, Kubernetes cloud provayder API-si ilə əlaqə qurur (AWS, GCP, Azure və s.).
    • Provayder xarici yük balanslayıcı yaradır və trafiki klasterin nodlarına yönəldir.
    • Sonra, Kube-proxy trafiki Podlara yönəldir.
    • Bu tip Service xarici giriş və L4 (TCP/UDP) və ya L7 (HTTP/S) səviyyəsində balanslaşdırma təmin edir, provayderə görə dəyişir.
    apiVersion: v1
    kind: Service
    metadata:
      name: my-external-service
    spec:
      selector:
        app: my-app
      ports:
        - protocol: TCP
          port: 80
          targetPort: 8080
      type: LoadBalancer # Xarici balanslayıcı yaradır
    
  4. Fərdi Load Balancers (məsələn, HAProxy, Nginx Pod kimi):

    • Klaster daxilində Deployment və Service (ClusterIP və ya NodePort) kimi yerləşdirilə bilər.
    • Xarici trafik bu Service-ə yönəldilir.
    • Balanslayıcı özbaşına trafiki digər Podlar arasında paylayır.

Beləliklə, Kubernetes çoxsəviyyəli yük balanslaşdırma yanaşması təklif edir, daxili mexanizmləri (Service, Kube-proxy) xarici həllərlə (Ingress, Cloud Provider Load Balancers) və özəl balanslayıcıların yerləşdirilməsi imkanları ilə birləşdirir.