我是靠谱客的博主 舒服咖啡豆,最近开发中收集的这篇文章主要介绍docker swarm滚动更新和回滚,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

一、Docker Swarm的service的功能:

     首先可以创建副本,在创建的过程中,可以指定要使用的容器映像以及在运行中的容器内执行的命令。您还定义服务的选项,包括:

  1. 群在群外提供服务的端口。
  2. 用于服务连接到群中其他服务的覆盖网络。
  3. CPU和内存限制与保留。
  4. 滚动更新策略。
  5. 群中要运行的图像的副本数。

 Service服务的扩容和缩容,可以使用docker service scale 来增加副本的数量。

二、最重要的是可以对镜像的升级与回滚:

       可以使用docker service update --image 来升级镜像。也可以平滑升级,来定义一次升级几个副本和滚动更新的时间间隔,通过--update-parallelism和--update-delay来实现。

可以参考官方文档:

https://docs.docker.com/engine/swarm/how-swarm-mode-works/services/


 1)基于私有仓库,httpd镜像,自定义3个镜像,模拟v1,v2,v3不同版本。

 2)部署一个service,以自己的名字命名,副本数量为3个。

 3)service服务进行扩容到6个,以及缩容到4个的操作。

 4)然后对服务进行默认的滚动更新到v2版本。

 5)再平滑更新到v3版本,策略为每次更新2个,时间间隔为1m。

 6)如何实现回滚操作。

三、滚动更新service

   1.创建服务

docker pull  httpd:2.2
docper pull  httpd:2.4

docker service create --name web_http --replicas 3 192.174.1.43:5000/httpd:2.2 (启动的服务)

 swarm按照如下步骤执行滚动更新:

   1.停止第一个副本

   2.调度任务,选择worker node

   3.在worker 上用新的镜像启动副本

   4.如果副本 (容器)启动成功,继续更新下一个副本;如果失败了。暂停整个更新过程。

docker service update --image 192.174.1.43:5000/httpd web_http

  三个副本的版本已经更新成功了!

5.默认配置下,swarm一次更新一个副本,并且两个副本之间没有等待时间,可以通过--update-parallelism设置并行更新的副本数目,通过--update-delay制定更新的间隔时间。

docker service  update --replicas 6 --update-parallelism 2 --update-delay 1m30s web_http 
web_http

    service 增加到留个副本,每次更新两个副本 间隔时间一分半

查看副本处于正常状态

6.更新镜像到2.4

docker service update --image 192.174.1.43:5000/httpd:2.4 web_http

四、回滚

     swarm 还有方便的功能就是回滚,如果更新后效果不理想,可以通过--rollback快速恢复到更新之前的状态。

docker service  update --rollback web_http

注意:--rollback只能回滚到上一次执行docker service update之前的状态,并不能无限制的回滚

五、replicated  mode与global mode

     swarm可以在service创建和运行过程中灵活的通过 --replicas调整容器副本数量,内部调度器则会根据当前集群的资源使用状况在不同的node上启停容器,这就是service默认的replicated mode。在此模式下,node上运行的副本数有多有少,一般情况下,资源更丰富的node运行的副本数更多。

    除了replicated mode,service还提供了一个globalmode,其作用是强制在每个node上都运行一个且最多一个副本。

docker node update --availability active node1 
docker service create --mode global --name my_test 192.174.1.43:5000/httpd
docker service inspect  my_test --pretty 

如果创建建service时不指定,默认是replicated

六、lebel控制service位置

    无论采用global mode 还是replicated mode 副本运行在哪些节点都是有swarm 决定,作为用户我们使用label精细控制service的运行位置:

        逻辑分两步:

        1.为每个nioe定义label。

         2.设置service运行在制定label的node上,label可以灵活描述node的属性,其刑事是key=value 用户可以任意制定,例如将swarm-worker1作为测试环境,为其添加label env=test:

docker node  update --label-add  env=test node2
docker node  update --label-add env=port node3

对应的 将node2作为测试环境添加label env=prot:

2.部署service到测试环境:

docker service create --constraint node.labels.env==test --replicas 3 --name my_web --publish 8080:80 192.174.1.43:5000/httpd

 --constranint node.labels.env==test限制将service部署到label=test 的node,三个副本全部都运行在node2上。

3.更新service 将其迁移到生产环境:

docker service update --constraint-rm  node.labels.env==test my_web
docker service update --constraint-add node.labels.env==prot my_web

    删除并添加新的constranint,设置node.labels.env==prot,最终所有副本都迁移到swarm-worker2

最后

以上就是舒服咖啡豆为你收集整理的docker swarm滚动更新和回滚的全部内容,希望文章能够帮你解决docker swarm滚动更新和回滚所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(49)

评论列表共有 0 条评论

立即
投稿
返回
顶部