【问题标题】:Running multiple app instances on a single container in PCF在 PCF 中的单个容器上运行多个应用程序实例
【发布时间】:2018-03-02 19:48:49
【问题描述】:

我们有一个 PCF 的内部安装。 开发人员想要推送一个无状态(遵守 12 个因素规则)nodejs 应用程序,该应用程序将产生其他应用程序实例,即根据https://nodejs.org/api/cluster.html 利用 nodejs 集群。因此,每个容器上都会运行多个进程。从 PCF 的角度来看,这有什么已知问题吗?我很欣赏它违反了每个容器一个应用程序实例的规则/建议,但这只是一个建议:) 欢迎所有信息。 问候 约翰

【问题讨论】:

    标签: cloud-foundry


    【解决方案1】:

    在产生子进程的 Cloud Foundry 上运行应用程序时,您需要注意的第一件事是内存消耗。当您推送适用于整个容器的应用程序时,您设置了内存限制。这包括父进程、生成的任何子进程以及一些开销(当前是 init 进程、sshd 进程和健康检查)。

    为什么会出现这个问题?大多数 buildpack 都假设只有一个进程正在运行,并且它将消耗尽可能多的内存,同时保持在定义的内存限制之下。他们尝试配置运行您的应用程序的软件来执行此操作。当您生成子进程时,这会破坏 buildpack 的假设,并且可能会创建应用程序超出定义的内存限制的场景。发生这种情况时,即使是一个字节,进程也会被杀死并重新启动。

    如果您关心扩展应用程序,则不应尝试在一个超大容器中分离子进程。相反,让平台帮助您并扩大应用程序实例的数量。该平台可以轻松做到这一点,并且通过使用多个较小的容器,您也可以进行扩展。事实上,如果您已经有一个 12 要素应用程序,它应该可以很好地以这种方式工作。

    祝你好运!

    【讨论】:

    • 感谢您的信息。给出“一个特大容器”的原因是成本。我们使用 PCF 的内部成本基于实例数量;使用的实例越多,成本就越高。开发人员基本上是在寻求降低成本,我正在寻找他不能使用少量“装有进程的容器”的充分理由。再次感谢。
    • 最终,您可以通过制作更大的容器来扩展应用程序的上限。内存越大,平台就越难找到具有空闲内存的 Cell。想想看,如果你需要 8G 内存限制,而你有 16G 的 Cell,这个应用程序只能放在内存空闲超过 50% 的 Cell 上。除此之外,还有一些不能增加的限制,比如打开文件的数量。每个容器有一个固定的限制,虽然它非常大,但由于网络连接在 Linux 上被视为文件,因此您最终会遇到这个限制。
    • 您作为操作员还可以利用配额来降低内存上限。通过配额,您可以降低单个应用程序实例可以消耗的最大内存上限。例如,您可以将 4G 设置为一个应用程序实例可以请求的最大容量。见cf create-quota -h
    • 除此之外,您还有 HA 的论据。更多应用实例为您提供更好的 HA。 docs.cloudfoundry.org/devguide/deploy-apps/…
    • 感谢所有信息。 HA 被涵盖,因为他们必须部署许多容器> 1. 他们只是为了部署尽可能少的数量并将应用程序实例填充到其中:)
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-04-09
    • 1970-01-01
    • 2017-04-26
    • 1970-01-01
    • 2014-05-11
    相关资源
    最近更新 更多