3

我在试用 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 的限制。

问题是:

  1. 关于如何使其更具可扩展性有什么建议吗?即能够在不影响应用程序性能的情况下支持更多服务/Pod?NodePort 类型是为我们的服务设置“公共”地址的最简单方法,但如果所有服务和 Pod 都以这种方式设置,是否对可扩展性或性能有任何限制?

  2. 如果我们将类型更改为 LoadBalancer 会有什么不同吗?“类型”:“负载平衡器”

  3. 此外,使用专用的 LoadBalancer 或反向代理来提高可扩展性(例如 HAProxy 等)将流量从外部路由到后端 Pod(或服务)是否有好处?我注意到为 Nginx darkgaro/kubernetes-reverseproxy 做了一些工作——不幸的是,文档似乎不完整,并且没有具体的例子。在其他一些线程中,人们谈到了 Vulcan - 它是 Kubernetes 推荐的 LB 工具吗?

非常感谢您的推荐和帮助!

4

2 回答 2

1

您好,我对kubernetes有点陌生,但我有类似的问题和疑虑。将尝试回答其中一些问题或将您重定向到用户指南的相关部分。

如果您将 Kubernetes 部署在非云支持的提供商上,例如 vagrant /local 等,那么平台目前没有为您提供或自动化某些功能。

其中之一是“LoadBalancer”类型的服务。向服务(充当 LB)自动提供和分配 PUBLIC IP 目前仅在 Google Container 引擎等平台中发生。

请参阅此处此处的问题。

官方文档指出

在支持外部负载均衡器的云提供商上,将类型字段设置为“LoadBalancer”将为您的服务提供负载均衡器。

目前正在开发和记录替代方案,请参阅此处使用HAProxy

也许在不久的将来,kubernetes 最终会在所有可以部署和运行的可用平台中支持这种特性,所以要经常检查它们的更新特性。

您所说的性能下降很可能是由于 PublicIP(NodePort 1.0 及更高版本)功能正在运行。这意味着通过使用 NodePort 服务类型,kubernetes 会在集群的所有节点上为此类服务分配一个端口。然后 kube-proxy 拦截对这个端口对实际服务等的调用。

可以在此处找到使用 HaProxy 尝试解决相同问题的示例。

希望能有所帮助。

于 2015-09-01T12:58:22.033 回答
0

我面临同样的问题。内部 kube-proxy 似乎不打算成为外部负载均衡器。更具体地说,我们想在 kube-proxy 上设置一些超时或重试等。

我发现这篇文章描述了类似的问题。他建议看一下vulcan,因为它在内部使用 etcd,并且该项目的方向可能是将来为 k8s 提供功能齐全的 LB。

于 2015-11-05T08:58:15.203 回答