添加新节点后 Swarm 重新调度

Swarm rescheduling after adding new node

有了新版本的 Rancher,当我在基础设施中添加新节点时,是否可以告诉 docker SWARM (1.12+) 重新分发容器?

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

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

目前无法执行此操作。您可以做的是使用 docker service update 更新服务(即:通过添加环境变量)

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

您可以在 blogpost

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

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

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

规模-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 }' | sed -n '1!p')
do
    echo "Scaling up "$OUTPUT" to "$SCALENUM
    docker service scale $OUTPUT=$SCALENUM
done

规模-down.sh:

#!/bin/bash

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

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

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

希望对您有所帮助!