Сервис Kubernetes LoadBalancer не выполняет запросы балансировки нагрузки - PullRequest
0 голосов
/ 20 сентября 2019

У меня есть простая настройка микросервиса, работающая в кластере мини-кубов.Он вдохновлен этим примером. Моя установка включает в себя простой router микросервис, который содержит веб-сервер golang.Теперь я хочу проверить балансировку нагрузки при наличии более одного модуля.Но, похоже, балансировка нагрузки отсутствует.

Файл kubernetes для микросервисов выглядит следующим образом:

apiVersion: extensions/v1beta1
kind: Deployment
metadata:
  name: router
  labels:
    app: router
    tier: router
spec:
  replicas: 2
  strategy: {}
  template:
    metadata:
      labels:
        app: router
        tier: router
    spec:
      containers:
      - image: {myregistry}/router
        name: router
        resources: {}
        ports:
          - name: target-port
            containerPort: 8082
        env:
          - name: PORT
            value: "8082"
status: {}
---
apiVersion: v1
kind: Service
metadata:
  name: router
  labels:
    app: router
    tier: router
spec:
  type: LoadBalancer
  selector:
    app: router
    tier: router
  ports:
  - port: 8082
    name: http
    targetPort: target-port

Конфигурация skaffold выглядит следующим образом:

apiVersion: skaffold/v1beta2
kind: Config
build:
  artifacts:
  - image: {myregistry}/router
    context: src/router/bin
  tagPolicy:
    gitCommit: {}
  local:
    push: false
deploy:
  kubectl:
    manifests:
    - ./kubernetes/**.yaml

Kubernetes правильно развертывает две капсулы.Вывод kubectl get pods выглядит следующим образом:

NAME                           READY   STATUS    RESTARTS   AGE
router-7f75f6f9df-c8mgp        1/1     Running   0          14m
router-7f75f6f9df-k248m        1/1     Running   0          14m

Из вывода журнала skaffold dev я вижу, что каждый запрос направляется в модуль router-7f75f6f9df-c8mgp.Даже в разных браузерах все запросы заканчиваются на одном и том же модуле.

Когда я удаляю этот модуль, у микросервиса маршрутизатора даже происходит небольшое время простоя, даже если работает другой модуль.

В чем может быть проблема этого поведения?

1 Ответ

3 голосов
/ 21 сентября 2019

minikube не «правильно» поддерживает тип сервиса LoadBalancer.Раньше было обычным делом просто использовать вместо этого тип службы NodePort или externalIP, однако официальный пример hello-minikube теперь гласит:

На облачных провайдерах, которые поддерживают балансировщики нагрузки,внешний IP-адрес будет предоставлен для доступа к Сервису.В Minikube тип LoadBalancer делает Службу доступной с помощью команды службы minikube

Таким образом, вы должны иметь возможность использовать службу Minikube LoadBalancer с: minikube service router

Однако естьаккуратное решение, разработанное для кластеров чистых металлических кубернетов под названием metallb , которое может помочь вам лучше проверить это на мини-кубе.

Вы можете установить и настроить его на мини-кубе,Например,

kubectl apply -f https://raw.githubusercontent.com/google/metallb/v0.8.1/manifests/metallb.yaml

Вот некоторые сообщения в блоге, где другие объясняют настройку и использование metallb с minikube для поддержки LoadBalancer:

Запись блога 1 Сообщение в блоге 2

Вот официальные документы .

Надеюсь, что поможет!

...