全部产品

基于执行命令的分批发布

更新时间:2020-10-13 10:09:16

运维编排(OOS) 简介

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

场景介绍

我们经常会有批量发布升级线上应用服务,或者批量给机器打补丁这类运维操作。这些操作在所涉及的机器上,一下都执行成功当然是好的了,可实际一旦发生问题,很可能所有机器都将面临异常,这一定不是我们想看到的,那么我们采取分多个批次进行操作就显得尤为重要了。

为完成应用的发布,我们通常可能自己写脚本,然后将其pssh到各机器或ansible上执行,但分批控制这类方式会比较麻烦,并且流程和信息展示都不太直观。

解决方案

我们把准备执行的脚本,交给一个帮手替我们去分批执行,它可以为我们检查脚本每批执行的状态,一旦某批中有执行失败,则暂停该批次的执行,且其后面若有未执行的批次,其执行计划也会被暂停。而且我们随时可通过该帮手查看执行流程及相关信息,从中轻易发现为何脚本执行失败,当我们对失败原因分析后,再去决定是否继续执行后面的批次。这样就很好地掌握了整个发布节奏,不至于因为可忽略的小问题而中止整个发布,或者忽略了某个致命性问题仍继续发布。而我们所说的这个帮手,就是OOS的失败暂停功能,其借助云助手在实例上执行脚本的能力绝对是分批发布的最佳实践。

image.png

操作步骤

  1. 首先登录到运维编排控制台

  2. 单击常见运维任务,单击批量操作实例

  3. 在选择操作中,选择操作类型发送远程命令。根据要执行的脚本,选择需要发送的命令类型,本文选择Linux Shell,然后将要执行的脚本复制粘贴到代码编辑框中,本文示例脚本为`df -h;ifconfig`。

  1. 单击选择实例,选择所有将要执行的实例,实例选取方式有两种,本文选择指定实例标签,

    单击选择标签,本文表示将在标签键oos及标签值debug下所有实例中执行脚本。单击+添加。

image.png

  1. 单击高级选项,此处将涉及本文中所讲的分批执行,执行模式选择失败暂停,并发和批次控制下选择速率控制类型,点选批次控制,填写批次速率数组,批次速率数组根据将要分批执行的方式来填写,详细填写规则参考任务循环批次并发。 本文将其填写为[2,25%,50%],假设选择实例步骤中oos:debug标签下包含8台ECS实例,那么[2,25%,50%]则代表这8台实例分三个批次执行脚本,第一批2台执行,第二批25%*8=2台执行,第三批4台执行。当前一批执行成功,则后一批接着执行,若某一个批次执行时发生失败,则暂停失败的批次及向后执行计划,循环并发控制本文选择自动并发,即前一批次执行成功,则直接执行下一批次。最大错误次数,本文填写0。

image.png

  1. 单击 立即执行。

  2. 若有批次发生失败,则执行会状态会变为等待中,等待原因显示为失败暂停。

image.png

  1. 单击执行详情,可发现问题子实例在第一批次,单击失败子执行,可查看并分析具体原因,视情况再进一步操作。

总结

我们通过以上步骤实现了一套基于云助手的分批发布流程,相信细心的您一定发现了,其实整个流程是在执行OOS的ACS-ECS-BulkyRunCommand模版,那么如果您对OOS已经上手了,您也可根据实际场景,在我的模版中自定些其他的逻辑,譬如定时分批发布,分批为设备打补丁等。