使用新版本的Rancher可以告诉docker SWARM(1.12 +)在我的基础架构中添加新节点时重新分配容器吗?
假设我有4个节点,每个节点有5个容器,如果我添加第5个节点,我想重新分配我的容器,在每个节点上有4个容器。
当节点崩溃或关闭(缩小我的群集)时,重新调度会很好地触发,但是当我通过添加1个或更多节点来扩展时,没有任何反应。
答案 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')
我希望这有帮助!