如何通过在主机中添加新容器来增加规模?

How Scale increases by adding new container in host?

嗨, 我最近遇到了称为容器的虚拟化。 这是关于自动缩放。 我读过,当当前容器资源不足时,它会向主机添加一个新容器。添加新容器如何节省资源?

能解释一下

的规模吗

scenario 1: container running all of the resources (leaving resources for host os)

Scenario 2: the scale of running two containers running in the same host (where the container is using half of the resources consumed in the previous case)

如果场景 2 中的规模更大,那么谁能解释一下,即使总资源相同,也有两个容器,规模是如何增加的?

考虑以下有关应用程序工作负载的场景(例如,此处仅考虑 CPU 和内存)-

正常工作量 它需要 4 核,16 GB 内存。

最大工作量 它需要 8 个内核,32 GB 内存。 假设活动突发(最大工作量)每天仅发生 2 小时。

案例 1 - 当应用程序未容器化时 该应用程序必须为其工作保留 8 个内核和 32 GB 内存,以便它能够以预期的性能处理最大工作负载。 但是4核16GB内存一天要浪费22小时

案例 2 - 当应用程序容器化时 让我们假设生成一个 4 核和 16 GB 内存的容器。然后剩余的资源,4 核和 16 GB 内存可用于集群中的其他应用程序,并且在一天中最大工作负载时,将为该应用程序生成另一个相同配置的容器仅 2 小时 是必需的。

因此,当应用程序容器化时,集群中的资源得到了最佳使用。

单机没有应用所需的全部资源怎么办? 在这种情况下,如果应用程序是容器化的,那么 containers/resources 可以从集群中的多台机器分配。

增加容错能力 如果应用程序在单台机器上 运行 并且机器出现故障,那么整个应用程序将变得不可用。但是在容器化应用程序的情况下 运行 在集群中的不同机器上。如果一台机器出现故障,那么只有少数容器将不可用。

关于您的问题,如果应用程序的工作负载在整个生命周期内保持一致,那么就规模而言,将应用程序分解为较小的容器没有任何好处。但是您可能仍会考虑将应用程序容器化以获得其他好处。就规模而言,只有当工作负载不断变化或预计未来会有更多工作负载时,应用程序才会被容器化。

how scale has increased by having two containers even through total resources are same?

通常不会。如果您有一个单线程应用程序,并且您有一个多核主机,那么在同一主机中扩展容器的多个实例将使您能够通过该应用程序访问更多内核。如果多线程应用程序受到内部资源争用的限制并且没有使用所有内核,这也可能有助于多线程应用程序。但是对于大多数多线程进程,在单个主机上扩展应用程序不会提高性能。

扩展在多节点环境中的帮助是允许应用程序 运行 在集群中未被充分利用的其他主机中。这是大多数针对 12 因素应用程序的水平扩展。它允许部署到云环境的应用程序通过添加更多节点而不是试图为单个大节点寻找更多资源来扩展 replicas/shards。