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

本文涉及的产品
系统运维管理,不限时长
简介: 场景简介 当某一任务需对多个实例进行云助手操作命令,而且需查看在部分实例上由云助手发布的内容与已存在的内容是否会引起冲突,若无冲突则余下实例可以全部执行此任务。由上述内容可以通过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
运维编排场景系列----分批到机器上运行命令

相关文章
|
14天前
|
机器学习/深度学习 人工智能 运维
|
2月前
|
SQL 运维 监控
DM日常运维高频命令总结
DM日常运维高频命令总结
70 3
|
2月前
|
运维 Oracle 前端开发
Oracle 11g RAC集群日常运维命令总结
Oracle 11g RAC集群日常运维命令总结
57 2
|
2月前
|
SQL 运维 调度
DM8日常运维命令总结(二)
DM8日常运维命令总结(二)
60 2
|
2月前
|
SQL 运维 Oracle
入门级Oracle 11g日常运维命令总结
入门级Oracle 11g日常运维命令总结
24 1
|
2月前
|
SQL 运维 数据库
DM8日常运维必须要懂的几个命令
DM8日常运维必须要懂的几个命令
46 1
|
19天前
|
运维 监控 数据可视化
高效运维的秘密武器:自动化工具链的构建与实践在当今数字化时代,IT系统的复杂性和规模不断增加,使得传统的手动运维方式难以应对日益增长的业务需求。因此,构建一套高效的自动化工具链成为现代运维的重要任务。本文将深入探讨如何通过自动化工具链提升IT运维效率,确保系统稳定运行,并实现快速响应和故障恢复。
随着企业IT架构的不断扩展和复杂化,传统的手动运维已无法满足业务需求。自动化工具链的构建成为解决这一问题的关键。本文介绍了自动化工具链的核心概念、常用工具及其选择依据,并通过实际案例展示了自动化工具链在提升运维效率、减少人为错误、优化资源配置等方面的显著效果。从监控系统到自动化运维平台,再到持续集成/持续部署(CI/CD)的流程,我们将一步步揭示如何成功实施自动化工具链,助力企业实现高效、稳定、可靠的IT运维管理。
|
2月前
|
运维 Rust 监控
Linux高效运维必备:fd命令深度解析,文件描述符管理从此得心应手!
【8月更文挑战第23天】本文介绍了一款名为fd的命令行工具,该工具基于Rust语言开发,旨在以更直观的语法和更快的速度替代传统的`find`命令。通过本文,您可以了解到如何安装fd以及一些基本用法示例,比如使用正则表达式匹配文件名、排除特定目录等。此外,文章还展示了如何结合`ps`和`lsof`命令来查找特定文件并显示其文件描述符,从而帮助您更好地管理和监控Linux系统中的文件与进程。
78 0
|
14天前
|
机器学习/深度学习 运维 Prometheus
构建高效运维体系:从自动化部署到智能监控的全方位实践
在当今数字化时代,企业对运维效率和稳定性的要求越来越高。本文将探讨如何构建一个高效的运维体系,从自动化部署、持续集成与持续交付(CI/CD)、智能监控、故障管理以及数据驱动决策等方面进行深入分析和实践指导。通过这些方法,企业可以实现更快速、更可靠的软件发布和问题解决,提升整体运营效率。
|
9天前
|
敏捷开发 运维 Prometheus
构建高效运维体系:从基础架构到自动化管理
本文探讨了如何通过优化基础架构、引入自动化工具和流程,以及加强团队协作,构建高效的运维体系。通过案例分析和实践建议,帮助运维人员实现系统的稳定性、可靠性和可维护性。
下一篇
无影云桌面