我有一个 ClusterIP 服务,用于在内部将负载分配到 2 个 POD。负载在 POD 中分布不均。
如何使负载分布均匀?
我有一个 ClusterIP 服务,用于在内部将负载分配到 2 个 POD。负载在 POD 中分布不均。
如何使负载分布均匀?
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 创建的集群上支持。
用户空间代理模式中的 kube-proxy 通过循环方式选择后端 pod。
iptables 模式下的 kube-proxy 随机选择后端 pod。