如何在Docker Swarm上配置自动扩展?

44

我想知道如何配置这个工具,使其从最少的节点开始增长到需要的最大节点数量。

我应该使用另一个工具还是可以使用Docker Swarm解决这个问题?


根据官方Swarm存储库中的建议/功能请求,dockercloud-haproxy工具似乎可以直接与Swarm一起使用,但我尚未确认。 - smeeb
@smeeb 那个工具包括自动扩展功能吗? - 030
dockercloud-haproxy可以沿着现有的容器分发请求,但它并不支持自动扩展。 - raarts
2个回答

47

简短回答:目前使用Docker Swarm进行自动扩展并不容易。

Docker Swarm(或Swarm mode)默认不支持机器的自动扩展。你需要使用另一种解决方案,例如使用docker-machine在你的基础设施上创建带有Docker的机器,并将其链接到现有的Swarm群集(使用docker swarm join命令)。

这将涉及大量脚本编写,但基本思路是监视CPU / 内存 / 网络使用情况(使用topmonit),当资源使用率超过阈值时(例如总集群资源的70%),就会触发一个调用docker-machine进行扩展集群的脚本。使用相同的思路,您也可以通过从现有Swarm集群中排空删除节点(最好是Agent节点),使节点数降至下限。

如果您想使用此标准,则需要确保持续监视资源使用情况,否则您的基础设施将因资源使用情况的频繁和突然变化而不断生成和销毁节点。

您可以为群集中的机器定义下限和上限,以便控制集群的规模。

请注意,Swarm需要至少3个Manager节点(推荐5个)来维护分布式共识算法的一致性。因此,最小推荐下限是5个节点(随着服务逐渐使用资源,您可以使用Agent节点扩展该数量)。

在某种程度上,您还可以查看Docker InfraKitTerraform进行基础设施自动化健康监测

更新:现在有一个有希望的跨平台自动缩放器,支持Swarm Mode 任务自动缩放Orbiter。尽管对于服务/机器自动缩放还没有现成的解决方案。


谢谢@abronan!据我所知,节点只能通过外部工具进行扩展。那么容器呢?是否可以自动缩放容器?或者我应该使用另一个工具,比如kubernetes? - Celso Agra
2
据我所知,有docker service scale命令(或其docker-compose对应命令),但您还必须使用传入请求的统计信息或CPU使用率等触发缩放。 Kubernetes确实具有基于资源使用情况的Pod自动缩放器,因此这可以适合您的用例 :) - abronan
@abronan(或其他人),您是否知道Docker社区是否计划在Docker路线图中内置自动缩放器?如果Docker直接支持此功能,我觉得这将是一个广泛使用的功能... - smeeb
还有@abronan,你能解释一下吗:(1)通常是哪个组件监控整个集群的资源,最重要的是,(2)哪个组件运行docker-machine命令? - smeeb
3
我们需要基于Prometheus中存储的指标来进行自动扩展。我们构建了一个服务,它使用Docker API根据来自Prometheus的指标来进行扩展 https://github.com/sahajsoft/docker-swarm-service-autoscaler - Deepak N

3

扩展规模相当简单,您只需在需要时继续调度容器即可。然后,您只需创建一个查找待定容器并扩展群集的脚本。例如,如果您正在使用aws上swarm的官方CloudFormation模板,您可以在自动缩放组上更改所需数量。一个示例迭代脚本可能如下:

services=$(docker service ls --format '{{.ID}}')
for service in $services; do
  tasks=$(docker service ps $service --format '{{.ID}}')
  for task in $tasks; do
    if docker inspect $task --format '{{.Status}}' | grep 'insufficient resources' 1>/dev/null; then
      scale-up-cmd
    fi
  done
done

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接