暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

【干货】最全Terraform讲解

达摩院首座 2021-05-01
2749

        我们在谈论DevOps的时候,总是希望开发测试环境可以尽可能地模拟生产环境,以屏蔽环境差异带来的适应性问题。因此开发人员将基础设施编译成代码(IaC)来提供管理、配置和提供应用运行环境的实践、过程和标准。这些代码文件被传送到代码库、管理底层资源的API或主服务器里。

        Terraform就是这样一个IaC工具,可以实现基础设施的自动化管理并且通过开源的状态描述(Declarative)语句实现环境脚本和应用的部署。所谓状态描述(Declarative即只需描述最终所要建成的系统状态,例如“五台SQL Server服务器”,与之相对的是强制性(Imperative)语句,即告诉系统先装Windows,再装.NET,再装SQL Server。总体上说状态描述不需要太多的运维知识(例如组件间的依赖性等)。

        而另一个IaC工具Ansible与之相对采用了强制性(Imperative)语句作为管理受控节点的方式,因此Ansible的使用门槛是高于Terraform的。应该说Ansible更像是系统配置工具,粒度更细,而Terraform更像是环境编排工具,格局更大更多时候两者是处于协同工作的状态。另外,两者都属于轻量级系统,即不需要任何代理就能管理客户端,甚至不需要主服务器,任何PC都可以,因为本地不需要存放任何镜像或应用的安装包,这些都可以通过API委托外部下发。

        那既然作为环境编排工具且没有自己独立的存储空间,Terraform势必要借助云厂商或ISV厂商的安装包和服务,其实Terraform很早就开始了自己的生态建设,世界主流的云厂商和技术栈都是其合作伙伴,就目前而言有包括Azure、AWS、阿里云、K8S在内的超过100家软件及云厂商的超过1000种资源发布在Terraform平台上,通过简单的配置就可以调用各厂商的资源。

        当然作为环境编排工具,Terraform更适合与平台服务的调度集成,即IaaS和CaaS为主,部分PaaS服务为辅。以微软云为例,Azure向Terraform提供的服务包括虚拟机、存储账号、网络接口、容器实例、容器服务、托管磁盘等平台类基础服务。

        Terraform的生命周期可分为四个阶段,包括初始化(init)、设计(plan)、应用(apply)和销毁(destroy)。

  • 初始化阶段会生成包含所有配置文件的工作目录

  • 计划阶段用于创建一个执行计划,以达到基础设施的期望状态。配置文件为此会做相应变更。

  • 应用阶段对计划中定义的基础设施进行更改,基础设施将达到所期望的状态。

  • 销毁阶段用于删除所有旧的基础架构资源,这些资源在应用阶段后被标记为受污染(tainted)。

        Terraform使用的场景可以是管理现有基础设施,例如我们已经在AWS上部署了虚拟机、网络和Docker,通过Terraform可以批量增加设备,配置安全基线或删减已有设备(而Ansible适合为不同设备推送个性化配置);另一个场景可以是复制基础设施,例如将运行成熟的测试环境代码复制到生产环境,仅需调整配置文件中的相应网络配置即可。

        Terraform由两部分组件构成,首先是它的核心(Core),核心接受Terraform的Infra配置文件以及当前环境的现有状态以判断哪些对象需要被创建/更新/销毁;另一部分就是上面所提到的云及软件供应商所提供的资源为Terraform平台提供了安装包。

        点击下方“阅读原文”可查看完整的供应商和资源清单。关于Terraform,您还有什么想了解的都可以私信本座,好的,放假第一天,大家节日快乐哟~

达摩院首座∣关注开源技术



长按,识别二维码,加关注

文章转载自达摩院首座,如果涉嫌侵权,请发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论