如何在docker swarm上配置自动扩展?

时间:2017-01-16 02:27:02

标签: docker-swarm

我想知道如何将此工具配置为以最少数量的节点开始,并在需要时增长到最大节点数。

我应该使用其他工具还是docker swarm解决这个问题?

3 个答案:

答案 0 :(得分:35)

简短回答:目前使用Docker Swarm没有简单的方法。

Docker Swarm(或Swarm模式)不支持开箱即用的自动缩放计算机。您需要使用其他解决方案(例如docker-machine)在您的基础架构上创建计算机(使用docker)并将这些计算机链接到现有的Swarm集群(使用docker swarm join)。

这将涉及大量脚本,但其目的是监控群集的CPU /内存/网络使用情况(使用topmonit),一旦超出阈值(例如 70%总集群资源),触发调用docker-machine的脚本以扩展集群。使用相同的想法,一旦低于下限阈值,您还可以通过现有群集群中的耗尽删除节点(最好是Agent节点)进行缩减。

如果要使用此条件,则需要确保监视持续的资源使用情况,否则您的基础架构会产生并破坏资源使用频繁和突然变化的节点。

您可以为群集中的计算机定义下限和上限,以控制事物。

请注意,Swarm需要至少3个Manager个节点(建议5)才能维持Distributed Consensus算法的法定人数。所以建议的最小下限是5个节点(随着资源逐渐被服务使用,您可以使用Agent个节点进行扩展。

在某种程度上,您还可以查看Docker InfraKitTerraform 基础架构自动化运行状况监控

  

更新:现在有一个很有前途的跨平台自动缩放器支持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没有   那个。

有人询问是否有可以链接到此问题的当前故障单,因此可以实现此功能。