我在试用 kubernetes 集群时遇到了可扩展性问题。为了简化我的测试机器中的拓扑结构,NodePort 类型用于在外部公开单个服务。托管节点和主节点的裸机是具有 24 个 CPU 和 32G RAM 的 RHEL 7;我还没有专门的负载均衡器,或者像基础设施这样的云提供商。服务定义的片段如下所示
"spec": {
"ports": [{
"port": 10443,
"targetPort": 10443,
"protocol": "TCP",
"nodePort": 30443
} ],
"type": "NodePort",
通过这种方式,应用程序可以通过https://[node_machine]:30443/[a_service]
此类服务仅由一个 Pod 支持。理想情况下,我希望在同一个节点上部署多个服务(但使用不同的 NodePort),并同时运行。
事情一直运行良好,直到很明显对于类似的工作负载,增加部署的服务数量(因此也是后端 pod)会使应用程序的性能下降。令人惊讶的是,在分解服务加载时间时,我注意到“连接时间”显着下降,这似乎表明“网络”层的某个地方出现了减速。请注意,负载还不足以驱动节点上的大部分 CPU。我阅读了文档中的缺点,但不确定我遇到的是否正是那里描述的 kube-proxy/Service 的限制。
问题是:
关于如何使其更具可扩展性有什么建议吗?即能够在不影响应用程序性能的情况下支持更多服务/Pod?NodePort 类型是为我们的服务设置“公共”地址的最简单方法,但如果所有服务和 Pod 都以这种方式设置,是否对可扩展性或性能有任何限制?
如果我们将类型更改为 LoadBalancer 会有什么不同吗?“类型”:“负载平衡器”
此外,使用专用的 LoadBalancer 或反向代理来提高可扩展性(例如 HAProxy 等)将流量从外部路由到后端 Pod(或服务)是否有好处?我注意到为 Nginx darkgaro/kubernetes-reverseproxy 做了一些工作——不幸的是,文档似乎不完整,并且没有具体的例子。在其他一些线程中,人们谈到了 Vulcan - 它是 Kubernetes 推荐的 LB 工具吗?
非常感谢您的推荐和帮助!