我有一个ClusterIP服务,用于在内部将负载分发到2个PODs。负载在PODs上的分布不均匀。
如何使负载均匀分布?
发布于 2020-01-06 18:32:22
用户空间代理模式的kube-proxy通过轮询的方式选择后端pod。
iptables模式的kube-proxy会随机选择后端pod。
发布于 2020-01-08 22:09:40
Kubernetes使用iptables在pod之间分配负载(默认为iptables proxy mode)。
如果您有2个pods,则以0.5 (50%)的概率均匀分布。因为没有使用轮询,所以后端pod是随机选择的。它甚至会在更长的时间范围内。
如果有3个pods,概率将变为1/3 (33%),对于4个pods将变为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创建的集群上的supported。
https://stackoverflow.com/questions/59609914
复制相似问题