0

我有一个 ClusterIP 服务,用于在内部将负载分配到 2 个 POD。负载在 POD 中分布不均。

如何使负载分布均匀?

4

2 回答 2

0

Kubernetes 使用 iptables 在 pod 之间分配负载(默认为iptables 代理模式)。

如果您有 2 个 pod,则它以 0.5 (50%) 的概率均匀分布。因为它不使用循环,所以后端 pod 是随机选择的。它甚至会在更长的时间范围内。

如果有 3 个 pod,概率将变为 1/3 (33%),对于 4 个 pod,概率将变为 1/4,依此类推。

要检查它,您可以运行sudo iptables-save.

2 个 pod 的示例输出(用于 nginx 服务):

sudo iptables-save | grep nginx

-A KUBE-NODEPORTS -p tcp -m comment --comment "default/nginx:" -m tcp --dport 31554 -j KUBE-SVC-4N57TFCL4MD7ZTDA    //KUBE-SVC-4N57TFCL4MD7ZTDA is a tag for nginx service

sudo iptables-save | grep KUBE-SVC-4N57TFCL4MD7ZTDA
-A KUBE-SVC-4N57TFCL4MD7ZTDA -m statistic --mode random --probability 0.50000000000 -j KUBE-SEP-SOWYYRHSSTWLCRDY

如果您想使用循环算法确保负载均匀分布,您可以使用IPVS,默认情况下使用 rr(循环)。它在集群前充当负载平衡器,将基​​于 TCP 和 UDP 的服务的请求定向到真实服务器,并使真实服务器的服务在单个 IP 地址上显示为虚拟服务。它在由 local-up、kubeadm 和 GCE 创建的集群上支持。

于 2020-01-08T14:09:40.363 回答
0

用户空间代理模式中的 kube-proxy 通过循环方式选择后端 pod。

iptables 模式下的 kube-proxy 随机选择后端 pod。

于 2020-01-06T10:32:21.980 回答