Linkerd загружает службы gRPC неожиданным образом - PullRequest
0 голосов
/ 21 декабря 2018

Я пытаюсь решить проблему с балансировкой нагрузки gRPC с помощью linkerd, но запросы будут распределяться равномерно, только если все службы развернуты на одном узле.Если я разверну серверы на другом узле, все запросы будут направлены на один из них.

https://imgur.com/a/F2GcbuY

И служба gRPC, и клиент являются приложением .Net.Kubernetes версия v1.12.3.Версия Linkerd стабильная - 2.1.0.

Вот конфигурация моей службы gRPC:

apiVersion: extensions/v1beta1
kind: Deployment
metadata:
  labels:
    app: demogrpc-deploy
  name: demogrpc
spec:
  replicas: 3
  selector:
    matchLabels:
      app: demogrpc
  template:
    metadata:
      labels:
        app: demogrpc
    spec:
      affinity:
        podAntiAffinity:
          requiredDuringSchedulingIgnoredDuringExecution:
          - topologyKey: kubernetes.io/hostname
            labelSelector:
              matchLabels:
                app: demogrpc
      tolerations:
      - key: node-role.kubernetes.io/master
        operator: Exists
        effect: NoSchedule
      containers:
      - image: 192.168.99.25:30000/demogrpchost:1.0.9
        imagePullPolicy: Always
        name: demogrpc
        env:
        - name: GRPC_HOST
          value: "127.0.0.1"
        - name: SERVICE_NAME
          valueFrom:
            fieldRef:
              fieldPath: metadata.name
        - name: GRPC_PORT
          value: "8000"
        ports:
        - containerPort: 8000
          name: grpc
      imagePullSecrets:
      - name: kubernetes-registry
---
apiVersion: v1
kind: Service
metadata:
  labels:
    app: demogrpc
  name: demogrpc
spec:
  clusterIP: None
  ports:
  - port: 8000
    targetPort: 8000
  selector:
    app: demogrpc

Как настроить балансировку нагрузки при развертывании служб на разных узлах?


Обновление:

Я ввел linkerd в мой клиент, и он начал распределять запросы сейчас, но одна из служб все еще игнорируется балансировщиком нагрузки.


Обновление:

Я увеличил количество сервисов до 5, а клиентов - 3, и произошло нечто интересное.Все сервисы получают запросы сейчас, но для каждого клиента их запросы распределяются по 4 сервисам.

https://imgur.com/dXdjTsR

1 Ответ

0 голосов
/ 23 декабря 2018

Для настройки Linkerd сервисной сетки каждый узел будет иметь Linkerd.Не будет service-to-service прямой связи между узлами, только Linkerd может общаться с другим Linkerd.И Linkerd будет связываться со службами, которые созданы в том же узле.

В вашем случае, ваша служба Kubernetes будет общаться с Linkerd , затем Linkerd распространит свой запрос среди всех других Linkerd.Вот как запросы распределяются по узлам.Затем восходящий Linkerd будет распределять запросы между службами на своем узле.

enter image description here

Чтобы получить больше, проверьте это: linkerd-as-a-сервис-сетка

...