Kubernetes LoadBalancer服务未实现负载平衡请求

时间:2019-09-20 14:25:19

标签: kubernetes load-balancing minikube skaffold

我在minikube集群中运行了一个简单的微服务设置。它的灵感来自this example. 我的设置包括一个简单的router微服务,其中包含golang网络服务器。我现在要测试的是负载多于一个Pod的情况。但是似乎没有任何负载平衡。

微服务的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正确部署了两个Pod。 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窗格。即使使用不同的浏览器,所有请求最终也会位于完全相同的窗格中。

当我删除此Pod时,即使有另一个Pod正在运行,路由器微服务的停机时间也会很小。

此行为可能是什么问题?

1 个答案:

答案 0 :(得分:3)

minikube不正确地支持LoadBalancer服务类型。过去通常只使用NodePort或externalIP服务类型代替,但是官方的hello-minikube示例现在指出:

  

在支持负载平衡器的云提供商上,一个外部IP地址   将被配置为访问服务。在Minikube上,   LoadBalancer类型使服务可以通过迷你kube访问   服务命令

因此,您应该可以有效地将minikube LoadBalancer服务与minikube service router

一起使用

但是,有一种针对 metallb 的裸机Kubernetes集群开发的灵巧解决方案,可以帮助您在minikube上以更好的方式对其进行测试。

您可以在minikube上安装和配置它。例如

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

这里有一些博客文章,其中一些人解释了带有minikube的metallb的设置和使用,以支持LoadBalancer:

Blog Post 1 Blog Post 2

这里是official docs

希望有帮助!