天天看点

巧用Terraform和Packer开源工具完成云上自动运维应用场景分析 Terraform/Packer介绍 多个工具组合案例总结Reference

2017年在线技术分会——运维/devops在线技术峰会上,来自阿里云的黎山分享了利用开源devops工具完成云上的自动运维的实践。她首先通过对5个应用场景的分析引出了“自动化能自动化的一切”的理念。然后介绍了使用terraform和packer开源工具完成云上自动运维的具体实现过程。最后对多工具组合案例进行了分享。

以下内容根据直播视频整理而成。

云计算的特点是开箱即用,可以随时扩缩容,不用考虑硬件的损坏问题,而且有丰富的云平台和云产品供选择。

巧用Terraform和Packer开源工具完成云上自动运维应用场景分析 Terraform/Packer介绍 多个工具组合案例总结Reference

某应用1,为了增大吞吐率,做了流量均衡处理、扩大并发数、缩短延迟,选择了将两台ecs挂在一个slb基础设施上的组合。要实现上述架构需要进行以下八个步骤来完成基础设施的构建:创建ecs、创建安全组、添加安全组规则、创建slb、添加后端服务器、配置监听端口、配置会话保持、添加健康检查。

巧用Terraform和Packer开源工具完成云上自动运维应用场景分析 Terraform/Packer介绍 多个工具组合案例总结Reference

应用2的特点是需要做网络隔离,需要将其整个的应用架构搭在vpc网络内,同时有对外网络访问的需求,同时也有应用对外提供服务。所以,整个的架构是vpc下面有两个子网,通过nat网关和共享带宽包提供对外请求,然后通过负载均衡提供入网能力。要实现以上架构需要七个步骤:创建vpc、创建vswitch、创建nat网关、新建共享带宽包、创建ecs、创建slb、创建snat、挂载slb。

巧用Terraform和Packer开源工具完成云上自动运维应用场景分析 Terraform/Packer介绍 多个工具组合案例总结Reference

应用3与应用2的基础设施要求一样。此时需要按照固定流程手工再做一次重复的工作。由于人员流动,文档不全,会导致接手的人需要几天的时间熟悉环境及各种配置。

巧用Terraform和Packer开源工具完成云上自动运维应用场景分析 Terraform/Packer介绍 多个工具组合案例总结Reference

随着应用的增加,ecs、slb等资源也在增加,希望通过“打标签”区分哪些资源属于哪些应用,将资源按照应用分组。此时需要找到资源和应用的对应关系,再把每个资源都打上标签。

巧用Terraform和Packer开源工具完成云上自动运维应用场景分析 Terraform/Packer介绍 多个工具组合案例总结Reference

应用2深受市场欢迎,流量暴增,需要增加ecs以承载更多的并发和访问量,需要扩容一台与线上应用一致的ecs,挂载到slb上。此时,需要四步来完成上述任务:将应用的ecs打快照、生成镜像、基于此镜像创建ecs、添加到slb。

通过以上场景分析,我们发现操作流程是有序可循的,配置是固定的。如果全部由手工操作来完成的话,效率低、时间长,可能导致错误,变更不能回滚,过程没有历史记录,过程不能审计(不知道是谁做了什么样的操作)。解决上述问题的方法是自动化。

巧用Terraform和Packer开源工具完成云上自动运维应用场景分析 Terraform/Packer介绍 多个工具组合案例总结Reference

上图有三条主线,第一条是利用packer去生成镜像,自动存储在镜像列表中,用terraform去自动创建更新或者销毁这些基础设施。在创建ecs的时候可以选择packer创建出来的镜像id,同时在运行期可以使用ansible去管理这些基础设置或者管理ecs上面的应用。

巧用Terraform和Packer开源工具完成云上自动运维应用场景分析 Terraform/Packer介绍 多个工具组合案例总结Reference

场景5的需求是扩容一台与线上应用一致的ecs。具体的操作流程是利用packer去创建镜像,把提供服务的应用打到镜像中,用terraform去创建ecs及其他资源,创建ecs的时候选择packer打出来的id。变更的时候只需要修改terraform的模板,把ecs变量的参数加1。

巧用Terraform和Packer开源工具完成云上自动运维应用场景分析 Terraform/Packer介绍 多个工具组合案例总结Reference

他们属于hashicorp家族。他们具有两大特点:支持多平台,开源。

巧用Terraform和Packer开源工具完成云上自动运维应用场景分析 Terraform/Packer介绍 多个工具组合案例总结Reference

terraform的安装如上图所示。

巧用Terraform和Packer开源工具完成云上自动运维应用场景分析 Terraform/Packer介绍 多个工具组合案例总结Reference

上图是terraform的一个模板,其最重要的是resource,其后有两个字串(资源名称是固定的,别名可自定义)。安全组规则中,alicloud_security_group_role是固定的,可以定义安全组的出网入网规则、端口、规则作用的安全组、指定网段。对于ecs实例,可以指定instance的name、镜像id、实例类型、创建的数量(count)、ecs的安全组、收费类型、带宽、是否io优化、是否分配公网ip、可用区、实例的收费类型、系统盘类型等。slb同样可以指定name、收费类型等。slb挂载定义了slb和instance的主要参数。

terraform最重要的三个命令是plan、apply和destroy,plan命令会在执行之后看到参数的所有值以及要创建哪些资源,如果没有问题的话就执行apply去真正创建这些资源,可以通过destroy做销毁。

巧用Terraform和Packer开源工具完成云上自动运维应用场景分析 Terraform/Packer介绍 多个工具组合案例总结Reference

上图是vpc集群的资源拓扑图,从下往上有vpc、vswitch,有安全组的规则作用在安全组上,vswitch下有两个实例,即别名worker的ecs实例和别名为master的ecs实例。eip绑定在别名为master的实例上,自定义路由的下一跳指定的是别名为master的实例。

巧用Terraform和Packer开源工具完成云上自动运维应用场景分析 Terraform/Packer介绍 多个工具组合案例总结Reference

packer主要的思想是通过模板来定义一些内容然后创建镜像。在此过程中,packer支持基于创建阿里云基础镜像创建镜像,以及基于自定义镜像创建镜像,会根据模板定义自动创建经典网络ecs或者是vpc网络的ecs。在ecs之上安装相关的应用,并把ecs打一个快照,根据快照生成镜像,当镜像创建完成之后释放掉过程中创建过的资源,最后还可以做进一步的操作,比如弹性伸缩、共享镜像、复制镜像。

巧用Terraform和Packer开源工具完成云上自动运维应用场景分析 Terraform/Packer介绍 多个工具组合案例总结Reference

上图是packer的典型模板,最重要的是builders和provisioners。builders的type决定镜像的用处,provisioners里面定义镜像要做的任务。

巧用Terraform和Packer开源工具完成云上自动运维应用场景分析 Terraform/Packer介绍 多个工具组合案例总结Reference

可以利用packer制作镜像,生成镜像id,然后用terraform的模板指定镜像id,创建ecs,这个ecs就自带了所要提供应用的服务。这种方案的好处是一次制作、重复利用,免去每次创建机器、安装服务的重复过程。

巧用Terraform和Packer开源工具完成云上自动运维应用场景分析 Terraform/Packer介绍 多个工具组合案例总结Reference

可以利用packer把应用打在镜像中,通过ess做伸缩,可以用terraform创建ess的模板做弹性伸缩。很多用户做弹性伸缩的过程中很麻烦的一点是在最初的时候ecs所用的镜像是基础镜像(只有一个操作系统的镜像),那么弹出来的机器是不能提供服务的实例,结合packer则可以解决这个问题。

巧用Terraform和Packer开源工具完成云上自动运维应用场景分析 Terraform/Packer介绍 多个工具组合案例总结Reference

将terraform和ansible做结合。terraform在执行完成之后会在本地生成一个tfstate文件,利用开源插件terraform inventory可以通过tfstate生成ansible inventory(用来做机器分组)。ansible可以通过读inventory文件对指定的分组做管理或应用配置。

前面的思想可以归纳为一句话:自动化能自动化的一切。其优点是:用代码描述基础设施的创建、变更、销毁;代码编写好,验证也是正确的,之后每次执行任务都不会出错;非常快速,高效;代码代替文档,有历史记录,可回滚,不用担心文档更新不及时或人员流动带来的“黑盒”问题;不用通过访问生产环境,就能知道生产环境上的配置情况;提高整个团队的devops能力。