运维编排场景系列----分批到机器上运行命令
场景简介
当某一任务需对多个实例进行云助手操作命令,而且需查看在部分实例上由云助手发布的内容与已存在的内容是否会引起冲突,若无冲突则余下实例可以全部执行此任务。由上述内容可以通过Tag的方式查找需要操作的实例,并使用OOS云助手来实现自动化部署,设置分批执行来解决验证发布内容在部分实例的运行情况。
解决方案
任务分解:
1.通过tagKey-tagValue来查找需要操作的实例
2.设置执行的批次
3.循环批次内的实例执行云助手命令
4.执行所有批次
一、打开控制台,找到运维编排
二、创建模版
根据以上的任务步骤来看可以把此任务创建成以下模版。点击创建模版
或在公共模版中查找此模版ACS-ECS-BulkyRunCommandByTag
模版内容如下
FormatVersion: OOS-2019-06-01 Description: Run command on ECS instances by specifying tag. Parameters: commandContent: Description: Command content to run in ECS instance. Type: String tagKey: Description: The tag key for query ECS instances. Type: String MinLength: 1 MaxLength: 30 tagValue: Description: The tag value for query ECS instances. Type: String MinLength: 1 MaxLength: 30 commandType: Description: The type of command. Type: String AllowedValues: - RunBatScript - RunPowerShellScript - RunShellScript batchNumber: Type: Number Description: The number of times of wholesale distribution. MinValue: 1 MaxValue: 10 Default: 5 maxErrors: Description: The maximum number of errors allowed during task execution. Type: Number Default: 0 OOSAssumeRole: Description: The RAM role to be assumed by OOS. Type: String Default: OOSServiceRole RamRole: '{{ OOSAssumeRole }}' Tasks: - Name: describeRunningInstancesByTag Action: 'ACS::ExecuteAPI' Description: Views the ECS instances by specifying tag. Properties: Service: ECS API: DescribeInstances Parameters: Status: Running Tags: - Key: '{{ tagKey }}' Value: '{{ tagValue }}' Outputs: instanceIds: Type: List ValueSelector: 'Instances.Instance[].InstanceId' - Name: runCommand Action: 'ACS::ECS::RunCommand' Description: Invokes ECS instance command. Properties: commandContent: '{{ commandContent }}' instanceId: '{{ ACS::TaskLoopItem }}' commandType: '{{ commandType }}' Loop: MaxErrors: '{{ maxErrors }}' Items: '{{ describeRunningInstancesByTag.instanceIds }}' Concurrency: 'Fn::CalculateBatch': - '{{ batchNumber }}' - '{{ describeRunningInstancesByTag.instanceIds }}' Outputs: commandOutputs: AggregateType: 'Fn::ListJoin' AggregateField: commandOutput Outputs: commandOutput: Type: String ValueSelector: invocationOutput Outputs: commandOutputs: Type: List Value: '{{ runCommand.commandOutputs }}'
三、创建执行
查找到此模版后,点击创建执行。
四、选择分批执行方式,点击下一步:设置参数
根据实际需要选择分批执行的方式
1、自动并发
循环并发控制为自动并发时,不需要任务执行者来管理任务是否需要继续执行。系统会自动执行此任务下的所有批次。
2、第一批暂停
循环并发控制为第一批暂停时,当把任务分为N个批次后,当第一个批次执行结束后,此时任务会进入暂停状态,等待执行者确认后继续执行,当第一次确认过后,剩下的所有批次无需再次确认是否需要继续执行,直接执行至此任务结束。(注:当使用第一批暂停时按下图设置)
3、每批暂停
循环并发控制为每批暂停时,把任务分成N个批次后,每当一个批次的所有子任务执行结束后,都需要等待任务执行者确认后才能继续执行下一批次。(使用每批暂停时按下图选择)
五、设置参数
如下图所示,根据实际的业务情况输入需要的参数。参数输入完毕后,点击下一步:确认创建
参数介绍:
commandContent:输入需要操作的部署命令,命令类型可以是shell、PowerShell、Bat
commandType:选择执行部署命令的类型
tagKey:Tag标签key
tagValue:Tag标签value
maxErrors:循环的最大错误数
batchNumber:设置分批执行的批次数
六、创建执行
参数确认完毕后,点击创建执行之后,此任务开始正式执行
七、执行过程,执行暂停的恢复方法
1、当循环并发控制为自动并发时,无论此任务有多少批次,都不需要任务执行者来确认是否继续执行。会自动执行所有的批次。其过程如下所示。
2、当循环并发控制为第一批暂停时,当第一批次执行结束后,任务进入等待中,需要任务执行者来确认是否继续执行此任务。若想继续执行,按下图操作,点击恢复,此时任务开始继续执行。余下所有批次无需确认恢复则可以全部执行至结束。
3、当循环并发控制为每批暂停时,每当有一批次的子任务执行结束后,整个任务都会进入等待中,进而需要点击恢复来继续执行。如下图所示,当批次2运行结束后,没有经过确认恢复,批次3就无法执行。
八、异常失败处理
当执行时,子任务可能由于某些原因导致执行失败,如下图所示,并点击下图所标位置,查看失败的任务详情。
在失败详情页找到失败的子任务时,可以首先选择先重试,让此子任务重新执行,若重试执行后依然失败,可以选择继续重试,或者也可以选择跳过或取消放弃当前的子任务。
重试:在当前情况下重新执行失败的子任务
跳过:跳过此子任务
取消:取消当前子任务的执行
如上图所示当前第一批次有失败的情况,分别对其进行了跳过和取消处理,其表现形式如下图所示。
九、执行结果
根据上面的例子输入commandContent:date,此脚本为输出当前时间。如下所示,根据结果显示,当前脚本在每个实例上都执行了一遍。
总结
由以上的任务可以发现,在含有多个子执行的任务中使用分批执行的模式,可以快速定位并重试失败任务的执行。使用分批执行的模式来执行云助手命令进行发布,方便了运维层次的操作,以及方便根据批次来验证发布内容的实际效果是否符合预期的效果或者发布内容是否存在问题,若不达标则可以进行余下批次的取消。
欢迎使用OOS
OOS客户支持钉钉群:23330931
OOS管理控制台的链接
OOS帮助文档的链接
系列文章
主题文章
最佳实践
玩转运维编排服务的权限:Assume Role+Pass Role
场景系列
运维编排场景系列----更新ECS镜像
运维编排场景系列-----给ECS实例自动打TAG
运维编排场景系列----从实例中拷贝文件到OSS
运维编排场景系列----给实例加到SLS机器组
运维编排场景系列----检测MFA功能状态
阿里云运维编排新功能:一键批量克隆ECS
运维编排场景系列-----每日统计多Region实例的运行状态
运维编排场景系列-----如何使用jq
运维编排场景系列----分批到机器上运行命令
低调大师中文资讯倾力打造互联网数据资讯、行业资源、电子商务、移动互联网、网络营销平台。
持续更新报道IT业界、互联网、市场资讯、驱动更新,是最及时权威的产业资讯及硬件资讯报道平台。
转载内容版权归作者及来源网站所有,本站原创内容转载请注明来源。
- 上一篇
Kuberntes 中无法删除 PV 的解决方法
Kuberntes 中无法删除 PV 的解决方法 一 背景 系统内有一个已经不再使用的 PV ,已经删除了与其关联的 Pod 及 PVC ,并对其执行了删除命令,但是无法正常删除,一直出于如下状态: $ kubectl get pv NAME CAPACITY ACCESS MODES RECLAIM POLICY STATUS CLAIM STORAGECLASS REASON AGE pv-nfs-gysl 1Gi RWO Recycle Terminating default/www-vct-statefulset-pvc-gysl-0 managed-nfs-storage 22h 二 解决方法 $ kubectl patch pv pv-nfs-gysl -p '{"metadata":{"finalizers":null}}' persistentvolume/pv-nfs-gysl patched $ kubectl get pv No resources found. 通过系统帮助信息,我们可以获取patch的简要使用说明: patch: 使用 strategic me...
- 下一篇
运维编排系列场景-----将实例的固定公网IP转换为其它新EIP
场景介绍 如果您在购买服务器时选择的固定带宽,并且已经购买了新的EIP,需要实例的公网IP转换为已购买的EIP。通常情况需要您先将固定带宽转换为按量带宽,然后把固定公网IP转换为EIP并解绑,最后绑定已购买的EIP。运维编排提供的公共模板实现了一键转换。不需要准备新的EIP,一键自动解绑公共IP并绑定其它新EIP。 解决方案 我们准备一台ECS实例。查看实例详情,如下图所示已分配公网IP。登录OOS控制台。如果您之前从未开通过OOS服务,请点击“立即开通”按钮,即可一键开通。OOS运维编排是安全免费的服务,请放心开通。开通后在公共模板中搜索'ACS-ECS-ConvertsPublicIPToNewEIPByInstanceId'。点击“创建执行”的按钮,选择“客户了解风险,无需确认”的按钮,点击“下一步:设置参数”。在参数设置页,需要输入实例ID:接下来,进入OOS控制台的执行管理页,查看执行,可以看到图形化的执行过程。在执行详情中执行状态显示成功。实例详情页面查看修改结果,如下图所示,实例公网IP已转换为EIP。 欢迎使用OOS OOS客户支持钉钉群:23330931OOS管理控制...
相关文章
文章评论
共有0条评论来说两句吧...
文章二维码
点击排行
推荐阅读
最新文章
- Docker使用Oracle官方镜像安装(12C,18C,19C)
- Windows10,CentOS7,CentOS8安装Nodejs环境
- SpringBoot2初体验,简单认识spring boot2并且搭建基础工程
- CentOS关闭SELinux安全模块
- Windows10,CentOS7,CentOS8安装MongoDB4.0.16
- CentOS6,7,8上安装Nginx,支持https2.0的开启
- SpringBoot2编写第一个Controller,响应你的http请求并返回结果
- SpringBoot2全家桶,快速入门学习开发网站教程
- SpringBoot2配置默认Tomcat设置,开启更多高级功能
- CentOS7设置SWAP分区,小内存服务器的救世主