自动化AutoTalk第十二期-使用Terraform高效实现云自动化
内容介绍:
一、IaC概述
二、Terraform 简介
三、Terraform核心组件
四、Terraform实现云上自动化的步骤
五、Terraform最佳实践
一、IaC概述
本期课题是使用Terraform高效实现云自动化,首先了解Iac的概念,I是infrastructure是云上的资源,code是代码,基础设施及代码是通过易读的配置文件或者代码来定义和管理基础架构,首先是资源的定义,资源不仅包括云服务器、实例、对象存储空间等Iaas的资源,也包括PasS层的,比如K8S的Namespace。
SaaS层的DNS条目的等抽象的资源,IaC方法分成两类,一种命令式,另一种声名式,命令式主要关注基础设施创建的过程和具体操作,通过代码来描述执行的具体命令,另外一类声明式关注基础设施创建的最终状态和目标,主要通过代码去描述期望的状态,IaC的工具是任何基于编程方法以声明式或者命令式执行、变更或者配置基础架构的框架或者工具,阿里云有一方的工具和三方的工具,比如一方有Ros,是资源编排,三方支持被广泛使用的开源工具Terraform。
二、Terraform 简介
Terraform是HashiCorp公司推出的开源编排工具,阿里云是官方四大MajorProvide之一,Terraform有如下特点,首先在编排方面提供统一的编排语言,就是HCL,也支持Json以代码的方式定义资源,底层对资源的增删改查由云厂商实现。
第二点在管理方面对代码模板的编写,是对资源的定义,对模板的管理是对资源的管理,Terraform本身会解析执行代码,管理资源的状态信息。第三点是在标准方面,以Terraform的资源模型来管理资源、安全审计等能力,和模型对齐,以代码化方式定义。最后是流程,Terraform和vVC以及ITSM、CI/CD等流程做集成,实现云资源的自服务管理,基于流程让整个系统和业务自动化和标准化。
三、Terraform核心组件
下面介绍Terraform核心组件,首先阿里云是hash cop公司的四大major provider之一,provider本质上是云服务商或者Terraform的提供商。实现CRUD接口,并且完成相关API的编排,客户在模板中需指定所使用的provide,目前Terraform支持的provider3000+,另外一个概念resource,一个具体的资源或者服务都定义为资源,可以是IaaS层的资源(如ECS实例、VPC网络)。可以是SaaS层的资源(如DNS路由条目),每个资源都具备完整的CORD的生命周期,在Terraform中,一个资源和另一个资源的关系通常被定义为资源,如磁盘和ECS实例的挂载。
Data Source专门提供对资源的动态查询能力,比如获取存量ECS、可用区、实例规格、实例镜像等,State模板中定义的资源在完成操作之后,将资源属性及其资源管理保存文件中,这个文件称之为状态文件State,State有Local和Remote之分。如OSS、AKS的S3。module是一个资源管理涉及若干个资源封装为一个开箱即用的Package。如写java代码封装一些sdk。这种方式提升通用性、复用性和分享的能力。
Package是Module,下面介绍Terraform主要操作,首先init操作Terraform的初始化,加载模板依赖的Provider 、Provisioner、Module 、Remote State等,是其他所有命令的前提,第二个是plan命令,预览模板中定义的资源,执行plan时,Terraform会创建或者修改资源,apply 是真正的执行创建和变更的操作,destroy 是把模板里面的所有资源销毁掉,import是把没有用Terraform管理的资源导入到State文件里面。同时补充Terraform模板,通过Terraform实现后续资源的持续管理。
四、Terraform实现云上自动化的步骤
下面介绍实现云上自动化的步骤,首先环境准备,比如下载安装Provide和Modul,配置云上厂商的账号和环境,最后下载IDE的插件,帮助方便写Terraform的代码,这个过程参考一些文档或者示例,可以在PlayGround环境里面做一些试运行,比如阿里云Cloud Shell里面集成Terraform,在里面做尝试,调试完做真正的业务的集成,把存量的资源导入到State文件,同时补充模板的信息。这个过程要考虑做代码的组织,通过Modele的方式实现代码的复用。
业务集成的阶段通过测试的手段保证模板最后执行下来的结果是符合预期的,结合开源安全合规的一些组件,实现静态代码的检查。生产环境的配置,比如状态的文件管理Local管理和Remote管理,Remote管理需要开通OSS资源,对状态文件进行配置,把整个Terraform的执行集成到CI/CD的流程。比如阿里云在真正的做资源的创建的时候,有开通和权限的操作,可以前置的封装出来具体的模板,前置去执行,最后持续运行和监控阶段主要关注,
第一点是运营有报错,比如云厂商提供的错误诊断的手段排查问题。
第二点是要针对Terraform的云情况做监控报警。
最后一点是配置漂移,比如Terraform管理资源,同时其他的团队通过控制台做资源的修改或者资源的新建,这一部分资源就不在Terraform的管控范围之内,就叫配置漂移,配置漂移把Terraform模板和云上的资源状态做对齐,否则可能再次执行Terraform有diff信息。如果没有特别关注,比如控制台的通道改动的状态会覆盖掉。
五、Terraform最佳实践
最后关于Terraform使用的最佳实践,主要两点,第一点是推荐用Terraform的时候,结合到具体的代码仓库的管理系统,比如GitLab或者GitHub,把Terraform代码用工具托管,做深基础设施是对代码的管理。同时可以把整个Pipeline的流程封装成一个服务,集成到自服务的门户。比如基础设施团队提供的能力,可以让研发通过服务的方式申请和管理资源,基础平台的团队只需要做代码的Review或者流程的审批,就实现研发团队的资源管控和生产的目标。这种方式主要特点,第一个特点是自服务的能力,让研发团队通过自助的方式做申请和管理,有助于提高资源的管控的效率,如果没有自服务的门户,让研发团队在代码商库里面做提交PR和做代码的审核和合并,最后执行,通过Pipeline的方式去执行Terraform的命令。
第二个特点是把整个的流程,比如Terraform的代码的提交,Terraform的plan的触发器以及apply的具体执行,通过Pipeline的方式编排,实现整个流程标准化,以及整个Terraform能力平台化。第三个特点是通过IaC的管理架构与云平台对接简单,不需要编排大量的API,有效避免资源供给的效率瓶颈。