全部产品
云市场

基于镜像的日常发布

更新时间:2019-12-25 16:46:16

运维编排场景系列——基于镜像的日常发布

运维编排(OOS) 简介

什么是OOS

Operation Orchestration Service,简称OOS,是全面、免费的云上自动化运维平台,提供运维任务的管理和执行。典型使用场景包括:事件驱动运维,批量操作运维,定时运维任务,跨地域运维等,OOS为重要运维场景提供审批,通知等功能。OOS帮您实现标准化运维任务,从而实践运维即代码(Operations as Code)的先进理念。关于OOS更详细的介绍请查阅 运维编排服务

场景介绍

我们在使用ECS的时候要更时常地面临更新软件的问题,如运行的后端服务版本更新,安全打补丁等情况。我们可以使用ECS镜像来维护需要更新的程序版本,更新好镜像后对需要发布的机器更换下系统盘重新启动就能完成对单台机器的程序更新。对于在线上运行的机器我们需要分批的去更换系统盘。
总结下来,我们需要做的操作如下:

  1. 更新镜像 启动一台新的机器或者在一台上执行命令后打成一个镜像
  2. 用新镜像分批更新系统盘

对于以上操作我们一步一步的操作实在是太繁琐了,这种发布流程是对运维人员的考验,一个不留神可能就出错了,那么我们有没有自动化方案呢?有!使用运维编排

解决方案

机器分组

首先建议对机器进行分组,可以给机器打上相应tag,比如我们可以给我们的ecs按环境来分组env:test和env:product 这样比较方便管理,批量执行时候只需要选好相应的标签即可。
oos

打镜像

然后我们需要解决更新镜像的问题,有了ECS云助手我们有了到机器上执行命令的通道,而OOS可以编排云产品的API,我们可以将一系列命令编排起来执行。更新镜像的话我们可以帮可以按原有镜像启动一台ECS,在ECS上执行命令,执行成功后关闭当前实例并给当前实例打镜像生成镜像然后,然后再释放临时实例。如下图所示
oos
以上步骤可以用OOS模板一步搞定,请到OOS控制台执行更新镜像
oos
并填写相应的参数
oos
执行后,需要运行一段时间,我们可以看到运行的步骤和运行结果
oos
最后生成了一个新的镜像ID。

批量更新系统盘

这个步骤就相当于对每台机器执行,停止机器,等机器变成Stopped,更换系统盘,把机器启动,等机器到Running,循环直到所有机器操作完毕,这个过程如果对于机器少还可以手动完成,机器多的话手动操作那一定疯了。
oos
通过OOS也可以比较简单的解决这个问题,到OOS控制台搜索系统盘,找到批量更换系统盘模板oos
创建执行,选择实例,这里可以手动选择实例也可以按tag来,我之前已经给机器打好了标签env:test这里就用tag来操作,批次控制支持并发执行和分批执行,这两个的区别是并发执行永远保持n个允许中的,而分批执行是执行完第一批再执行第二批,我这里就选并发执行,每次1台。oos

点击执行,我们可以看到已经在运行中了,并且符合预期的在一台一台的执行

oos
等待操作成功,整个分批更换系统盘的操作就完成了。最后看控制台结果符合预期。

总结

我们通过以上步骤实现了一套ECS基于镜像的发布流程。如果我使用了负载均衡 ECS挂载到了SLB上,希望在替换系统盘前先从SLB移除下来 更换好再挂载上去实现无缝升级能做到吗? 这两个步骤有办法合并成一个模板吗? 有办法在提交代码后自动触发整个过程吗?
oos
答案当然是肯定的,CI以后调用OOS aliyuncli或者sdk做集成触发模板就可以了,对于全自动整个过程,可以自定义模板来做,我们也整打算把这个功能变成一个公共模板来使用。我们帮助一个客户实现了整个流程大大的提升了客户的运维效率,带来自动化的同时为客户也提供了白屏化的操作工具。将整个发布过程变得顺畅透明安全。