我在尝试kubernetes集群时遇到了可伸缩性问题。为了简化测试机器中的拓扑,NodePort类型用于在外部公开单个服务。承载节点和主机的裸机是RHEL 7,具有24个CPU和32G RAM;我还没有专用的负载均衡器,或者像基础设施这样的云提供商。服务定义的片段如下所示
"spec": {
"ports": [{
"port": 10443,
"targetPort": 10443,
"protocol": "TCP",
"nodePort": 30443
} ],
"type": "NodePort",
通过这种方式,可以通过https://[node_machine]:30443/[a_service]
此类服务仅由一个Pod支持。理想情况下,我希望在同一节点上部署多个服务(但使用不同的NodePort),并同时运行。
事情进展顺利,直到很明显,对于类似的工作负载,增加部署的服务数量(因此也增加了后端pod)会使应用程序的性能下降。令人惊讶的是,在分解服务加载时间时,我注意到“连接时间”出现了急剧下降,这似乎表明“网络”层中某处出现了减速。请注意,负载不足以驱动节点上的大部分CPU。我在文档中读到了shortcomings,但不确定我所遇到的是否正是那里描述的kube-proxy / Service的限制。
问题是:
是否有任何关于如何使其更具可扩展性的建议?即能否支持更多服务/ Pod而不会影响应用程序的性能? NodePort类型是为我们的服务设置“公共”地址的最简单方法,但如果所有服务和Pod都以这种方式设置,那么可扩展性或性能是否有任何限制?
如果我们将类型更改为LoadBalancer会有什么不同吗? “type”:“LoadBalancer”
此外,使用专用的LoadBalancer或反向代理来提高可扩展性是有益的,例如: HAProxy或类似的,将流量从外部路由到后端Pod(或服务)?我注意到为Nginx darkgaro / kubernetes-reverseproxy做了一些工作 - 遗憾的是,doc似乎不完整,并且没有具体的例子。在其他一些线程中,人们谈论了Vulcan - 它是推荐的kubernetes LB工具吗?
非常感谢您的推荐和帮助!
答案 0 :(得分:1)
您好kubernetes的新手,但我有类似的问题和疑虑。将尝试回答其中一些内容或将您重定向到用户指南的相关部分。
如果您在非云启用的提供程序(例如vagrant / local等)上部署Kubernetes,那么平台目前不会为您提供或自动执行某些功能。
其中一个是'LoadBalancer'类型的服务。自动提供和分配PUBLIC IP到服务(代理L.B)目前只在Google容器引擎等平台上发生。
官方文件说明
在支持外部负载均衡器的云提供商上,设置 “LoadBalancer”类型字段将为您提供负载均衡器 服务。
目前正在开发和记录替代方案,请参阅here使用HAProxy。
也许在不久的将来,kubernetes最终将支持所有可以部署和运行的可用平台中的这种功能,因此请始终检查其更新的功能。
您所指的性能降级很可能是由于PublicIP(1.0版及更高版本的NodePort)功能正常运行。这意味着通过使用NodePort服务类型,kubernetes会在集群的所有节点上为这种服务分配一个端口。然后kube-proxy拦截对此端口的调用到实际服务等。
可以找到使用HaProxy尝试解决同一问题的示例here。
希望有所帮助。
答案 1 :(得分:0)
我面临同样的问题。内部kube-proxy似乎不是外部负载均衡器。更具体地说,我们想在kube-proxy上设置一些超时或重试等等。
我发现this article描述了类似的问题。他建议在内部使用etd时查看vulcan,这个项目的方向可能是为将来为k8s提供功能齐全的LB.