【问题标题】:Kubernetes Pod/Service ArchitectureKubernetes Pod/服务架构
【发布时间】:2018-04-04 21:11:05
【问题描述】:

我正在开发一个在 Google Kubernetes Engine 上使用 Django 的项目,并且有几个关于最佳架构格式的问题。现在我在一个 pod 中有几个容器,因为它们都相互依赖并且经常通信。这是我的设置:

Pod:网络应用程序

容器:

  • NGINX(提供静态内容,向 django 网站发送流量)
  • 网站(Django,提供 http 响应)
  • 数据库代理(用于网站的 MySQL 服务器和 websocket 服务器)
  • websocket(Django worker 来管理 websockets)
  • redis(异步功能)

我的计划是创建一个运行多个副本和扩展的部署,但是将这个 pod 分成多个 pod 还是保留它作为一个 pod 更好?

如果我将其分解,在添加必要的服务后,该架构会是什么样子?我是新手,如果这不显示它lol

【问题讨论】:

  • 如果您想获得更大的可扩展性,您应该将这些工作负载分派到不同的 Pod/微服务中。当您的应用程序转换为微服务时,您的 kubernetes 集群将以最佳方式跨不同主机优化您的工作负载。因此,如果您想获得更大的可扩展性,请分派您的服务和工作负载。如果没有,请暂时保留它,因为它会给您的项目带来更多的复杂性和可维护性

标签: kubernetes web-deployment scalability google-kubernetes-engine


【解决方案1】:

最好将这些容器分成多个 pod,以便在不浪费资源的情况下进行扩展。例如,如果您要扩展到两个实例,则将启动每个容器的第二个实例。您的容器很可能不会具有相同的负载,因此仅在负载下的容器上进行扩展是有意义的,因此将您的 1 个 pod 分成几个 pod 是有意义的。它还使更换单个组件变得更加容易。

以下是几个 Pod 的示例,每个 Pod 运行一个容器。该示例展示了如何根据正在加载的组件来扩展 pod 的数量。

【讨论】:

  • 太完美了,谢谢!现在,当在多个实例上扩展和负载平衡同一个容器时,kubernetes 会自己处理流量和网络吗?
  • 是的,如果您通过使用请求轰炸服务来运行一些性能测试,您会注意到请求将由不同的 pod 处理,而与它们是否在同一个节点上无关。
  • 谢谢,这很有帮助!出于好奇,您是否知道 Django 通道 runworker 服务器是否可以在不与 Django 网络服务器通信的情况下正常处理请求?我也在这里发布了这个问题:link
  • 另外,这些服务可能是 kubernetes 中的负载均衡器吗?试图连接所有术语并理解它的工作方式大声笑,但是在每个服务中都有自己的 yaml 和所有?
  • 我对 Django 不熟悉,但我相信您可以将 websocket 工作人员分离到他们自己的“微服务”/应用程序中。例如,如果他们需要网络服务器,他们可以通过 http 进行通信,而不是直接调用方法。你不需要在 yaml 中指定负载均衡器(也许是为了更好地控制),记住你可以在一个 yaml 文件中指定多个东西(配置映射、服务等)。
猜你喜欢
  • 1970-01-01
  • 2019-03-23
  • 2020-10-02
  • 2020-08-04
  • 1970-01-01
  • 2020-12-25
  • 1970-01-01
  • 2019-11-22
相关资源
最近更新 更多