我正在尝试使用 linkerd 解决 gRPC 负载平衡问题,但只有当所有服务都部署在同一节点上时,请求才会均匀分布。如果我在不同的节点上部署服务器,所有请求都将被定向到其中一个。
gRPC 服务和客户端都是 .Net 应用程序。Kubernetes 版本为 v1.12.3。Linkerd 版本是 stable-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 个服务。