在整个公司范围内管理Docker节点和集群的最佳实践

时间:2019-03-30 22:29:48

标签: docker docker-swarm sysadmin

我很难找到正确的标题,但这是问题所在:

让我们想象一下,我正在管理托管在docker中的多个项目,每个项目都在x个节点上成群运行。不同的项目每秒的请求量从数万到数万,并且对于任何给定的项目,需求都可能会快速增长。

我应该为每个项目创建新的群集和节点(azure虚拟机),然后根据使用情况对其进行相应缩放,这会导致大量的小型到大型虚拟机。

或者我应该运行一个较小的大型虚拟机池,也许只有一个集群来处理所有服务。我相当确定这将是更理想的解决方案,因为您将失去运行虚拟机的开销,并且消除了由于该服务当前不受欢迎而只能无所事事的虚拟机。

考虑价格时,cpu / ram线性增长,因此拥有1x 4核计算机与4x 1核计算机没有区别(除非您需要大磁盘)。

我还遇到了内存量极少(1gb)的vms的问题,因为有时某些随机进程会消耗掉所有内存,并且机器基本上已经死了。您的负载平衡服务可能不需要大量内存,但是仍然需要大量节点来确保可靠性(微服务的操作系统开销问题)。

一个具有大型节点的大型集群在性能/优化方面非常有意义,但我担心其可靠性。我知道Docker容器无法访问其他容器或主机数据,但是群又如何?当所有公司的服务都关闭时,是否有一项服务会淹没/破坏整个节点甚至整个集群,进而引发一场噩梦。

1 个答案:

答案 0 :(得分:1)

没有适用于每个组织和每个应用程序设计的黑白答案。如果您正在考虑成本和管理开销,那么减少一组大型节点的确是有益的,因此可以最大程度地减少要管理的主机总数,并减少操作系统开销(假设主机操作系统和Docker / Swarm占用了最初的.5GB内存,减少大型实例可以减少浪费。

在此DockerCon Swarm talk中,我将讨论典型的Swarm尺寸和设计。

Docker也是got some guidance for EE,它在下面运行Docker Engine和Swarm。

就我个人而言,我会使用一小组较小的较大节点(使用运行5个管理器的单个10节点Swarm(仅将swarm作为较小的实例大小进行管理)和5个(8xlarge或更高)的工作程序,这非常好例如,在10Gbps网络上,我发现50-100 xlarge的可管理性要比仅1Gbps时高得多。

您可以使用资源保留和限制,以及other features like placement constraints, placement preferences, etc.来确保适当放置服务,并防止失控的进程消耗所有服务器资源。您可以看到一些我在做这些things on GitHub and DockerCon中的一些例子。

最后,如果接近10Gbps的数据还不够好,并且您需要每一盎司的原始网络,请考虑将默认的Swarm网络驱动程序Overlay切换为Host等其他人或Weave等第三方插件。