负载与 Kubernetes 服务不平衡

Load is not balanced with Kubernetes Services

我使用以下 yaml 创建了两个 nginx 副本:

apiVersion: apps/v1
kind: Deployment
metadata:
  name: nginx-deployment
spec:
  replicas: 2
  selector:
    matchLabels:
      app: nginx
  template:
    metadata:
      name: nginx
      labels:
        app: nginx
    spec:
      containers:
        - name: nginx
          image: nginx:1.20-alpine
          ports:
            - containerPort: 80

我创建了服务:

apiVersion: v1
kind: Service
metadata:
  name: nginx-test-service
spec:
  selector:
    app: nginx
  ports:
    - port: 8082
      targetPort: 80

一切看起来都很好。但是当我这样做时

minikube service nginx-test-service

我可以访问nginx。但是当我看到两个 pods 日志时,请求总是转到单个 pod。另一个 pod 没有收到任何请求。

但是,kubernetes 服务应该做负载均衡吗?

我错过了什么吗?

一种实现本地负载平衡的方法 运行ning 是使用 ip 虚拟服务。 (ipvs)。它是一项将下一个 pod 的 ip 分发给 schedule/call

的服务

它可能已经安装了。

lsmod | grep ip_vs
ip_vs_sh               16384  0
ip_vs_wrr              16384  0
ip_vs_rr               16384  19

正确设置你的 cni 并且 运行

kubectl edit cm -n kube-system kube-proxy

编辑 ipvs 部分

将模式设置为 ipvs

模式:“ipvs”

和 ipvs 部分

ipvs:
      excludeCIDRs: null
      minSyncPeriod: 0s
      scheduler: "rr"

与往常一样,k8s 有很多变量相互咬合,但 ipvs 是可能的。

https://kubernetes.io/blog/2018/07/09/ipvs-based-in-cluster-load-balancing-deep-dive/