zoukankan      html  css  js  c++  java
  • 从原子操作走向模板部署,详解云上资源自动化部署新模式

    5 月 29 日,阿里云开发者大会的《应用开发的基础设施云上优化》分论坛上,阿里云技术专家王斌鑫发表了主题为《云上资源自动化部署新模式》的分享,详细阐述了云上资源自动化部署新模式——基于资源编排、Terraform 托管、ROS CDK 的自动化部署最佳实践。

     

    本文根据王斌鑫的演讲整理成文。

    当前云上资源部署模式

    云上资源传统部署模式的挑战

     

    大部分用户一般是通过控制台/API/SDK 等传统模式进行云上资源的部署,这种部署模式会面临规模、效率、规范和成本四个方面的挑战:

    1. 规模上,随着业务的发展需要管理的资源规模不断上升,部署和管理种类繁多的资源带来挑战。

    2. 效率上,随着规模上升,手动批量部署变得难以为继。

    3. 规范上,如何确保对基础设施的变更均符合组织管理规范。

    4. 成本上,手动部署的方式无法极致地利用云上弹性能力,其成本仍有优化空间。

    阿里云自动化部署模式

    资源编排服务(ROS)的核心价值

    面对传统部署模式的挑战,我们在想是否能够帮助客户对云上资源进行自动化部署?因此有了阿里云资源编排服务(ROS),它基于基础设施即代码(IaC)的理念,让开发者和管理员使用模版的方式,编排云上的多种资源,进行自动化部署。

    对比手动部署,使用资源编排服务 ROS 进行自动化部署会带来如下好处:

    效率提升,针对诸如 SAP 这样复杂的解决方案能有效提升部署效率,也能够帮助 MSP、ISV、onECS 服务提升部署效率;

    架构优化,ROS 提供了种类丰富的阿里云最佳实践模板,用户无需丰富的架构经验即可部署解决方案级别的架构;

    流程管控,由 IT 管理员统一管理基础设施以避免各类风险,且可基于模板进行审核再进一步结合 CI/CD 以规范化 IT 管理流程;

    节省成本,自动化部署方式可以按需部署和释放资源,从而极致地使用云上弹性能力来降低成本。

    ROS 的使用流程和核心功能

     

    使用 ROS 进行自动化部署的过程非常简单:

    1. 按照 ROS 模板语法编写模板,定义想要创建的各类云上资源。

    2. 在 ROS 控制台 使用模板创建资源栈,以执行部署。其中,资源栈是一组资源的集合,这些资源均是模板中定义的资源。

    3. 在 ROS 控制台查看资源栈,可以查看栈中各种资源的创建情况,并可以跳转到对应资源的控制台。

    值得一提的是,ROS 服务本身完全免费,集成了身份认证和安全审计的功能,资源创建结果是可视化的,且能够进行多账号跨地域地部署,支持资源栈和实际资源的差异检测并进行修正。

    除了直接使用 ROS 模板来做自动化部署,是否还有别的方式呢?

    新模式一:Terraform 托管

    Terraform 是什么

    Terraform 同 ROS 一样,也是基于基础设施即代码(IaC)的理念的自动化编排工具。它使用一种特定的配置语言(HCL, Hashicorp Configuration Language)来描述基础设施资源,语法样例如上图所示。

    Terraform & ROS

    既然 Terraform 和 ROS 都是基于相同的理念的自动化编排工具,那它们的目标也是一致的,都是为用户打造良好的云上部署体验。

    两者有很多相同之处,比方说 Terraform 的配置文件相当于 ROS 的模板,Terraform 的状态相当于 ROS 的资源栈,Terraform 的 CLI 程序则相当于 ROS 的编排引擎。

    两者也各有优势,Terraform 的语法更简洁,对多云支持地很完善;而 ROS 则提供免费的服务托管,且有云原生的鉴权和审计能力。

    那么是否能够将两者的优势结合呢?因此就有了 Terraform 托管能力。

    Terraform 托管

    用户直接在本地使用 Terraform 时,需要根据当前的操作系统下载对应的 Terraform CLI,编写模板,管理所使用的各类 Provider 的版本,且要管理状态等文件。

    而使用 Terraform 托管功能时,只需在 ROS 的控制台编写 Terraform 模板便可直接部署,后续则通过资源栈来管理模板中定义的资源。底层的各类管理都交给 ROS。

    在使用原理上,ROS 控制台会将 Terraform 模板组合成符合 ROS 语法规范的模板,ROS 服务端会其进行语法校验,生成租户信息,调度到 ROS 的 Terraform 服务进行资源的部署。

    定时与多云场景实践

    我们可以在很多场景中使用 Terraform 托管的功能。

    场景一:定时部署资源

    假设我们需要通过 Terraform 定时部署资源,传统方式下需要本地创建定时任务,执行 Terraform CLI 来做。而在云上,我们可以:

    - 事先编写一个 Terraform 模板,声明想要部署的云资源;

    - 事先编写一个 OOS 运维模板来声明由它调用 ROS 进行资源部署;

    - 在 OOS 中设置为定时执行,OOS 会定时触发 ROS,ROS      则会使用 Terraform 托管功能进行资源部署。

    场景二:多云管理

    如果我们既想要对多种云平台(如阿里云、AWS 等)的资源进行部署,又想有可视化的结果反馈,可以直接编写 Terraform 的模板来声明各个云上资源,并使用 ROS 的 Terraform 托管功能来进行部署。

    Terraofrm 托管总结

    Terraform 托管功能能让用户在云上直接使用 Terraform,和直接使用 ROS 模板部署有一致的控制台体验,且兼容了 ROS 原生的 API,同时兼备了统一的身份认证和权限控制。相比于本地使用 Terraform,不再需要管理多种 Provider 和多个 Terraform CLI 版本。

    新模式二:ROS CDK
    现有资源定义方式的不足

    事实上,通过直接编写 ROS 模板,或者通过可视化编辑器生成模板,然后进行资源部署的方式是能够大大提升资源的部署效率的,但是也有一些不足之处:

    - 缺少对过程式的支持

    - 复杂场景的编写效率较低

    - 对程序的友好性较低

    - 动态性支持较差

    针对这些问题,是否可以更进一步,在模板之上解决这些不足呢?

    ROS CDK 是什么

    ROS CDK 是资源编排(ROS)提供的一种命令行工具和多语言 SDK,利用面向对象的高级抽象模式对云资源进行标准定义,从而快速构建云资源。

    ROS CDK 以应用作为资源管理的入口,一个应用管理多个资源栈,而每个资源栈中则可以有多个构件。构件可以理解为云上资源的组件,能包含一个或多个资源。

    我们可以选择自己熟悉的编程语言(TypeScript/JavaScript/Java/Python/C#)编写应用代码声明想要部署的资源,ROS CDK 会将项目代码转换成 ROS 模板,然后使用该模板进行自动化部署。

    使用步骤和项目生命周期

    ROS CDK 的使用步骤也很简单:

    1. 首先,就是初始化项目,配置阿里云的访问凭证(AccessKey)

    2. 其次,就是编写资源代码和测试用例进行本地测试

    3. 最后,通过 CDK CLI 或者直接程序进行资源部署,并管理资源栈

    在进行部署的阶段,CDK 会根据用户编写的资源代码进行构造,实例化出各种资源对象;然后在准备阶段做终态前的调整(通常由框架自动完成);进而验证各种资源属性,确保能够正确部署;最终合成出一个 ROS 模板,并使用该模板部署为资源栈。

    代码、模板示例

    上图中,左边是 ROS CDK 的资源代码,其中声明了一个 VPC,并使用循环动态生成 3 个 VSwitch。而右边则是由 ROS CDK 生成的 ROS 模板。由此可以看出针对动态生成的场景,ROS CDK 可以大大简化模板编写的复杂度。

    应用程序集成 CDK 实现持续部署场景

    假设我们需要实现一个 CI/CD 系统,能够部署这样的资源架构:使用 API 网关中提供 API,使用函数计算的函数提供业务逻辑,要分别部署测试、预发、线上环境的资源,并且支持从测试发布到预发,从预发部署到线上。

    针对这样的资源架构,在直接使用 ROS 模板的方式中,需要分别为三个环境准备三个模板,而环境间的部署则还需要动态拼接模板,对应用程序来说并不友好。这里就建议使用 ROS CDK,这样应用程序可以根据环境的不同指定对应的变量,生产对应的资源,从而满足环境的动态性部署。

    ROS CDK 总结

    相较于直接使用 ROS 模板部署,使用 ROS CDK 允许开发者选择自己熟悉的编程语言,并能借助其动态特性来实现复杂的编排效果。ROS CDK 能够非常容易地集成到应用程序中,从而能够方便地在程序中进行资源部署。

    总结

    企业上云规模逐渐增大,企业云上资源的部署方式从人工开始走向自动,从单云走向多云,从原子操作走向模板部署。随着基础设施即代码的理念而兴起,资源的部署模式也因场景的不同而不同,总体来说有以下四个部署模式的建议:

    1. 作为入门级用户,只需管理有限几个资源,直接使用控制台的方式是最为简单直观的;

    2. 作为企业 IT 管理员,需管理规模较大的云上资源,使用 ROS 模板管理基础设施会是最有效率的选择;

    3. 作为运维研发人员,需要在业务系统中实现资源部署逻辑,那么 ROS CDK 会是最佳选择;

    4. 作为多云管理员,需可视化管理阿里云、AWS、Azure 等多种云的资源,使用 ROS Terraform 托管功能是不二之选。

  • 相关阅读:
    设计模式-14-桥接模式
    设计模式-13-中介者模式
    设计模式-12-命令模式
    设计模式-11-外观模式
    设计模式-10-装饰器
    设计模式-9-模板
    设计模式-8-适配器模式-组合
    设计模式-8-适配器模式-继承
    设计模式-7-策略模式+工厂模式
    设计模式-7-策略模式
  • 原文地址:https://www.cnblogs.com/tanxingjisuan/p/14874265.html
Copyright © 2011-2022 走看看