2

我现在正在为我的硕士论文使用 K8s。为此,我在 KindD 的帮助下启动了一个 K8s 集群。我还开发了一个小型烧瓶 REST API,它将回显 ENV var。现在我正在启动 3 个服务,它们拥有许多烧瓶应用程序的 pod,它们正在互相调用。为了更好地理解,我有一个 hello svc、一个世界服务和一个 world2 svc。到目前为止,一切都很好。我已经成功部署了它们,现在我想端口转发 hello svc。

kubectl --namespace test port-forward svc/hello 30000

这工作正常,但是一旦我启动我的 JMeter 应用程序来测试负载平衡功能,就会发生一些奇怪的事情。正如您在 grafana 仪表板中看到的那样,其他服务正在愉快地对流量进行负载平衡,但是端口转发的 svc 将其所有流量发送到一个 hello pod。

这是我的部署: deployment.yml

我错过了什么吗?还是我错误地部署了我的应用程序?

提前致谢!

在此处输入图像描述

4

2 回答 2

4

端口转发仅允许出于方便目的使用服务。在幕后直接连接到单个 pod。如果此 pod 死亡,连接将被断开。端口转发中没有负载平衡。选择了服务选择的一个 pod,并且在端口转发命令的整个生命周期内所有流量都在那里转发。如果您需要通过 JMeter 测试负载平衡,我建议使用NodePort类型的服务在 Kubernetes 集群之外。

于 2020-03-08T17:49:23.760 回答
1

对于所有感兴趣的人,我找到了一个更接近生产的解决方法。

首先我安装了 MetalLB https://mauilion.dev/posts/kind-metallb /

使用此 LoadBalancer,我声明了一个与我的节点之一相同的 IP 范围。我公开的服务也收到了type: LoadBalancer这个 grafana 现在显示请求的平均分布。

于 2020-03-10T10:44:20.197 回答