我想知道如何配置这个工具,使其从最少的节点开始增长到需要的最大节点数量。
我应该使用另一个工具还是可以使用Docker Swarm解决这个问题?
我想知道如何配置这个工具,使其从最少的节点开始增长到需要的最大节点数量。
我应该使用另一个工具还是可以使用Docker Swarm解决这个问题?
简短回答:目前使用Docker Swarm进行自动扩展并不容易。
Docker Swarm(或Swarm mode)默认不支持机器的自动扩展。你需要使用另一种解决方案,例如使用docker-machine
在你的基础设施上创建带有Docker的机器,并将其链接到现有的Swarm群集(使用docker swarm join
命令)。
这将涉及大量脚本编写,但基本思路是监视CPU / 内存 / 网络使用情况(使用top
或monit
),当资源使用率超过阈值时(例如总集群资源的70%),就会触发一个调用docker-machine
进行扩展集群的脚本。使用相同的思路,您也可以通过从现有Swarm集群中排空和删除节点(最好是Agent
节点),使节点数降至下限。
如果您想使用此标准,则需要确保持续监视资源使用情况,否则您的基础设施将因资源使用情况的频繁和突然变化而不断生成和销毁节点。
您可以为群集中的机器定义下限和上限,以便控制集群的规模。
请注意,Swarm需要至少3个Manager
节点(推荐5个)来维护分布式共识算法的一致性。因此,最小推荐下限是5个节点(随着服务逐渐使用资源,您可以使用Agent
节点扩展该数量)。
在某种程度上,您还可以查看Docker InfraKit或Terraform进行基础设施自动化和健康监测。
更新:现在有一个有希望的跨平台自动缩放器,支持Swarm Mode 任务自动缩放:Orbiter。尽管对于服务/机器自动缩放还没有现成的解决方案。
docker service scale
命令(或其docker-compose
对应命令),但您还必须使用传入请求的统计信息或CPU使用率等触发缩放。 Kubernetes确实具有基于资源使用情况的Pod自动缩放器,因此这可以适合您的用例 :) - abronandocker-machine
命令? - smeeb扩展规模相当简单,您只需在需要时继续调度容器即可。然后,您只需创建一个查找待定容器并扩展群集的脚本。例如,如果您正在使用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