运维编排场景系列----分批到机器上运行命令

本文涉及的产品
系统运维管理,不限时长
简介: 场景简介 当某一任务需对多个实例进行云助手操作命令,而且需查看在部分实例上由云助手发布的内容与已存在的内容是否会引起冲突,若无冲突则余下实例可以全部执行此任务。由上述内容可以通过Tag的方式查找需要操作的实例,并使用OOS云助手来实现自动化部署,设置分批执行来解决验证发布内容在部分实例的运行情况。

场景简介

当某一任务需对多个实例进行云助手操作命令,而且需查看在部分实例上由云助手发布的内容与已存在的内容是否会引起冲突,若无冲突则余下实例可以全部执行此任务。由上述内容可以通过Tag的方式查找需要操作的实例,并使用OOS云助手来实现自动化部署,设置分批执行来解决验证发布内容在部分实例的运行情况。

解决方案

任务分解:
1.通过tagKey-tagValue来查找需要操作的实例
2.设置执行的批次
3.循环批次内的实例执行云助手命令
4.执行所有批次

一、打开控制台,找到运维编排
1566456218571_ceaae01e_41f9_46d4_8f30_c85f54ad5422

二、创建模版
根据以上的任务步骤来看可以把此任务创建成以下模版。点击创建模版
1566456542256_2289028b_ba31_4c41_bbeb_2bee10a82659

或在公共模版中查找此模版ACS-ECS-BulkyRunCommandByTag1566536064642_d038fbdd_ef91_447d_82f6_f6342ddf8712

模版内容如下

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 }}'

、创建执行
查找到此模版后,点击创建执行
1566535980697_2642b3cd_ac87_4dc0_bd53_cf432c97fe73

四、选择分批执行方式,点击下一步:设置参数
根据实际需要选择分批执行的方式
1、自动并发
循环并发控制为自动并发时,不需要任务执行者来管理任务是否需要继续执行。系统会自动执行此任务下的所有批次。
1566543705824_6096c330_1e4c_47eb_9208_d7303971468c

2、第一批暂停
循环并发控制为第一批暂停时,当把任务分为N个批次后,当第一个批次执行结束后,此时任务会进入暂停状态,等待执行者确认后继续执行,当第一次确认过后,剩下的所有批次无需再次确认是否需要继续执行,直接执行至此任务结束。(:当使用第一批暂停时按下图设置)
1566543604563_c9a7eed8_a59f_4e9d_a281_943b97f4471d

3、每批暂停
循环并发控制为每批暂停时,把任务分成N个批次后,每当一个批次的所有子任务执行结束后,都需要等待任务执行者确认后才能继续执行下一批次。(使用每批暂停时按下图选择)
1566543772981_77d401f6_9492_47fe_b29e_66b495683d4b

五、设置参数
如下图所示,根据实际的业务情况输入需要的参数。参数输入完毕后,点击下一步:确认创建1566535882018_10e14fca_bde5_4cb9_8f6d_eafd96075a42

参数介绍:
commandContent:输入需要操作的部署命令,命令类型可以是shell、PowerShell、Bat
commandType:选择执行部署命令的类型
tagKey:Tag标签key
tagValue:Tag标签value
maxErrors:循环的最大错误数
batchNumber:设置分批执行的批次数

六、创建执行
参数确认完毕后,点击创建执行之后,此任务开始正式执行
1566463382589_009a564c_8646_4b47_b14f_1bc30bb14757

七、执行过程,执行暂停的恢复方法
1、循环并发控制自动并发时,无论此任务有多少批次,都不需要任务执行者来确认是否继续执行。会自动执行所有的批次。其过程如下所示。
1566540227448_047a961e_88ab_4b2e_abf9_d94f4555ba44



2、循环并发控制第一批暂停时,当第一批次执行结束后,任务进入等待中,需要任务执行者来确认是否继续执行此任务。若想继续执行,按下图操作,点击恢复,此时任务开始继续执行。余下所有批次无需确认恢复则可以全部执行至结束。
1566539978568_972ad60f_3a52_4d60_b187_e982c21f9cf6



3、循环并发控制每批暂停时,每当有一批次的子任务执行结束后,整个任务都会进入等待中,进而需要点击恢复来继续执行。如下图所示,当批次2运行结束后,没有经过确认恢复,批次3就无法执行。
1566540679312_687c15da_a18b_43c8_b7af_5d1039971fc5

八、异常失败处理
当执行时,子任务可能由于某些原因导致执行失败,如下图所示,并点击下图所标位置,查看失败的任务详情。
1566466024760_10385638_e221_410a_9eaf_3bd75c9cc376

在失败详情页找到失败的子任务时,可以首先选择先重试,让此子任务重新执行,若重试执行后依然失败,可以选择继续重试,或者也可以选择跳过取消放弃当前的子任务。


重试:在当前情况下重新执行失败的子任务
跳过:跳过此子任务
取消:取消当前子任务的执行

1566541286693_a4b379e7_be05_4ccb_b460_40844e9294c4

如上图所示当前第一批次有失败的情况,分别对其进行了跳过和取消处理,其表现形式如下图所示。
1566543132437_5fdfeeba_4fb9_48d0_9e0d_c99262655b18

九、执行结果
根据上面的例子输入commandContent:date,此脚本为输出当前时间。如下所示,根据结果显示,当前脚本在每个实例上都执行了一遍。
1566545152062_2d933e81_ebed_4994_8e25_8f945b87d534

总结

由以上的任务可以发现,在含有多个子执行的任务中使用分批执行的模式,可以快速定位并重试失败任务的执行。使用分批执行的模式来执行云助手命令进行发布,方便了运维层次的操作,以及方便根据批次来验证发布内容的实际效果是否符合预期的效果或者发布内容是否存在问题,若不达标则可以进行余下批次的取消。

欢迎使用OOS

OOS客户支持钉钉群:23330931
OOS管理控制台的链接
OOS帮助文档的链接


系列文章

主题文章

阿里云重磅发布云上自动化利器——运维编排OOS

最佳实践

玩转运维编排服务的权限:Assume Role+Pass Role

场景系列

运维编排场景系列----更新ECS镜像
运维编排场景系列-----给ECS实例自动打TAG
运维编排场景系列----从实例中拷贝文件到OSS
运维编排场景系列----给实例加到SLS机器组
运维编排场景系列----检测MFA功能状态
阿里云运维编排新功能:一键批量克隆ECS
运维编排场景系列-----每日统计多Region实例的运行状态
运维编排场景系列-----如何使用jq
运维编排场景系列----分批到机器上运行命令

相关文章
|
22天前
|
运维 监控 网络协议
|
8天前
|
缓存 运维 监控
【运维必备知识】Linux系统平均负载与top、uptime命令详解
系统平均负载是衡量Linux服务器性能的关键指标之一。通过使用 `top`和 `uptime`命令,可以实时监控系统的负载情况,帮助运维人员及时发现并解决潜在问题。理解这些工具的输出和意义是确保系统稳定运行的基础。希望本文对Linux系统平均负载及相关命令的详细解析能帮助您更好地进行系统运维和性能优化。
26 3
|
28天前
|
运维 自然语言处理 开发者
作为一名运维人员,使用通义灵码个人版处理日常工作中的代码相关任务,极大地提升了我的工作效率。以下是我使用通义灵码的具体实践场景、效果和心得,以及相应的截图。
作为一名运维人员,我使用通义灵码处理日常工作中的代码任务,效率提升了30%。通义灵码帮助我快速理解复杂代码、生成准确的代码注释,并能从自然语言生成代码示例,大幅减少了代码编写和理解的时间。
57 3
|
2月前
|
机器学习/深度学习 人工智能 运维
|
3月前
|
图形学 开发者 存储
超越基础教程:深度拆解Unity地形编辑器的每一个隐藏角落,让你的游戏世界既浩瀚无垠又细节满满——从新手到高手的全面技巧升级秘籍
【8月更文挑战第31天】Unity地形编辑器是游戏开发中的重要工具,可快速创建复杂多变的游戏环境。本文通过比较不同地形编辑技术,详细介绍如何利用其功能构建广阔且精细的游戏世界,并提供具体示例代码,展示从基础地形绘制到植被与纹理添加的全过程。通过学习这些技巧,开发者能显著提升游戏画面质量和玩家体验。
150 3
|
3月前
|
运维 Oracle 前端开发
Oracle 11g RAC集群日常运维命令总结
Oracle 11g RAC集群日常运维命令总结
95 2
|
3月前
|
SQL 运维 Oracle
入门级Oracle 11g日常运维命令总结
入门级Oracle 11g日常运维命令总结
121 1
|
3月前
|
SQL 运维 数据库
DM8日常运维必须要懂的几个命令
DM8日常运维必须要懂的几个命令
73 1
|
2月前
|
运维 监控 数据可视化
高效运维的秘密武器:自动化工具链的构建与实践在当今数字化时代,IT系统的复杂性和规模不断增加,使得传统的手动运维方式难以应对日益增长的业务需求。因此,构建一套高效的自动化工具链成为现代运维的重要任务。本文将深入探讨如何通过自动化工具链提升IT运维效率,确保系统稳定运行,并实现快速响应和故障恢复。
随着企业IT架构的不断扩展和复杂化,传统的手动运维已无法满足业务需求。自动化工具链的构建成为解决这一问题的关键。本文介绍了自动化工具链的核心概念、常用工具及其选择依据,并通过实际案例展示了自动化工具链在提升运维效率、减少人为错误、优化资源配置等方面的显著效果。从监控系统到自动化运维平台,再到持续集成/持续部署(CI/CD)的流程,我们将一步步揭示如何成功实施自动化工具链,助力企业实现高效、稳定、可靠的IT运维管理。
|
1月前
|
运维 Linux Apache
,自动化运维成为现代IT基础设施的关键部分。Puppet是一款强大的自动化运维工具
【10月更文挑战第7天】随着云计算和容器化技术的发展,自动化运维成为现代IT基础设施的关键部分。Puppet是一款强大的自动化运维工具,通过定义资源状态和关系,确保系统始终处于期望配置状态。本文介绍Puppet的基本概念、安装配置及使用示例,帮助读者快速掌握Puppet,实现高效自动化运维。
52 4