Sobes.tech
Middle+

Ինչպես է իրականացվում բեռի հավասարակշռությունը Kubernetes-ում?

sobes.tech AI

Պատասխան AI-ից

Կուբերնետեսում բեռի հավասարակշռումը իրականացվում է մի քանի մակարդակներում:

  1. Ծառայություն (Kube-proxy մակարդակում):

    • Յուրաքանչյուր Pod ստանում է յուրահատուկ IP հասցե:
    • Kube-proxy, որը աշխատում է յուրաքանչյուր հանգույց, հետևում է ծառայության և EndpointSlice փոփոխություններին:
    • Կարգավորում է երթևեկության ուղղման կանոններ (iptables, ipvs) ծառայության կլաստերային IP հասցեին:
    • Երթևեկությունը, որը հասնում է ծառայության կլաստերային IP-ին, հավասարաչափ բաշխվում է այդ ծառայության Pods միջև ընտրված ալգորիթմով (դեպքում՝ Round Robin):
    • Kube-proxy-ի երկու ռեժիմ կա՝ iptables (ստանդարտ, Linux netfilter-ի վրա հիմնված) և ipvs (ավելի արդյունավետ մեծ կլաստերների համար, Virtual Server API-ի վրա հիմնված):
    apiVersion: v1
    kind: Service
    metadata:
      name: my-service
    spec:
      selector:
        app: my-app # Ընտրում է Pods, որոնք նշված են app: my-app
      ports:
        - protocol: TCP
          port: 80 # Ծառայության պորտը
          targetPort: 8080 # Pod-երի պորտը
    
  2. Ingress (L7 մակարդակում):

    • Գործում է որպես միակ մուտքի կետ՝ արտաքին HTTP/S երթևեկության բալանսավորման համար:
    • Պահանջվում է Ingress վերահսկիչ (օրինակ՝ Nginx Ingress Controller)՝ կանոնների իրականացման համար:
    • Հետևում է երթևեկությունը URL ուղու, հոստի անունի և այլ L7 կանոնների հիման վրա՝ ուղղորդելով այն կոնկրետ ծառայության:
    • Позволяет реализовать различные стратегии балансировки, SSL termination, 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 # Ուղղորդում է երթևեկությունը այս ծառայությանը
                port:
                  number: 80
    
  3. LoadBalancer Service (Cloud Provider մակարդակում):

    • Երբ ստեղծվում է LoadBalancer տիպի ծառայություն, Kubernetes-ը հաղորդակցվում է ամպային պրովայդերի API-ի հետ (AWS, GCP, Azure և այլն):
    • Պրովայդերը ստեղծում է արտաքին բալանսավորիչ, որը ուղղորդում է երթևեկությունը կլաստերի հանգույցների վրա:
    • Այնուհետև Kube-proxy-ն ուղղորդում է երթևեկությունը Pods-ների վրա:
    • Այս տիպի ծառայությունը ապահովում է արտաքին մուտք և բալանսավորում L4 (TCP/UDP) կամ L7 (HTTP/S) մակարդակներում՝ պրովայդերի վրա հիմնված:
    apiVersion: v1
    kind: Service
    metadata:
      name: my-external-service
    spec:
      selector:
        app: my-app
      ports:
        - protocol: TCP
          port: 80
          targetPort: 8080
      type: LoadBalancer # Ստեղծում է արտաքին բալանսավորիչ
    
  4. Հարմարեցված Load Balancers (օրինակ՝ HAProxy, Nginx Pod-եր):

    • Կարող է տեղակայել բալանսավորիչ ներսում՝ որպես Deployment և Service (ClusterIP կամ NodePort):
    • Կարգավորում է արտաքին երթևեկությունը այս Service-ի վրա:
    • Բալանսավորիչը ինքնուրույն կբաշխի երթևեկությունը մյուս Pod-երի միջև:

Այսպիսով, Kubernetes-ն առաջարկում է բազմաշերտ մոտեցում բեռի հավասարակշռմանը՝ համատեղելով ներքին մեխանիզմներ (Service, Kube-proxy) արտաքին լուծումների (Ingress, Cloud Provider Load Balancers) և սեփական բալանսավորիչների տեղակայման հնարավորությունը։