我有一个ClusterIP服务,用于在内部将负载分配到2个POD。 负载在POD上分布不均。
如何使负载均匀分布?
答案 0 :(得分:0)
用户空间代理模式下的kube-proxy通过循环方式选择后端容器。
iptables模式下的kube-proxy会随机选择后端pod。
答案 1 :(得分:0)
Kubernetes使用iptables在Pod之间分配负载(默认为iptables proxy mode)。
如果您有2个吊舱,则以0.5(50%)的概率均匀分布。由于未使用轮询,因此后端Pod是随机选择的。甚至在更长的时间内。
如果有3个豆荚,则概率将更改为1/3(33%),对于4个豆荚则为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地址上显示为虚拟服务。它是supported在由local-up,kubeadm和GCE创建的群集上。