Middle+
Kubernetesте жүктү теңдөө кандай ишке ашырылат?
sobes.tech AI
AIден жооп
Kubernetes'te yük balanslaması birden çox səviyyədə həyata keçirilir:
-
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 -
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 -
LoadBalancer Service (Cloud provayder səviyyəsində):
LoadBalancertipli 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 -
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.