初始测试版本v1.0 发布于2020/02/20

avatar

Terraform介绍


Terraform 是什么

Terraform是一个IT基础架构自动化编排工具,它的口号是“Write, Plan, and Create Infrastructure as Code”, 是一个“基础设施即代码”工具,类似于AWS CloudFormation,允许您创建、更新和版本控制的AWS基础设施。

Terraform基于AWS Go SDK进行构建,采用HashiCorp配置语言(HCL)对资源进行编排,具体的说就是可以用代码来管理维护IT资源,比如针对AWS,我们可以用它创建、修改或删除 S3 Bucket、Lambda,、EC2、Kinesis、VPC等各种资源。并且在真正运行之前可以看到执行计划(即干运行-dryrun)。由于状态保存到文件中,因此能够离线方式查看资源情况(前提是不要在 Terraform 之外对资源进行修改)。Terraform 配置的状态除了能够保存在本地文件中,也可以保存到 Consul, S3等处。

Terraform是一个高度可扩展的工具,通过Provider来扩展对新的基础架构的支持,几乎支持所有的云服务平台,AWS只是Terraform内建 Providers 中的一种。

Terraform 工具处在什么位置:


avatar

avatar


Terraform的架构:

Terraform本身是基于插件的架构,可扩展性很强,可以方便程序员对Terraform进行扩展。Terraform从逻辑上可以分为两层,核心层(Terraform Core)和插件层(Terraform Provider)。

terraform-architecture

核心层

核心层其实就是terraform的命令行工具,它是用go语言开发的,它负责: 读取.tf代码,并对配置文件和代码进行变量取值替换 资源状态文件管理 依据图论,对代码中创建的资源依赖关系进行分析,并创建依赖关系图谱 根据依赖关系图谱,执行资源先后创建。对于没有依赖关系的资源,会并行进行创建(缺省10个并行进程),这也是Terraform能够高效快速管理云资源的原因。 用RPC调用插件层

插件层

插件层也是由go语言开发的,Terraform有超过200+个不同的插件,它们负责: 接受核心层的RPC调用 具体提供某一项服务的执行

插件层又分两种:

Provider

Provider,负责与外界API的集成,比如腾讯云Provider就提供了在腾讯云创建、修改、删除云资源的功能。这个插件负责和腾讯云API的接口,并提供一层抽象,这样程序员可以在不了解API细节的情况下,通过terraform来编排资源。它负责: 初始化以及外界API通信 外界API的认证 定义云资源与外界服务的关系

Provisioner

Provisioner,负责在资源创建或者删除完成后,执行一些脚本。比如Puppet Provisioner就可以在云虚拟机资源创建完成后,在该资源上下载、安装、配置Puppet agent。

资源状态文件

Terraform初始化以后,会生成一个状态文件,该状态文件记录了最近一次操作的时间、各资源的相关属性、各变量的当前值、状态文件的版本、等等。下一次再操作的时候,terraform首先会把当前状态文件与云服务商上的状态进行一次更新,找出是否后有被删除或者更改了的资源,然后再根据.tf文件,决定那些资源需要删除、更新、创建。操作完成后,会重新生成一个状态文件。

Terraform 的特点:

Infrastructure as Code

Execution Plans

Resource Graph

Change Automation

核心工作流:

Write - Author infrastructure as code.

Plan - Preview changes before applying.

Apply - Provision reproducible infrastructure.

Terraform几个原则:

如果 Create callback 返回 error 或者 nil, 但是没有 SetId, 认为资源未创建,状态不保存.

如果 Create callback 返回 error 或者 nil, 有 SetId, 认为资源创建,状态保存.

如果 Update callback 返回 error 或者 nil, 状态保存, 如果 ID 变空, 认为资源被销毁.

如果 Destroy callback 返回 nil, 认为资源被销毁, 状态被删除.

如果 Destroy callback 返回 error, 认为资源仍存在, 状态保存.

如果 create/update 返回时 partial mode 打开, 只有明确打开的 configuration keys 会被保存, resulting in a partial state.

provider例子的执行流程

avatar


Terraform 开发模式

几种常见开发模式


terraform 单一提交者


terraform 团队协作模式


terraform 多团队协作模式


基于本次项目接触到的工作环境及学习目标

可扩展服务-如下

Ansible - 软件类自动脚本 - aws(cloud类)使用ansible 创建aws相关服务。(terraform,ansible两种方式完成)

jenkins
- terraform 相关配置 -jenkinsfile - 使用jenkins配置github和terraform相关配置(实现plan apply完成aws构建)

nagios - 基本安装配置,监视os级别服务及物理(vm)服务器。 - 监视ecs 及CloudWatch。cloud 云服务商级别的监视连携。 - 后续,可使用zabbix 监视cloudwatch,等相关服务的连携。

td-agent - 基本安装配置 - log文件收集流程及原理 - 数据集中存储到S3 等存储设备

slack - 监视 CloudWatch - 监视 nagios ,zabbix 等相关报警,替代mail发信报警

kibana - 基本概念及使用

EFK 待完成课题 - Elasticsearch、Fluentd、Kibana - 相关概念的理解

商业软件类 - Jira,Confluence - talend - atlassian 相关套件 - Redmine