微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

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

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

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

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

问题 2:假设我再部署 9 个节点。我的 10 个节点应该都在 1 个入口控制器(和 1 个负载均衡器)后面,还是每个节点都应该有自己的入口控制器?

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

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

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

解决方法

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

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

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

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

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。