如何扩展 nginx-ingress/负载均衡器?

问题描述

所以我正在使用 kubernetes NGINX Ingress Controller 并通过 helm 图表安装它。

我没有找到有关图表的任何真正文档,但引用了 values.yaml,我将 controller.kind 值更改为 DaemonSet。

所以这个问题的第一部分,这是一个好的做法。我找不到有关此的任何信息,但是一个控制器可能不足以处理所有传入的流量,而且我们遇到了一些问题,即运行入口控制器的节点已关闭。我希望控制器作为 DaemonSet 运行就足够了,无论是可用性还是性能?

问题的第二个也是更重要的重要部分是,如何在这样的设置中拥有多个负载均衡器?由于一个负载均衡器可能无法处理所有流量,我们想添加多个负载均衡器,但据我所知,将创建一个负载均衡器类型的服务。如何拥有多个负载均衡器?

是否也可以通过舵图配置来做到这一点?

解决方法

Nginx Ingress Controller 不是负载均衡器,所以当你说一个负载均衡器不够时,我猜你的意思是一个 Ingress Controller pod 是不够的。在这种情况下,创建多个负载均衡器并没有真正的帮助,因为您会得到更多指向同一个 Ingress Controller 的云提供商负载均衡器。

现在,为 IC 使用 DaemonSet 似乎是个好主意,但事实并非如此。尤其是当您有数十或数百个节点时,在这种情况下,您可能有数十或数百个您并不真正需要的 IC pod。对于 40 个节点,您可能需要 5 个。

正确的方法是将对象改回 Deployment,为该 HorizontalPodAutoscaler 创建一个 Deployment 对象,根据您将设置的阈值进行缩放。您可能需要为此安装 metrics server。例如,如果您有一个节点自动缩放器的问题,这可能会在任何时候关闭一个节点,您应该设置一个 PodDisruptionBudget 对象,以防止这些情况。 PDB 将阻止一个节点被耗尽,并且节点自动缩放器将关闭另一个节点。您还可以针对自身设置一个 Anti-affinity,以防止在同一节点上部署两个 IC pod,以增加额外的工作量。

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...