如何对service进行更新,swarm下通过service或者stack创建的n个service都可以进行更新,注意这个更新是在servcie运行时进行更新而且servcie运行在生产环境,所以不能导致业务中断(不宕机更新)!
当然这节课只是一种简单的演示,实际情况不宕机更新要远复杂的多
1. 环境搭建
首先创建一个demo的overlay网络:
然后创建一个servcie命名为web,进行端口映射:
2. 不中断更新
2.1 进行scale
通过docker servcie scale web=2,保证至少两个service,然后停一个,更新这个,另外一个继续运行,前一个更新完毕之后再更新这个。
接着我们去worker1节点,通过一个命令不同的curl来模拟不停的访问:
sh -c "while true; do curl 127.0.0.1:8080&sleep 1:done"
2.2 update命令
这里通过--help可以看到相关可以更新的内容:
这里我们演示最基础的更新image,拿之前那个准备好的新的image:
注意这里有两个scale,他会挨个更新,同时注意worker2那边会不会访问到2.0:
我们发现了此时出现了1.0和2.0同时存在的情况,最后全是2.0:
然后观察一下这个service,有两个shutdown:
注意这里有一个问题,就是会有一段时间1.0和2.0版本共存,这个实际情况下也是不允许的,希望旧版本不能访问,但是这个不在本节课范围,可以课后思考。
接着我们在尝试更新端口号,对端口号更新没办法做到不中断,因为设计vip虚拟端口,所以肯定访问会中断:
2.3 更新stack
更新stack只会修改他的yml文件,然后通过stack deploy照常部署,他会比较diff进行对应的操作。