Blue-green deployment是一个安全部署应用的方法,它通过提供两个版本的应用同时运行。为了部署一个新版本的应用,你需要将当前版本切换到新版本,然后关闭老版本。Blue-green deployment不会使应用停止服务,在必要的情况下允许你快速回滚应用到blue版本。
这篇文章简要的描述了这一过程
http://martinfowler.com/bliki/BlueGreenDeployment.html
在生产环境,你可能使用了脚本,将这个过程集成到了你已有的系统。下面,我们提供一个实例,使用DCOS CLI来提供一个安全部署。(DCOS CLI可以和DCOS和开源的marathon一起使用)
准备
基于marathon的应用有精准的健康监控
应用也许会暴露一个指标终端点检测应用是否有任何没有完成的操作。例如,检测数据库等待事务数等。
jq命令行json处理器
如果你使用的是开源的mesos,需要配置DCOS CLI
步骤
我们将使用GREEN版本的应用替换BLUE版本的应用。
1.在marathon中加载一个新版本的应用,添加给应用名称一个唯一的ID,例如Git的commit id。在这个例子中,我们通过添加GREEN到名称中来给应用添加新版本号。
# launch green
dcos marathon app add green-myapp.json
- 1
- 2
- 1
- 2
注意:如果你用API来代替DCOS CLI,这个命令会很长:
curl -H "Content-Type: application/json" -X POST -d @green-myapp.json <hosturl>/marathon/v2/apps
- 1
- 1
2.可以缩放GREEN应用实例到1个或多个。初始(从0个实例开始),根据所提供的服务设置应用实例最小的数量。
# scale green
dcos marathon app update /green-myapp instances=1
- 1
- 2
- 1
- 2
3.等待,直到GREEN应用的所有任务提供了健康检测。这一步需要jq。
# wait until healthy
dcos marathon app show /green-myapp | jq '.tasks[].healthCheckResults[] | select (.alive == false)'
- 1
- 2
- 1
- 2
4.使用上面的代码片段去检测所有GREEN实例是否仍然健康。如果没有达到你的预期的结果,可以终止部署并且回滚。
5.从GREEN应用添加一个新的任务实例到负载均衡池中。
6.从当前版本(BLUE版本)的应用获取一个多多个任务实例。
# pick tasks from blue
dcos marathon task list /blue-myapp
- 1
- 2
- 1
- 2
7.更新负载均衡配置,从BLUE应用池中删除任务实例。
8.等待,直到BLUE任务实例没有等待的操作。应用提供的指标终端点检测等待操作的数量。
9.直到BLUE任务所有的操作完成,使用API关闭BLUE应用。在下面的代码片段中,hosturl是你master节点的hostname,需要加上http://前缀。
# kill and scale blue tasks
echo "{\"ids\":[\"<task_id>\"]}" | curl -H "Content-Type: application/json" -X POST -d @- <hosturl>/marathon/v2/tasks/delete?scale=true
- 1
- 2
- 1
- 2
这个marathon操作将移除指定实例(这些实例的没有等待操作)并且阻止他们被重新启动。
10.重复步骤2到9,指定没有BLUE的任务。
11.从marathon中移除BLUE应用。
# remove blue
dcos marathon app remove /blue-myapp
- 1
- 2
- 1
- 2
原文:https://mesosphere.github.io/marathon/docs/blue-green-deploy.html
http://blog.csdn.net/zhuchuangang/article/details/51064974