添加新节点后重新调度Swarm

时间:2016-12-02 10:49:25

标签: docker swarm

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

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

当节点崩溃或关闭(缩小我的群集)时,重新调度会很好地触发,但是当我通过添加1个或更多节点来扩展时,没有任何反应。

2 个答案:

答案 0 :(得分:1)

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

docker 1.13中的一个新功能将是服务的强制更新,它将更新服务并强制重新分配节点,因此docker service update --force $(docker service ls -q)之类的内容可能是可能的(尚未尝试过这个) ,所以还不能确认。

您可以在此blogpost

中找到有关此功能的更多信息

答案 1 :(得分:0)

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

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

scale-up.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')

我希望这有帮助!