使用新版本的 Rancher,当我在基础设施中添加新节点时,是否可以告诉 docker SWARM (1.12+) 重新分配容器?
假设我有 4 个节点,每个节点上有 5 个容器,如果我添加第 5 个节点,我想重新分配我的容器以在每个节点上有 4 个。
当一个节点崩溃或关闭(缩小我的集群)时,重新调度会很好地触发,但是当我通过添加 1 个或更多节点来扩大规模时,什么也没有发生。
目前无法做到这一点。您可以做的是更新服务docker service update
(即:通过添加环境变量)
docker 1.13 中的一个新功能将是强制更新服务,这将更新服务并强制重新分配节点,因此docker service update --force $(docker service ls -q)
可能会发生类似的事情(尚未尝试过,因此无法确认)。
您可以在此博文中找到有关此功能的更多信息
我遇到了完全相同的问题。但不是因为添加了一个新节点,而是在节点之间的底层共享存储上出现了节点故障(正在使用共享 NFS 存储来共享只读配置的挂载点)。
docker service update --force $(docker service ls -q) 从版本 Docker 版本 17.05.0-ce 开始,构建 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
缩小.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')
我希望这有帮助!