Docker Zero Deployment and Secrets (一)
在本节中,主要介绍在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 (一)的更多相关文章
- Docker Zero Deployment and Secrets (二)
一. 健康检测: (1)定义检测信息如下(案例,在Dockerfile中定义) FROM alpine:3.6 ... HEALTHCHECK --interval=30s \ --timeo ...
- Kubernetes的控制器之Deployment的定义
Deploy 的控制器定义参数介绍 [root@master manifests]# kubectl explain deploy KIND: Deployment VERSION: extensio ...
- SpringCloud微服务实战——搭建企业级开发框架(三十五):SpringCloud + Docker + k8s实现微服务集群打包部署-集群环境部署
一.集群环境规划配置 生产环境不要使用一主多从,要使用多主多从.这里使用三台主机进行测试一台Master(172.16.20.111),两台Node(172.16.20.112和172.16.20.1 ...
- Docker Resources
Menu Main Resources Books Websites Documents Archives Community Blogs Personal Blogs Videos Related ...
- Docker下安装Jenkins
Docker安装参见:https://www.cnblogs.com/hackyo/p/9280042.html 安装Jenkins: docker run \ -u root \ --rm \ -d ...
- [转帖]Docker的数据管理(volume/bind mount/tmpfs)
Docker(十五)-Docker的数据管理(volume/bind mount/tmpfs) https://www.cnblogs.com/zhuochong/p/10069719.html do ...
- docker的安装及项目部署
Making Docker and Deployment Process Step: set up your docker environment build a image of activeMQ ...
- Docker(十五)-Docker的数据管理(volume/bind mount/tmpfs)
Docker提供了三种不同的方式用于将宿主的数据挂载到容器中:volumes,bind mounts,tmpfs volumes.当你不知道该选择哪种方式时,记住,volumes总是正确的选择. vo ...
- Docker的数据管理(volume/bind mount/tmpfs)
Docker提供了三种不同的方式用于将宿主的数据挂载到容器中:volumes,bind mounts,tmpfs volumes.当你不知道该选择哪种方式时,记住,volumes总是正确的选择. vo ...
随机推荐
- python学习(十七) 爬取MM图片
这一篇巩固前几篇文章的学到的技术,利用urllib库爬取美女图片,其中采用了多线程,文件读写,目录匹配,正则表达式解析,字符串拼接等知识,这些都是前文提到的,综合运用一下,写个爬虫示例爬取美女图片.先 ...
- STL源码分析-rotate
http://note.youdao.com/noteshare?id=4ba8ff81aa96373ba11f1b82597ec73a
- P值解释和误区
sklearn实战-乳腺癌细胞数据挖掘(博主亲自录制视频教程) https://study.163.com/course/introduction.htm?courseId=1005269003&am ...
- 平衡树【Treap】
平衡树的板题,用Treap实现. 具体参见注释,写的很详细了,包括了原理,实现以及注意事项 蒟蒻写个注释板子写了两天,太弱了QAQ 感谢niiick指导 Code #include<iostre ...
- OpenCV---像素运算
像素运算 分为算术运算和逻辑运算 算术运算: 加减乘除 调节亮度 调整对比度 逻辑运算: 与或非 遮罩层控制 一:算术运算 import cv2 as cv import numpy as np de ...
- svn工具的使用问题总结
前言: 最近在开发的时候,由于需求太多,开发周期长短不一,从主线上切了多个分支(一般不在主线trunk上开发,万一线上出问题可及时修改代码上线),在部分功能上线后,想把代码同步到新的分支上去,最开始的 ...
- Java 中的几种线程池这么用才是对的
为什么要使用线程池 虽然大家应该都已经很清楚了,但还是说一下.其实归根结底最主要的一个原因就是为了提高性能. 线程池和数据库连接池是同样的道理,数据库连接池是为了减少连接建立和释放带来的性能开销.而线 ...
- bzoj 3083 树链剖分
首先我们先将树提出一个根变成有根树,那么我们可以通过树链剖分来实现对于子树的最小值求解,那么按照当前的根和询问的点的相对位置关系我们可以将询问变成某个子树和或者除去某颗子树之后其余的和,前者直接询问区 ...
- win10-idea2018
下载jar JetbrainsCrack-2.9-release-enc.jar idea64.exe.vmpotions 配置 -javaagent:D:\devsoft\idea\bin\Jetb ...
- 第三讲:ifconfig:最熟悉又陌生的命令行
你知道怎么查看IP地址吗? 当面试听到这个问题的时候,面试者常常会觉得走错了房间.我面试的是技术岗位啊,怎么问这么简单的问题? 的确,即便没有专业学过计算机的人,只要倒腾过电脑,重装过系统,大多也会知 ...