AVa*_*arf 5 horizontal-scaling autoscaling kubernetes kubernetes-pod
我在microk8s上建立了一个k8s集群,并将应用程序移植到了它。我还添加了一个水平自动缩放器,它根据cpu负载添加了pod。自动缩放器工作正常,当负载超出目标时,它会添加豆荚;当一段时间后我卸下负载时,它将杀死豆荚。
问题出在自动缩放器正在创建新容器的同一时刻,我注意到一些请求失败:
POST Response Code : 200
POST Response Code : 200
POST Response Code : 200
POST Response Code : 200
POST Response Code : 200
POST Response Code : 502
java.io.IOException: Server returned HTTP response code: 502 for URL: http://10.203.101.61/gateway/compile
POST Response Code : 502
java.io.IOException: Server returned HTTP response code: 502 for URL: http://10.203.101.61/gateway/compile
POST Response Code : 200
POST Response Code : 502
java.io.IOException: Server returned HTTP response code: 502 for URL: http://10.203.101.61/gateway/compile
POST Response Code : 502
java.io.IOException: Server returned HTTP response code: 502 for URL: http://10.203.101.61/gateway/compile
POST Response Code : 200
POST Response Code : 200
POST Response Code : 200
POST Response Code : 200
POST Response Code : 200
POST Response Code : 200
POST Response Code : 200
POST Response Code : 200
Run Code Online (Sandbox Code Playgroud)
我想知道这是什么原因以及如何解决?
更新:我认为最好给我更多有关我的设置的信息:
流量来自群集外部,但是k8s节点和生成请求的程序都在一台机器上,因此没有网络问题。有一个自定义的nginx组件,它不进行负载平衡,只是充当反向代理,并将流量发送到相应的服务。
我进行了另一个测试,该测试为我提供了更多信息。我运行了相同的基准测试,但是这次没有将请求发送到反向代理(nginx),而是使用了该特定服务的IP地址,并且在自动缩放器完成其工作并启动了多个Pod时,我没有失败的请求。我不确定是Nginx还是k8s?
关于你的问题:
不知道是Nginx的问题还是k8s的问题?
根据 ingress-nginx 文档:
NGINX 入口控制器不使用服务将流量路由到 Pod。相反,它使用 Endpoints API 来绕过 kube-proxy,以允许 NGINX 功能,例如会话亲和性和自定义负载平衡算法。它还消除了一些开销,例如 iptables DNAT 的 conntrack 条目
所以我认为问题出在 Nginx 上,它没有利用 Kubernetes 的所有功能(例如 kube-proxy),并且在 Pod 完全准备好之前就向它们发送请求。
但显然这个问题已在 0.23.0(2019 年 2 月)中修复,因此您应该检查您的版本。
就我个人而言,从 Ingress-Nginx 切换到大使后,我遇到的问题较少,默认情况下,大使会将请求转发到服务(因此 Kubernetes 负责负载平衡并将其发送到正确的 Pod)。
| 归档时间: |
|
| 查看次数: |
119 次 |
| 最近记录: |