【问题标题】:Swarm rescheduling after adding new node添加新节点后的 Swarm 重新调度
【发布时间】:2016-12-02 10:49:24
【问题描述】:

使用新版本的 Rancher,当我在基础架构中添加新节点时,是否可以告诉 docker SWARM (1.12+) 重新分配容器?

假设我有 4 个节点,每个节点上有 5 个容器,如果我添加第 5 个节点,我想重新分配我的容器以在每个节点上有 4 个。

当一个节点崩溃或关闭(缩小我的集群)时,重新调度会很好地触发,但是当我通过添加 1 个或更多节点来扩大规模时,什么也没有发生。

【问题讨论】:

    标签: docker swarm


    【解决方案1】:

    目前无法做到这一点。您可以做的是使用docker service update 更新服务(即:通过添加环境变量)

    docker 1.13 中的一个新功能将是强制更新服务,这将更新服务并强制重新分配节点,所以像 docker service update --force $(docker service ls -q) 这样的东西可能是可能的(还没有尝试过,所以可以'还没确认)。

    您可以在blogpost 中找到有关此功能的更多信息

    【讨论】:

      【解决方案2】:

      我遇到了完全相同的问题。但不是因为添加了一个新节点,而是在节点之间的底层共享存储上出现了节点故障(正在使用共享 NFS 存储来共享只读配置的挂载点)。

      Docker 服务更新 --force $(docker service ls -q) 版本 Docker 版本 17.05.0-ce, build 89658be 不起作用。

      放大.sh:

      #!/bin/bash
      
      echo "Enter the amount by which you want to scale your services (NUMBER), followed by ENTER: "
      read SCALENUM
      
      for OUTPUT in $(docker service ls | awk '{print $2}' | sed -n '1!p')
      do
          echo "Scaling up "$OUTPUT" to "$SCALENUM
          docker service scale $OUTPUT=$SCALENUM
      done
      

      scale-down.sh:

      #!/bin/bash
      
      for OUTPUT in $(docker service ls | awk '{print $2}' | sed -n '1!p')
      do
          echo "Scaling down "$OUTPUT" to 0"
          docker service scale $OUTPUT=0
      done
      

      请注意,第二个脚本 SCALES DOWN 服务,使其不可用。您还可以使用以下命令作为您可能需要的其他脚本的起点,因为这会独立于典型 docker service ls 命令中的其他列打印出服务名称:

      $(docker service ls | awk '{print $2}' | sed -n '1!p')
      

      我希望这会有所帮助!

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2022-01-22
        • 2014-07-04
        • 2013-04-26
        • 1970-01-01
        • 2021-12-06
        • 1970-01-01
        相关资源
        最近更新 更多