0

我正在尝试在 k8s 集群上使用 linkerd 实现 gRPC 消息的负载平衡。

k8s 集群是使用 microk8s 设置的。k8s 是 1.23.3 版本,linkerd 是 stable-2.11.1 版本。

我有一个服务器和一个客户端应用程序,都是 c# 代码。客户端通过流发送 100 条消息,服务器以消息响应。服务器位于复制 3 次的部署中。

在部署旁边有一个 NodePort 服务,因此客户端可以访问服务器。

部署.yaml 文件

apiVersion: apps/v1
kind: Deployment
metadata:
  name: greeter
  labels:
    app: greeter
spec:
  replicas: 3
  selector:
    matchLabels:
      app: greeter
  template:
    metadata:
      labels:
        app: greeter
    spec:
      containers:
        - name: greeter
          image: grpc-service-image
          imagePullPolicy: "Always"
          ports:
            - containerPort: 80
          resources:
            limits:
              cpu: "0.5"
---
apiVersion: v1
kind: Service
metadata:
  name: greeter
  labels:
    app: greeter
spec:
  type: NodePort
  ports:
  - port: 80
    targetPort: 80
    nodePort: 31111
    protocol: TCP
  selector:
    app: greeter

为了启动服务器部署,我使用命令确保将 linkerd 注入到部署中: cat deployment.yaml | linkerd inject - | kubectl apply -f -

此设置能够在客户端和服务之间进行通信。但是通信总是到同一个 pod。

所以我的问题:

  • 我在某处读到负载平衡是在客户端完成的,这是真的吗?这是否意味着我需要添加入口才能使负载平衡正常工作?或者负载平衡如何与 linkerd 和 gRPC 一起工作?
  • 负载平衡是否适用于 NodePort 设置,或者这不是必需的?
  • 关于如何解决这个问题的任何建议?
4

0 回答 0