我想知道如何将此工具配置为以最少数量的节点开始,并在需要时增长到最大节点数。
我应该使用其他工具还是docker swarm解决这个问题?
答案 0 :(得分:35)
简短回答:目前使用Docker Swarm没有简单的方法。
Docker Swarm(或Swarm模式)不支持开箱即用的自动缩放计算机。您需要使用其他解决方案(例如docker-machine
)在您的基础架构上创建计算机(使用docker)并将这些计算机链接到现有的Swarm集群(使用docker swarm join
)。
这将涉及大量脚本,但其目的是监控群集的CPU /内存/网络使用情况(使用top
或monit
),一旦超出阈值(例如 70%总集群资源),触发调用docker-machine
的脚本以扩展集群。使用相同的想法,一旦低于下限阈值,您还可以通过现有群集群中的耗尽和删除节点(最好是Agent
节点)进行缩减。
如果要使用此条件,则需要确保监视持续的资源使用情况,否则您的基础架构会产生并破坏资源使用频繁和突然变化的节点。
您可以为群集中的计算机定义下限和上限,以控制事物。
请注意,Swarm需要至少3个Manager
个节点(建议5)才能维持Distributed Consensus算法的法定人数。所以建议的最小下限是5个节点(随着资源逐渐被服务使用,您可以使用Agent
个节点进行扩展。
在某种程度上,您还可以查看Docker InfraKit或Terraform 基础架构自动化和运行状况监控。
更新:现在有一个很有前途的跨平台自动缩放器支持Swarm模式任务自动缩放:Orbiter。虽然仍然没有开箱即用的服务/机器自动缩放功能。
答案 1 :(得分:1)
扩展非常简单。您可以在需要时继续安排容器。然后,您只需创建一个查找待处理容器的脚本并扩展集群。例如,如果您在aws上使用aws上的官方CloudFormation模板,则只需在autscaling组上更改所需的数字即可。示例迭代脚本可能如下所示:
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
答案 2 :(得分:0)
根据this issue on GitHub,目前不支持自动缩放。讨论的参与者之一表示:
今天不可用。 Swarm使用Docker-Compose进行静态扩展。 需要CPU / QPS监视才能进行自动缩放。 Swarm没有 那个。
有人询问是否有可以链接到此问题的当前故障单,因此可以实现此功能。