我在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正在运行,路由器微服务的停机时间也会很小。
此行为可能是什么问题?
答案 0 :(得分:3)
minikube不正确地支持LoadBalancer服务类型。过去通常只使用NodePort或externalIP服务类型代替,但是官方的hello-minikube示例现在指出:
在支持负载平衡器的云提供商上,一个外部IP地址 将被配置为访问服务。在Minikube上, LoadBalancer类型使服务可以通过迷你kube访问 服务命令
因此,您应该可以有效地将minikube LoadBalancer服务与minikube service router
但是,有一种针对
您可以在minikube上安装和配置它。例如
kubectl apply -f https://raw.githubusercontent.com/google/metallb/v0.8.1/manifests/metallb.yaml
这里有一些博客文章,其中一些人解释了带有minikube的metallb的设置和使用,以支持LoadBalancer:
这里是official docs。
希望有帮助!