运行多个 Pod 与在 1 个 Pod 中运行多个(相同)进程的开销? [已关闭]

问题描述 投票:0回答:1

背景

我正在 kubernetes 设置中运行作业处理任务(具体来说,Resque)。此任务设置一个或多个工作线程从队列中取出作业消息并进行处理。典型的调用是设置所需的工作人员数量,例如

COUNT=8 QUEUE=* resque:work

当然,在 Kubernetes 中,我将向运行此任务的 Deployment 添加自动缩放功能。

普遍建议每个 Pod 运行 1 个进程(见下文)。我担心的是,当我希望运行的进程具有内置的多进程管理系统来运行相同的进程时,这样做可能会造成浪费。我正在尝试理解理论和文档来为决策和实验提供信息。

我的动机问题是:是否有任何理由继续设置工作人员数量,或者每个 Pod 只使用一个工作进程是否更有意义? IE。与让 Resque 生成多个进程相比,每个 Pod 实例的开销是否很大?

问题

客观问题是:每个 pod 运行 1 个进程与让 1 个 pod 的主进程生成多个子进程相比,我应该在哪里期望/寻找开销?

例如IIUC 每个 Pod 都运行自己版本的操作系统以及容器中安装的其他实用程序。因此,与运行单个容器、单个操作系统、多 Resque-worker 设置相比,至少会产生一些内存开销;那是对的吗?在简单地对一堆猜测进行基准测试之前,我还应该考虑什么来为这个设置的资源消耗建模?

更多背景

我知道较小的进程数可以实现更细粒度的扩展。我不认为以比一次 4 个进程更精细的分辨率进行扩展有多大好处,因此如果应该考虑 pod 开销,我会从这里开始。我是否想得太多了?我是否应该忘记 pod 开销,而只使用每个 pod 的工作线程数 1?

这个问题是从许多“每个 Pod 一个进程”参考文献中得知的。许多列在这个类似的问题和其中链接的堆栈交换问题

  • 链接的问题涉及 pod 内的扩展进程以优化节点计算使用,我发现 k8s 已经很好地管理了它
  • 嵌套链接更多的是限制每个 Pod 一个关注,这就是我的问题中的情况。

我的问题是关于在 4 个 pod 中运行 4 个相同的工作进程与在 1 个 pod 中运行的开销。

kubernetes autoscaling
1个回答
2
投票

无论哪种方式都很好,我不希望它产生巨大的影响,除非是大规模的。

在单个容器内运行多个工作任务在架构上没有任何问题,特别是在专门设计用于执行此操作的框架内。正如您所注意到的,通常认为每个容器运行一个关注点是一种好的形式,并且运行多个进程存在各种问题(从失败的进程中恢复、收集日志);但如果您有一个专门设计用于启动和管理子流程的系统,那么在容器中运行它就可以了。

我在这里首先要问的问题是您计划同时运行多少个 Resque 工作线程。如果是“数千”,那么您可能会开始达到每个节点 pod 数量的限制以及 Kubernetes 调度程序的压力。在这种情况下,每个容器使用多个工作人员来减少 Pod 的数量可能是有意义的。如果它是“几十个”,那么将其限制为一个可以使其更容易可视化和管理。

启动一个新容器可能会有点昂贵(我习惯看到 30-60 秒的启动时间,但很大程度上取决于镜像),但拥有一个正在运行的容器并不是特别昂贵。看起来 Resque 在一定数量的工作人员之上有一个管理进程,因此您将拥有这些额外的红宝石,但这可能不是重要的内存或存储。

© www.soinside.com 2019 - 2024. All rights reserved.