【问题标题】:How many Docker containers should I run我应该运行多少个 Docker 容器
【发布时间】:2019-10-08 15:53:25
【问题描述】:
Docker 教程经常说我可以运行更多容器来提高我的 web 应用程序的可用性。然而,这是一个非常广泛的陈述,并没有解释在不同的情况下我应该实际运行多少个容器。我如何知道我是否需要 1、5、10、100 或 1000 个容器实例?
示例 - 我只有一台服务器,我正在使用 docker 运行 nginx 和 php-fpm。每人一个容器。通过这个简单的设置,我的 web 应用程序可以正常工作并且看起来反应灵敏。我会从增加额外的 php-fpm 副本(在同一台服务器上)中受益吗?假设一个 nginx 容器和 10 个 php-fpm 容器。
据我了解,10 个 php-fpm 容器只会在它们之间分配可用计算资源的数量。因此,我可以拥有一个资源丰富的容器或 10 个资源较少的容器。什么更好,为什么?
【问题讨论】:
标签:
php
docker
nginx
containers
reliability
【解决方案1】:
这两种情况各有利弊。
如果您正在运行具有大量资源的应用的 1 个 Pod,则您有 1 个故障点。如果您的 pod 死了(并且在某一时刻它会死);例如,在滚动更新期间,您将有一小段停机时间。
如果您有许多 Pod 运行您的应用的副本,请考虑到这些是容器,因此除了您的应用之外,还有一个基础镜像和依赖项。因此,每个副本都是一个基础映像加上您正在部署的依赖项,因此您在应用程序上花费的资源更多。
通常,最好拥有一个以上的副本,但您不应该对它发疯。研究什么在消耗您的应用程序,设置正确的资源请求。设置 HPA 以获得更好的弹性和更好地管理集群资源。
【解决方案2】:
我如何知道我是否需要 1、5、10、100 或 1000 个容器实例?
这完全取决于您的用例或系统负载。如果您有一百个用户,那么1 容器可能就足够了。
但是如果没有正确的load test,就无法简单地回答这个问题。
所以我可以拥有一个包含大量资源的容器或 10 个
资源较少的容器。什么更好,为什么?
许多云提供商建议使用一个资源较少的容器,因为 AWS 建议拥有 300 到 500 MB 的内存,以便您可以在一个实例上运行多个容器。
在 MiB 中为您的容器定义硬和/或软内存限制。难的
和软限制对应于memory 和memoryReservation
参数,分别在任务定义中。 ECS推荐300-500
MiB 作为 Web 应用程序的起点。
【解决方案3】:
在生产环境中,您需要设置某种监控系统来报告错误率和请求延迟。如果请求开始变得慢得令人无法接受,您需要建立更多的副本和更多的硬件。运行比硬件支持或当前负载合理的多的副本通常没有用处。
另一方面,运行 2 个副本比运行 1 个要困难得多;跑 3 或 10 并不比跑 2 难。所以我建议:
- 如果仅运行 1 个副本即可满足您的流量负载和可用性需求,则只需运行 1 个副本。
- 如果您在 Kubernetes 等环境中运行,该环境提供负载平衡和零停机升级作为环境的一部分,请运行 2 或 3 个副本;不要太过分,但如果有另一个副本正在运行以进行故障转移,那么如果 1 个副本崩溃,您将获得一些弹性。
- 运行最少数量的副本以满足您的响应时间要求。