云原生学习笔记1:Iac以及Terraform
- 开发公司:HashiCorp
- 入门手册:https://www.terraform.io/intro/index.html
- 官网:https://www.terraform.io/
- Github:https://github.com/hashicorp/terraform
1 功能:
- IaC:infrastructure as code,用代码管理基础设施
- 执行计划:显示terraform apply时执行的操作
- 资源图:构建所有资源的图形
- 变更自动化:基于执行计划和资源图,可以清晰知道要变更的内容和顺序
总结:terraform用于各类基础设施资源初始化,支持多种云平台,支持第三方服务对接
2 使用场景
构建多层应用
- 支持常见的两层应用:webserver tier/ db tier;
- 非常方便扩展其它分层,例如caching tier/ api server tier等
- 自动管理每个分层之间的依赖关系
自助服务集群
- 由工具团队基于terraform开发基础设施管理工具
- 业务部门通过黑盒使用这些工具,管理自己的基础设施
一次性环境
- 通过terraform的配置,能够快速搭建一个生产环境的镜像出来
- 可以用于维护stagging环境或者快速搭建测试环境
SDN
- 通过terraform管理虚拟网络,例如aws 的vpc等
资源调度
- terraform可以通过对接各种公有云的基础设施接口管理基础设施
- terraform还可以跟mesos/yarn/k8s等系统集成,通过terraform调度这些系统里面的资源
多云管理
- 公有云提供的工具一般只能支持自己的公有云平台
- terraform跟公有云无绑定关系,可以通过terraform管理多种公有云资源,例如aws/azure/阿里等
3 竞品对比
- terraform提供关于资源和提供商的弹性抽象
- 模型支持包括物理硬件、虚拟机、容器、dns等资源
- 可以管理单个应用程序到整个数据中心
chef / puppet
- chef/puppet:配置管理工具,一般部署在已经存在的服务器上,进行配置管理工作
- terraform:专注于基础设施的初始化工作,基础设施(例如服务器)初始化完成后,terraform支持集成任意的配置管理工具
cloudformation / heat
- cloudformation:aws提供的IaC工具,基于配置文件,可以快速管理aws资源(创建/更新/销毁等),资源包括虚拟机,auto-scaling策略,load-balance等等
- heat:和cloudformation类似,时openstack中用于创建基础设施的工具
- terraform:与云服务商无绑定关系,可以同时管理多个云服务商,例如aws/azure/ipenstack,同时可以引入第三方服务,例如第三方的dns管理服务
- terraform将计划和执行分开,可以通过terraform plan和graph查看执行的计划和资源图,明确知道即将进行的操作
boto / fog
- boto/fog:api封装不同云平台的一些操作,例如创建一个虚拟机等,同时还有一些工具用于适配不同的云平台的差异,致力于提供统一的api接口
- terraform:希望用户在使用时会知道里面的细节,例如资源是如何被创建、组合、使用等等,而不是提供傻瓜式的api
客户定制解决方案
- 定制解决方案:针对客户场景开发而成,扩展性/维护性较差,新功能引入时需要进行开发,代价较大,如果要覆盖不同的场景(例如不同的基础设施),工具开发成本较大
- terraform:开源、使用简单、扩展性很强,标准统一,无需自己开发和维护
4 案例
4.1 aws 两层结构
- terraform-providers:中集成了当前几乎所有公有云的iac工具实现
- terraform aws 工具集:封装了aws的iac工具实现,例如申请ec2,创建vpc等等
- 编写配置文件:内容为按照手工操作流程,逐个调用aws工具集的工具实现
- terraform init/plan/graph/apply执行即可