Докер - Модули K8S Не Сбалансированы По Нагрузке

  • Автор темы SarSosyamousy3
  • Обновлено
  • 22, Oct 2024
  • #1

У меня есть служба, работающая в локальной среде k8s. По сути, это образ nginx, а вызов занимает около 10 секунд.

apiVersion: v1
kind: Service
metadata:

name: revproxy-svc
spec:

selector:

role: app

ports:

- protocol: TCP

port: 80

targetPort: 80

nodePort: 32001

type: LoadBalancer

externalName: my.domain.nl 

---

apiVersion: apps/v1
kind: Deployment
metadata:

name: proxy-deployment 

labels:

role: app
spec:

replicas: 2

selector:

matchLabels:

role: app

template:

metadata:

labels:

role: app

spec: 

containers:

- name: web

image: "10.203.32.90:5000/myproxy"

resources:

requests:

cpu: 500m

env:

- name: NODE_IP

valueFrom:

fieldRef:

fieldPath: status.hostIP

imagePullPolicy: Always

реплик — это две и, конечно же, работают два пода. Но почти если не каждый звонок поступает в один модуль, выстраивая вызовы в очередь. Если звонков много, они просто ждут, пока все будут готовы, ни один из них не переходит в другой модуль.

Что нам нужно настроить для правильной балансировки нагрузки?

SarSosyamousy3


Рег
25 Oct, 2024

Тем
65

Постов
180

Баллов
525
  • 25, Oct 2024
  • #2

Если вы пытаетесь использовать NodePort, то тип вашей службы должен быть NodePort.

kubectl -n kube-system edit cm kube-proxy

scheduler: "rr"
mode: ipvs

Насколько я понимаю, тип LoadBalancer по существу создан для облачных сред, где поставщик облачных услуг предоставляет балансировщик нагрузки. Вы НЕ создаете балансировщик нагрузки, создавая тип службы LoadBalancer. Балансировщик нагрузки — это отдельная вещь. Тип кластера: предполагаемый для внутренней балансировки нагрузки, но мне не удалось надежно обеспечить такое поведение. Возможности встроенного балансировщика нагрузки для работы с типом LoadBalancer локально кажутся невероятно ограниченными. Вы можете использовать стандартный балансировщик нагрузки, например HAProxy, вне среды кластера, с типом NodePort на серверной стороне.

 

Chiefman


Рег
09 Dec, 2020

Тем
70

Постов
216

Баллов
606
  • 25, Oct 2024
  • #3

Внезапно нашел ответ с ipvs.

Все, что нужно было сделать, это перевести kube-proxy в режим ipvs с планировщиком rr (roundrobin).

     nodePort: 32001

type: NodePort      #(not LoadBalancer)

Затем перезапустите kube-proxy, и у нас будет правильная балансировка нагрузки.

 

Andysa


Рег
16 Feb, 2004

Тем
100

Постов
204

Баллов
724
Похожие темы Дата
Тем
403,760
Комментарии
400,028
Опыт
2,418,908

Интересно