基础设施代码化(Infrastructure as Code),你用对了吗—— 基础设施代码化的CI/CD最佳实践

简介: 本文重点介绍资源编排服务(Resource Orchestration Service, ROS)的CI/CD最佳实践。 ![image.png](https://ata2-img.cn-hangzhou.oss-pub.aliyun-inc.com/db04ac2143a5fefa5bf90145962715e2.png) 小提示:“基础设施”这个词汇有时有点拗口,或者不直观,其实它

本文重点介绍资源编排服务(Resource Orchestration Service, ROS)的CI/CD最佳实践。

image.png

小提示:“基础设施”这个词汇有时有点拗口,或者不直观,其实它就是指系统或应用所依赖的环境,如服务器,数据库等,在云上,环境有各个云产品资源(简称云资源)组成,如服务器是ECS,数据库是RDS,负载均衡是SLB。所以文中会交叉出现“基础设施”和“环境”使用。

资源编排服务ROS和使用场景

资源编排服务ROS是阿里云提供的云资源的自动化部署服务,可以帮忙您实现一键部署系统所依赖的云资源(ECS,RDS,SLB等),以便满足您部署多地域(如北京,上海等),多环境(如测试,预发,生成)的需要。资源编排服务ROS还提供了常见的系统架构,最佳实践,行业解决方案供您参考。ROS控制台:https://rosnext.console.aliyun.com/

上一篇系列文章“云上部署环境(基础设施)的正确姿势——使用资源编排ROS进行基础设施的部署” https://developer.aliyun.com/article/743051 主要向大家介绍了资源编排服务(ROS)的主要用途,即阿里云上的自动化基础架构(环境)部署服务,再次复习ROS的主要几个场景和优点:

  • 可以快速地重复部署,如部署测试、预发和生产环境,尤其适合需要在多地域部署的情况。
  • 可以减少环境之间的偏差,有助于将部署过程和结果尽量标准化,减少因为环境偏差引入的系统问题。
  • 一键部署,极大地提高了部署效率,即可以更快地发布系统和应用。
  • 一键销毁,在测试完成,或蓝绿部署时,一键销毁所有资源,减少资源浪费,彻底净除环境,以便于下次部署。
  • 阿里云ROS提供了最常见的网站,ML架构,最佳实践,方便您尽快地进行测试、验证或建立产品雏形。
  • 最佳实践之基础设施代码化(Infrastructure as Code,IaC)完成度最高且依赖最少的免费服务。(本文介绍的重点)
  • 所有操作都集成访问控制(RAM)和操作审计(ActionTrail),确保基础设施的安全。

资源编排服务ROS的CI/CD最佳实践

常见问题 —— 只用到了Infrastructure as Code的10%

一般的用户在使用资源编排ROS时,只用到ROS的创建云资源过程,这类用户通常参考了一个部署架构示例,然后在ROS的控制台上,或通过ALIYUN CLI,根据此模板创建一个资源栈,即一组根据模板定义所创建出来的资源的组合叫做资源栈(简称Stack),然而在日后的维护过程中,却不再通过修改模板加更新堆栈的方式进行云资源的维护,这样即无法享受到ROS所带来的全部优点 —— 即基础设施代码化(Infrastructure as Code,IaC)。

上面提到的ROS的优点和场景,更多的是从模板化,标准化和可复用化的角度来讲的,这里还将补充代码化带来的好处。

基础设施代码化(Infrastructure as Code)和集成CI/CD的好处

像Review代码一样Review基础设施的模板

总所周知,源代码的管理理论和工具都已经非常成熟,无论是国内外,从创业公司到大型企业,都在使用代码版本管理软件,其中又以Git(以下直接用Git举例)为当今的网红工具。将基础设施模板化,然后再代码化,也是让模板享受和代码一样的流程,这里用了一个简化的git flow(或Github flow)来进行示意:

image.png

模板代码化以后,也需要经历Code Review和测试这样的自动化CICD集成,Code Review以及Git merge这类的流程可以最大程度上保证模板template的正确性,实际的工作中,有些公司在改变系统环境时根本都不审批,即使有些公司有审批工具,其功能的完善程度也很难和Git媲美,Git可以进行模板内容的diff比较,可以回滚,可以有一个统一的t版本号或tagging,可以集成到Pipeline中等等。

将ROS集成到持续部署(CD)中

一般来说,当基础设施(环境)需要变更时,往往需要先变更环境,然后再部署系统(应用)。如果应用的部署发生在环境变更之前,则会导致应用部署失败或不正常工作,因为应用的依赖性还不存在,如新创建了一个数据表。所以,一般来说,都先进行环境的变更,然后再进行应用的变更。

这里要求Pipeline有能力调用资源编排ROS进行部署,当Pipeline检测到ROS模板有变化后,应该调用ROS服务将变更落实到环境中,并且Pipeline有能力把staging的参数传递给ROS,即可使用同一份模板部署多个环境,多个地域,如下图所示。

image.png

一个比较完整的示例流程

该文在最前面的图片,主要展示了基础设施模板的工作流,其他的步骤有所简化,在具体的实施过程,可以有所区别,最大的区别莫过于是选择同一代码库还是将基础设施模板和代码分别放置在2个不同的代码库中,两种方式各有利弊,分别2个代码库时,Pipeline更容易检测是基础设施模板发生了变化还是代码发生了变化。放在一起时,更容易实现整体的蓝绿部署,更加地体现了基础设施和代码构成的整体的一致性,方便整体部署和整体回滚。

始终保持基础设施模板和环境的一致性

有些情况你需要手工去修改环境,如某个故障发生时,此时将造成模板和实际环境的不一致,ROS正在开发的偏差探测(Drift Detection)功能将会提醒存在这种不一致,等到故障出来完毕之后,正确的做法应该同时修改模板,测试模板,然后再次部署一次,如果ROS发现环境已经和模板是一致时,将不会再次修改环境,这是ROS的基本工作原理。但是为了确保ROS的工作方式符合预期,请在测试环境和预发环境进行测试,部分云资源的行为存在少许差异。

一旦基础设施的模板和实际环境发生了偏差,而又不去修正模板,使其和实际环境保持一致时,该文所描述的种种好处将全部消失,即造成了模板和环境之间的中断,偏差累积越多,中断得越是厉害,最终导致模板彻底没用了。

相关实践学习
使用ROS创建VPC和VSwitch
本场景主要介绍如何利用阿里云资源编排服务,定义资源编排模板,实现自动化创建阿里云专有网络和交换机。
ROS入门实践
本课程将基于基础设施即代码 IaC 的理念,介绍阿里云自动化编排服务ROS的概念、功能和使用方式,并通过实际应用场景介绍如何借助ROS实现云资源的自动化部署,使得云上资源部署和运维工作更为高效。
相关文章
|
前端开发 JavaScript Java
RSA加密---前端---后端解密
RSA加密---前端加---后端解密
2531 0
|
Kubernetes Go Docker
Kubernetes 内存泄露怎么玩
Kubernetes 内存泄露怎么玩
983 0
|
消息中间件 Java Shell
RocketMQ的broker启动失败解决
RocketMQ的broker启动失败解决
2609 0
|
10月前
|
缓存 Linux 开发者
Windows 下手动下载安装配置 uv
UV 是专为 Windows 打造的轻量命令行包管理器,仅需 uv.exe 和 uvx.exe 两个文件,无需 WSL 或管理员权限。支持一键安装、卸载、多版本切换 Python 等工具,内置依赖解析与缓存管理,搭配国内镜像更高效。绿色无残留,开发者友好,真正实现 Linux 般丝滑体验。
8762 3
|
4月前
|
JavaScript 前端开发 机器人
Scratch少儿编程软件下载安装使用教程(2026最新版)
Scratch是由MIT媒体实验室开发的免费图形化编程工具,面向8-16岁青少年。无需写代码,拖拽彩色积木即可创作动画、游戏与交互故事,零英语基础也能上手,全球超1亿项目共享。(239字)
|
Prometheus Kubernetes 负载均衡
Opentelemetry collector用法
本文详细介绍了Opentelemetry Collector的使用方法及其各个组件(receiver、processor、exporter、connector和服务配置)的功能与配置。Collector的核心组件通过官方仓库提供丰富的实现,涵盖了认证、健康监控等功能。
3050 63
Opentelemetry collector用法
|
缓存 负载均衡 应用服务中间件
uWSGI的配置及使用
uWSGI是一个功能强大的Web服务器和应用服务器,主要用于实现Python Web应用与Web服务器之间的通信。它遵循WSGI(Web Server Gateway Interface)规范,作为桥梁连接Web服务器(如Nginx)与Python应用(如Django、Flask)。相比开发环境中的简易服务器(如Django的runserver或Flask的Werkzeug),uWSGI在生产环境中具备更强的并发处理能力和更多高级特性,例如负载均衡、缓存等。通过支持多种启动方式(命令行或配置文件)及丰富参数配置,uWSGI可灵活部署于实际项目中,满足高性能需求。
2062 4
|
Linux 虚拟化 iOS开发
VMware Remote Console 13.0.0 for macOS, Linux, Windows - vSphere 虚拟机控制台的桌面客户端
VMware Remote Console 13.0.0 for macOS, Linux, Windows - vSphere 虚拟机控制台的桌面客户端
3510 1
VMware Remote Console 13.0.0 for macOS, Linux, Windows - vSphere 虚拟机控制台的桌面客户端
|
关系型数据库 MySQL Linux
LAMP和LNMP区别--详解
LAMP和LNMP区别--详解
1249 0
|
缓存 监控 持续交付

热门文章

最新文章