阿里云自动化部署和运维的最佳实践-基于YAML的编排

本文涉及的产品
资源编排,不限时长
系统运维管理,不限时长
简介: 为了提升运维开发人员的开发效率,降低开发的难度,阿里云推出了资源编排(Resource Orchestration Service,简称ROS),和运维编排Operation Orchestration Service,简称OOS)这两个编排平台。作为平台级的产品,阿里云会负责保证其稳定可靠,用户只需要按照平台的规则制定自己的运维逻辑。

  运维,是从IT诞生起就一直存在的重要角色,为软硬件系统的整体稳定性、效率、安全等指标负责。最近几年,伴随着云计算和DevOps的广泛应用,运维更是成了舞台中央最亮眼的主角之一。

  值得关注的是,云时代的运维,正在颠覆传统的运维。传统的运维,需要能够手动操作来自众多厂家的计算、网络、存储等软硬件,并为此学习传统“大厂”的众多认证,例如,数据库运维要学Oracle的认证,系统运维要学IBM的认证,虚拟化运维要学VMware的认证,等等。但企业上云之后,云厂商将计算、存储、网络的操作全部抽象成了软件定义的API接口,并用统一风格的SDK、命令行进行封装,从而大幅降低了运维操作的门槛。云上的运维人员不再需要感知底层基础设施的细节,更不需要考取高难度的认证。
  当然,云时代也对运维人员提出了新的要求和挑战。首当其冲的,就是DevOps,强调高度的自动化,要求运维人员具备一定的开发技能。以国内最大的云厂商阿里云为例,运维人员需要学习并掌握阿里云主流云产品(云服务器,云数据库,对象存储,专有网络等等)的API,才能从容的根据自己企业的实际运维需要,开发实现自动化运维系统。这样一来,运维操作工程师,就升级成了运维开发工程师。

  既然谈到了运维开发,就离不开编程语言和开发平台。运维开发与普通软件开发不同,对于快速开发的要求应该是第一位的,因为运维开发的需求变化更频繁,开发周期更短,人力也更为紧张。阿里云提供的JavaPythonGo等语言的SDK,虽然能力强大,但是能力过于“原子”。若没有平台的支持,要运维人员自己从头搭建一个自动化运维系统,并保证其高效稳定持续运行,难度和投入都很大。为了保证生产系统的稳定,创造了一个运维系统,那么,谁来保证这个运维系统的稳定呢?这是一个悖论。

  为了进一步的提升运维开发人员的开发效率,降低开发的难度,阿里云推出了资源编排(Resource Orchestration Service,简称ROS),和运维编排Operation Orchestration Service,简称OOS)这两个编排平台。作为平台级的产品,阿里云会负责保证其稳定可靠,用户只需要按照平台的规则制定自己的运维逻辑。那么什么是编排呢?编排来源于交响乐,是指通过编曲,把各种不同乐器的演奏,和谐的融合在一起。运维开发人员,就像交响乐作曲家,通过编写YAML格式的编排模板,把各种不同的资源、配置、动作,串联在一起。

  先来说资源编排ROS。假设一个场景,在阿里云上搭建一个经典的三层在线服务:前面是SLB负载均衡,中间是若干台ECS作为一个服务集群,后面再挂接一套RDS数据库。当然,你还需为这三层分别各自创建一个VPC,通过安全组设置安全规则。在业务初期你可能只需要两台ECS,但很快会扩大到3台、4台。按照传统的运维思维,需要给系统下达原子的命令:今天创建一台,明天再创建一台。但是按照ROS声明式的语法,运维开发人员只需要指定自己当前的资源需要。比如把MaxAmount值从3改成5(见如下例子),ROS会自动新建两台ECS。再比如把MaxAmount从3改成2,ROS会自动释放其中一台ECS。我们把这种全自动的管理资源的生命周期的方式,叫做“基础设施即代码”。

Resources:
  InstanceGroup:
    Type: 'ALIYUN::ECS::InstanceGroup'
    Properties:
      MaxAmount: 3
      InstanceType:
        Ref: InstanceType
      ImageId:
        Ref: ImageId
      SecurityGroupId:
        Ref: SecurityGroupId
      VSwitchId:
        Ref: VSwitchId

  运维是一个非常广泛的概念,资源的生命周期管理,只是其中一小部分。运维,还涉及到了监控、故障处理、持续发布、资源分组、审计等等各种需求。为了满足普适的运维需要,阿里云推出了运维编排(OOS)产品。同样是基于YAML的编排,但是与ROS不同的是,OOS编排的是一个个的原子动作(API)。几乎所有阿里云控制台上的操作,都可以通过OpenAPI来完成,而几乎所有的API动作,都可以通过OOS来完成,因此,我们可以说,所有的阿里云上的运维动作,都可以通过OOS来自动化完成。不仅如此,阿里云OOS还内置了三个强大的运维功能:定时任务、事件触发器和云助手命令。定时任务很容易理解,用户只需要编写cron表达式,OOS就会精确地定时触发,例如,每天早晨八点开启服务器。事件触发器可以跟云监控的事件(或者告警)相结合,实现“事件驱动”的自动化运维,尤其是自动化的故障恢复,运维人员无需关心事件的具体接收过程。云助手命令则可以让开发人员,在无需开启SSH接口的情况下,远程在linux里面执行系统命令。我们举一个事件驱动和云助手结合的例子,当60秒的平均CPU利用率超过90%的时候,重启tomcat服务,OOS模板的示例(节选)如下:

Tasks:
  - Name: alarmTrigger
    Action: 'ACS::AlarmTrigger'
    Properties:
      Namespace: acs_ecs_dashboard
      MetricName: cpu_total
      Statistics: Average
      ComparisonOperator: GreaterThanThreshold
      Threshold: '90'
      Resources: '[{"instanceId":"{{ instanceId }}"}]'
      Period: 60
  - Name: runcommnd
    Action: ACS::ECS::RunCommand
    Properties:
      commandContent: 'service tomcat restart'
      instanceId: '{{ instanceId }}'
      commandType: RunShellScript

  通过上面的例子,我们可以看出,ROS和OOS,可以帮助运维开发人员,以最快的速度和最少的代码,实现常见运维任务的自动化。阿里云官方,为ROS和OOS提供了一系列的公共模板,开源在github上,感兴趣的运维同学们可以阅读学习,或者基于这些现有的模板随意进行二次开发。 
 
ROS公共模板:https://github.com/aliyun/ros-templates   
OOS公共模板:https://github.com/aliyun/oos-templates   

  运维同学可能会想到,能否将ROS和OOS结合使用呢?答案是肯定的。可以在OOS模板里,对ROS进行API调用。具体的实现,还希望聪明的运维同学们参考ROS和OOS的官方帮助文档,自己尝试一下。 

ROS主页:https://www.aliyun.com/product/ros    OOS主页:https://www.aliyun.com/product/oos   

  阿里云正在筹办“弹性计算自动化运维模板挑战赛”。也欢迎运维开发同学们积极参与,奖励丰厚。如有问题,欢迎加入钉钉群咨询。 
 
ROS支持群群号:11783495   
OOS支持群群号 : 23330931

相关实践学习
2分钟自动化部署人生模拟器
本场景将带你借助云效流水线Flow实现人生模拟器小游戏的自动化部署
7天玩转云服务器
云服务器ECS(Elastic Compute Service)是一种弹性可伸缩的计算服务,可降低 IT 成本,提升运维效率。本课程手把手带你了解ECS、掌握基本操作、动手实操快照管理、镜像管理等。了解产品详情: https://www.aliyun.com/product/ecs
目录
相关文章
|
4天前
|
设计模式 前端开发 JavaScript
自动化测试框架设计原则与最佳实践####
本文深入探讨了构建高效、可维护的自动化测试框架的核心原则与策略,旨在为软件测试工程师提供一套系统性的方法指南。通过分析常见误区,结合行业案例,阐述了如何根据项目特性定制自动化策略,优化测试流程,提升测试覆盖率与执行效率。 ####
21 6
|
1月前
|
运维 Linux Apache
,自动化运维成为现代IT基础设施的关键部分。Puppet是一款强大的自动化运维工具
【10月更文挑战第7天】随着云计算和容器化技术的发展,自动化运维成为现代IT基础设施的关键部分。Puppet是一款强大的自动化运维工具,通过定义资源状态和关系,确保系统始终处于期望配置状态。本文介绍Puppet的基本概念、安装配置及使用示例,帮助读者快速掌握Puppet,实现高效自动化运维。
52 4
|
5天前
|
存储 运维 安全
Spring运维之boot项目多环境(yaml 多文件 proerties)及分组管理与开发控制
通过以上措施,可以保证Spring Boot项目的配置管理在专业水准上,并且易于维护和管理,符合搜索引擎收录标准。
17 2
|
5天前
|
机器学习/深度学习 数据采集 人工智能
智能运维:从自动化到AIOps的演进与实践####
本文探讨了智能运维(AIOps)的兴起背景、核心组件及其在现代IT运维中的应用。通过对比传统运维模式,阐述了AIOps如何利用机器学习、大数据分析等技术,实现故障预测、根因分析、自动化修复等功能,从而提升系统稳定性和运维效率。文章还深入分析了实施AIOps面临的挑战与解决方案,并展望了其未来发展趋势。 ####
|
14天前
|
机器学习/深度学习 数据采集 运维
智能化运维:机器学习在故障预测和自动化响应中的应用
智能化运维:机器学习在故障预测和自动化响应中的应用
41 4
|
16天前
|
前端开发 数据管理 测试技术
前端自动化测试:Jest与Cypress的实战应用与最佳实践
【10月更文挑战第27天】本文介绍了前端自动化测试中Jest和Cypress的实战应用与最佳实践。Jest适合React应用的单元测试和快照测试,Cypress则擅长端到端测试,模拟用户交互。通过结合使用这两种工具,可以有效提升代码质量和开发效率。最佳实践包括单元测试与集成测试结合、快照测试、并行执行、代码覆盖率分析、测试环境管理和测试数据管理。
32 2
|
17天前
|
前端开发 JavaScript 数据可视化
前端自动化测试:Jest与Cypress的实战应用与最佳实践
【10月更文挑战第26天】前端自动化测试在现代软件开发中至关重要,Jest和Cypress分别是单元测试和端到端测试的流行工具。本文通过解答一系列问题,介绍Jest与Cypress的实战应用与最佳实践,帮助开发者提高测试效率和代码质量。
27 2
|
1月前
|
存储 运维 监控
高效运维:从基础架构到自动化管理的全面指南
【10月更文挑战第11天】 本文将深入探讨如何通过优化基础架构和引入自动化管理来提升企业IT运维效率。我们将从服务器的选择与配置、存储解决方案的评估,到网络的设计与监控,逐一解析每个环节的关键技术点。同时,重点讨论自动化工具在现代运维中的应用,包括配置管理、持续集成与部署(CI/CD)、自动化测试及故障排除等方面。通过实际案例分析,展示这些技术如何协同工作,实现高效的运维管理。无论是IT初学者还是经验丰富的专业人员,都能从中获得有价值的见解和实操经验。
63 1
|
11天前
|
测试技术 持续交付
软件测试中的自动化测试策略与最佳实践
【10月更文挑战第31天】 在当今快速迭代的软件开发环境中,自动化测试成为确保软件质量和加速产品上市的关键。本文探讨了自动化测试的重要性、实施策略以及一些最佳实践。通过分析不同类型的自动化测试工具和框架,本文旨在为软件开发团队提供一套实用的指导方案,以提高测试效率和质量。
|
1月前
|
运维 监控 测试技术
构建高效运维体系:从监控到自动化的实践之路
【10月更文挑战第9天】 在当今信息技术飞速发展的时代,运维作为保障系统稳定性与效率的关键角色,正面临前所未有的挑战。本文将探讨如何通过构建一个高效的运维体系来应对这些挑战,包括监控系统的搭建、自动化工具的应用以及故障应急处理机制的制定。我们将结合具体案例,分析这些措施如何帮助提升系统的可靠性和运维团队的工作效率。
50 1