K8s:如何在同一节点内部署多个 Django 服务

K8s: how to deploy multiple Django services inside the same node

我是 DevOps 工作的新手,我花了一些时间弄清楚整个最终架构应该是什么样子。我的项目目前 运行 在单个 Kubernetes 集群和具有单个 pod 的单个节点上,在非常常见的 Nginx 反向代理 + UWSGI Django 应用程序中。我必须实施缩放架构。我的理解是我应该在 LoadBalancer 后面使用 Ingress Controller(我在 OVH 托管,他们确实提供了一个内置的 LoadBalancer)。然后 Ingress Controller 会将流量分配到我的 pods。

问题 1:如果我的 Django 应用程序侦听端口 8000,将 ReplicaSet 设置为 2 不起作用,因为该端口已被占用。这让我相信我只应该每个节点有一个 pod,但 some information 另有说明。我如何 运行 同一节点上的多个副本?

问题2:假设我再部署9个节点。我的所有 10 个节点都应该位于 1 个 Ingress Controller(和 1 个负载均衡器)之后,还是每个节点都应该有自己的 Ingress Controller?

问题 3:如果我只有一个 Ingress Controller,Load Balancer 不会真正“平衡”任何负载,它的唯一目的是将我的服务暴露到 Internet,这正常吗?

问题4:Ingress Controller过载会怎样?我是否复制所有内容,然后负载均衡器将请求分发到 2 个控制器?

and 是一个很好的起点,但仍然没有直接回答我的问题。

  1. 每个 pod 都有自己的网络设置,因此两个副本(即两个 pods)都可以侦听同一个端口。 除非您启用了不应在此处使用的主机网络模式。

  2. 不直接说,ingress controller可以是很多东西。如果你使用的是自托管的(我看到了 ingress-nginx 标签,所以假设你正在使用它)那么每个控制器副本都是代理设置的独立副本。您至少需要 2 个来实现冗余,但除非您需要中断流量,因为这两个跟不上它(必须是真正巨大的请求量),这可能就是您所需要的。

  3. 是的,这在 K8s 方面很好,但如前所述,如果您有多个可用节点,您可能需要至少两个入口控制器副本,以防一个节点意外死亡。

  4. 边缘 LoadBalancer 在所有 nginx 代理实例之间循环请求,因此如果您需要更多容量,您将产生更多副本(假设您在集群上有备用 CPU ,如果不是,则首先是更多节点,然后是更多副本)。