在本节中,主要介绍在Docker swarm中如何不中断应用高可靠性的情况下更新服务和stack.这也叫做zero downtime deployment.还有就是swam如何管理密钥,保证容器之间的通信是安全可靠的。

一.  Zero downtime deployment

1. 比较常见的更新方法

(1) Rolling updates

(2) Blue-green deployments

(3)Canary releases

2. Rolling updates

在关键的应用中,每个应用的服务都运行多个复本。举个例子,假如我们有三个复本实例,认为至少得有两个实例在同一时间运行,假如有100个实例复本,至少得有90实例复本在同一时间要有效。所以我们可以定义同时更新的实例有多少 个。在第二种假设的情况中,就是同时更新实例数为10个。

说白话一点就是假如一个应用有100个实例容器提供服务,那么我们每次更新10个,这样轮着更新。直至100个更新完,在这期间不停止服务。

注意:在署在多个节点的服务进行rolling updates时,最好是无状态的服务,假如是有状态的服务,建议调整方法,这个方法可能不太适合。

(1)定义stack文件 ,内容如下:

xiodi@c720131:~/docker$ cat stack.yaml
version: "3.5"
services:
   web:
     image: nginx:1.12-alpine
     ports:
       - 80:80
     deploy:
       replicas: 10
       update_config:
         parallelism: 2
         delay: 10s

(2)使用stack文件部署服务

xiodi@c720131:~/docker$ sudo docker stack deploy -c stack.yaml web
[sudo] password for xiodi:
Creating network web_default
Creating service web_web

(3)在服务部署后,使用下面的命令进行服务的监控

xiodi@c720131:~/docker$ sudo watch docker stack ps web
ID                  NAME                IMAGE               NODE                DESIRED STATE       CURRENT STATE                ERROR               PORTS
tsmz1yh1r8sq        web_web.1           nginx:1.12-alpine   c720131.xiodi.cn    Running             Running about a minute ago
9efbgiu8xfu6        web_web.2           nginx:1.12-alpine   c720132.xiodi.cn    Running             Running about a minute ago
j3ka20b1330l        web_web.3           nginx:1.12-alpine   c720132.xiodi.cn    Running             Running about a minute ago
t96zpspkrdll        web_web.4           nginx:1.12-alpine   c720132.xiodi.cn    Running             Running about a minute ago
q7vgy2b5ripc        web_web.5           nginx:1.12-alpine   ubuntu              Running             Running about a minute ago
lkrxparc8y5x        web_web.6           nginx:1.12-alpine   c720131.xiodi.cn    Running             Running about a minute ago
0nw5y74ow3vc        web_web.7           nginx:1.12-alpine   ubuntu              Running             Running about a minute ago
wpsn04qxzy0a        web_web.8           nginx:1.12-alpine   c720131.xiodi.cn    Running             Running about a minute ago
qcernrxbachq        web_web.9           nginx:1.12-alpine   ubuntu              Running             Running about a minute ago
kd5dbexndk61        web_web.10          nginx:1.12-alpine   c720132.xiodi.cn    Running             Running about a minute ago

(4)更新web服务,然后观察结果 。

(5)更新完成后,显示结果如下

xiodi@c720131:~/docker$ sudo docker stack ps web
ID                  NAME                IMAGE               NODE                DESIRED STATE       CURRENT STATE            ERROR               PORTS
y3e6nsy7qa0a        web_web.1           nginx:1.13-alpine   c720131.xiodi.cn    Running             Running 3 minutes ago                       
tsmz1yh1r8sq         \_ web_web.1       nginx:1.12-alpine   c720131.xiodi.cn    Shutdown            Shutdown 3 minutes ago                      
zkmadin1p6ir        web_web.2           nginx:1.13-alpine   c720132.xiodi.cn    Running             Running 3 minutes ago                       
9efbgiu8xfu6         \_ web_web.2       nginx:1.12-alpine   c720132.xiodi.cn    Shutdown            Shutdown 3 minutes ago                      
m4xhcns8j57p        web_web.3           nginx:1.13-alpine   ubuntu              Running             Running 4 minutes ago                       
j3ka20b1330l         \_ web_web.3       nginx:1.12-alpine   c720132.xiodi.cn    Shutdown            Shutdown 4 minutes ago                      
m884or5qpns4        web_web.4           nginx:1.13-alpine   c720132.xiodi.cn    Running             Running 3 minutes ago                       
t96zpspkrdll         \_ web_web.4       nginx:1.12-alpine   c720132.xiodi.cn    Shutdown            Shutdown 3 minutes ago                      
rlzj3jqdz6zc        web_web.5           nginx:1.13-alpine   c720132.xiodi.cn    Running             Running 3 minutes ago                       
q7vgy2b5ripc         \_ web_web.5       nginx:1.12-alpine   ubuntu              Shutdown            Shutdown 3 minutes ago                      
ntzku0o2fdh9        web_web.6           nginx:1.13-alpine   c720131.xiodi.cn    Running             Running 3 minutes ago                       
lkrxparc8y5x         \_ web_web.6       nginx:1.12-alpine   c720131.xiodi.cn    Shutdown            Shutdown 3 minutes ago                      
l2j1mml2c21e        web_web.7           nginx:1.13-alpine   ubuntu              Running             Running 4 minutes ago                       
0nw5y74ow3vc         \_ web_web.7       nginx:1.12-alpine   ubuntu              Shutdown            Shutdown 4 minutes ago                      
tdvpcny3zjf8        web_web.8           nginx:1.13-alpine   c720131.xiodi.cn    Running             Running 3 minutes ago                       
wpsn04qxzy0a         \_ web_web.8       nginx:1.12-alpine   c720131.xiodi.cn    Shutdown            Shutdown 3 minutes ago                      
nkkjxxq9xos1        web_web.9           nginx:1.13-alpine   ubuntu              Running             Running 3 minutes ago                       
qcernrxbachq         \_ web_web.9       nginx:1.12-alpine   ubuntu              Shutdown            Shutdown 3 minutes ago                      
px1bxz2omzfq        web_web.10          nginx:1.13-alpine   c720132.xiodi.cn    Running             Running 3 minutes ago                       
kd5dbexndk61         \_ web_web.10      nginx:1.12-alpine   c720132.xiodi.cn    Shutdown            Shu

(5)执行下列命令,移除stack.

xiodi@c720131:~/docker$ sudo docker stack rm web
Removing service web_web
Removing network web_default

(6)如果部署单一的服务的话,可以使用以下命令设置新的一些rolling update值。

xiodi@c720131:~/docker$ sudo docker service create --name web \
> --replicas 10 \
> --update-parallelism 2 \
> --update-delay 10s \
> nginx:alpine

Docker Zero Deployment and Secrets (一)的更多相关文章

  1. Docker Zero Deployment and Secrets (二)

    一. 健康检测: (1)定义检测信息如下(案例,在Dockerfile中定义) FROM alpine:3.6 ... HEALTHCHECK --interval=30s \     --timeo ...

  2. Kubernetes的控制器之Deployment的定义

    Deploy 的控制器定义参数介绍 [root@master manifests]# kubectl explain deploy KIND: Deployment VERSION: extensio ...

  3. SpringCloud微服务实战——搭建企业级开发框架(三十五):SpringCloud + Docker + k8s实现微服务集群打包部署-集群环境部署

    一.集群环境规划配置 生产环境不要使用一主多从,要使用多主多从.这里使用三台主机进行测试一台Master(172.16.20.111),两台Node(172.16.20.112和172.16.20.1 ...

  4. Docker Resources

    Menu Main Resources Books Websites Documents Archives Community Blogs Personal Blogs Videos Related ...

  5. Docker下安装Jenkins

    Docker安装参见:https://www.cnblogs.com/hackyo/p/9280042.html 安装Jenkins: docker run \ -u root \ --rm \ -d ...

  6. [转帖]Docker的数据管理(volume/bind mount/tmpfs)

    Docker(十五)-Docker的数据管理(volume/bind mount/tmpfs) https://www.cnblogs.com/zhuochong/p/10069719.html do ...

  7. docker的安装及项目部署

    Making Docker and Deployment Process Step: set up your docker environment build a image of activeMQ ...

  8. Docker(十五)-Docker的数据管理(volume/bind mount/tmpfs)

    Docker提供了三种不同的方式用于将宿主的数据挂载到容器中:volumes,bind mounts,tmpfs volumes.当你不知道该选择哪种方式时,记住,volumes总是正确的选择. vo ...

  9. Docker的数据管理(volume/bind mount/tmpfs)

    Docker提供了三种不同的方式用于将宿主的数据挂载到容器中:volumes,bind mounts,tmpfs volumes.当你不知道该选择哪种方式时,记住,volumes总是正确的选择. vo ...

随机推荐

  1. signal和sigaction 分析

    1:signal 函数 原型: sighandler_t signal(int signum, sighandler_t handler)      typedef void (*sighandler ...

  2. socket编程 ------ sockaddr_in 和 sockaddr 的区别

    struct sockaddr 和 struct sockaddr_in 这两个结构体用来处理网络通信的地址. // 以下是 IPv4 的定义 struct sockaddr { unsigned s ...

  3. js 根据url 下载图片

    downloadIamge(imgsrc, name) {//下载图片地址和图片名 let image = new Image(); // 解决跨域 Canvas 污染问题 image.setAttr ...

  4. windows7中用vitualbox安装OS X 10.11 El Capitan 及 Xcode 7.0--转载

    在 Win 7或8 下使用 VirtualBOX 虚拟机安装 OS X 10.11 El Capitan 及 Xcode 7.0 来源:http://bbs.feng.com/read-htm-tid ...

  5. NOIP模拟赛15

    NOIP2017金秋冲刺训练营杯联赛模拟大奖赛第一轮Day1 T1 天天去哪儿吃 直接枚举 #include<cstdio> #include<algorithm> using ...

  6. POJ 2431 优先队列

    汽车每过一单位消耗一单位油,其中有给定加油站可加油,问到达终点加油的最小次数. 做法很多的题,其中优先对列解这题是很经典的想法,枚举每个加油站,判断下当前油量是否小于0,小于0就在前面挑最大几个直至油 ...

  7. 实用技巧:如何用 CSS 做到完全垂直居中

    本文将教你一个很有用的技巧——如何使用 CSS 做到完全的垂直居中.我们都知道 margin:0 auto; 的样式能让元素水平居中,而 margin: auto; 却不能做到垂直居中……直到现在.但 ...

  8. 彻底解决mysql中文乱码

    mysql是我们项目中非常常用的数据型数据库.但是因为我们需要在数据库保存中文字符,所以经常遇到数据库乱码情况.下面就来介绍一下如何彻底解决数据库中文乱码情况. 1.中文乱码 1.1.中文乱码 cre ...

  9. div遮罩实现禁用鼠标(click、hover等)事件

    这两天在帮老师做网页,今天想实现在一块区域内禁止鼠标的各种事件,本来是想在框架模板的js文件里去修改,但是改代码的时候有点凌乱...感觉应该自己把问题想复杂了. 所以想了想要是能实现在一个区域内(如: ...

  10. 千字短文解决工程师们关于SPI的迷糊!

    串行外设接口 (SPI) 总线是一个工作在全双工模式下的同步串行数据链路.它可用于在单个主控制器和一个或多个从设备之间交换数据.其简单的实施方案只使用四条支持数据与控制的信号线(图 1): 图1:基本 ...