【问题标题】:How to configure autoscaling on docker swarm?如何在 docker swarm 上配置自动缩放?
【发布时间】:2017-05-30 19:59:35
【问题描述】:

我想知道如何配置此工具以从最小节点数开始,并在需要时增加到最大节点数。

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

【问题讨论】:

  • 根据official Swarm repo 中的提案/功能请求,dockercloud-haproxy 工具看起来可以与 Swarm 一起使用,但我尚未确认。
  • @smeeb 该工具是否包含自动缩放功能?
  • dockercloud-haproxy 沿现有容器分发请求,它无助于自动扩展。

标签: docker docker-swarm


【解决方案1】:

简短回答:目前没有简单的方法可以使用 Docker Swarm 做到这一点。

Docker Swarm(或 Swarm 模式)不支持开箱即用的自动缩放机器。您需要为此使用另一种解决方案,例如 docker-machine 在您的基础架构上创建机器(使用 docker)并将它们链接到现有的 Swarm 集群(使用 docker swarm join)。

这将涉及大量脚本,但其想法是监控集群的 CPU / 内存 / 网络使用情况(使用 top 或 monit),一旦超过阈值(比如 70% 的总集群资源),您触发一个调用 docker-machine 的脚本来扩展集群。使用相同的想法,您还可以在低于阈值下限时从现有的 swarm 集群中排出和删除节点(最好是 Agent 节点)来缩小规模。 p>

如果要使用此标准,您需要确保监控持续的资源使用情况,否则您的基础架构会因资源使用的频繁和突然变化而产生和销毁节点。

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

请注意,Swarm 需要至少 3 个Manager 节点(推荐 5 个)来维持分布式共识算法的法定人数。所以建议的最低下限是 5 个节点(您可以使用 Agent 节点进行扩展,因为服务正在逐步使用资源)。

在某种程度上,您还可以查看Docker InfraKit 或Terraform 的基础设施自动化和健康监测。

更新:现在有一个很有前途的跨平台自动缩放器支持 Swarm 模式任务自动缩放:Orbiter。尽管对于服务/机器自动缩放来说还没有开箱即用的东西。

【讨论】:

  • 谢谢@abronan!据我了解,节点只能使用外部工具进行扩展。容器呢?可以自动缩放容器吗?还是我应该使用其他工具,例如 kubernetes?
  • @CelsoAgra AFAIK,有 docker service scale 命令(或其对应的 docker-compose),但您还必须使用传入请求或 CPU 使用情况的统计信息来触发缩放。 Kubernetes 确实有一个基于资源使用情况的pod autoscaler,所以这可以适合您的用例:)
  • @abronan(或任何人)你知道 Docker 社区是否在 Docker 路线图中计划了一个内置的自动缩放器?如果 Docker 开箱即用地支持这个功能,我觉得这将是一个被大量使用的功能......
  • 还有@abronan,您可以解释一下:(1) 哪个组件通常监控集群范围的资源,最重要的是,(2) 哪个组件运行docker-machine 命令?
  • 我们需要根据存储在 prometheus 中的指标进行自动缩放。我们构建了一个服务,它使用 docker API 根据来自 prometheus github.com/sahajsoft/docker-swarm-service-autoscaler的指标进行扩展
【解决方案2】:

扩大规模非常容易。您可以在需要时继续调度容器。然后,您只需创建一个脚本来查找待处理的容器并扩展集群。例如,如果您在 aws for 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

【讨论】:

    猜你喜欢
    • 2017-08-01
    • 2017-06-05
    • 2016-11-28
    • 2017-11-05
    • 2016-12-15
    • 2022-06-20
    • 1970-01-01
    • 2019-07-01
    • 1970-01-01
    相关资源
    最近更新 更多