Multi-Cloud模式下Terraform和Packer开源工具实践分享

在2017云栖大会·深圳峰会上,来自阿里云云开发的黎山分享了《Multi-Cloud基础设施和应用管理实践》。软件行业的变化、云计算的出现和兴起,推动着越来越多的企业选择Multi-Cloud模式。黎山详细介绍了Terraform和Packer开源工具的使用方法,通过4个案例源码分享了具体的实践过程。

 

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

 

软件行业的发展带来的DevOps的变化

在很多年前,软件会被打包成EXE或其他可运行的包,由于网络费用比较高,所以软件以小为美,并且软件功能单一、架构简单,发布周期比较慢。后来,软件行业发生了很大变化,软件开始分层(服务层、UI层等),加入很多日志、服务监控等模块,架构变得异常复杂。同时,云计算开始出现并兴起,我们可以不用再太多考虑机房的硬件设施,云计算也提供了缓存、日志、备份等多种服务,那是不是云计算的出现会让我们安枕无忧?

据调查显示,越来越多的企业选择Multi-Cloud模式,选择Multi-Cloud的原因有很多,比如云计算平台数据中心的访问速度/云服务的性能/可用性(上图是2017年以来云计算大故障事件)、云计算平台的成本、云计算平台的安全性、客户服务质量、本地化、云计算平台的提供商、以及企业自有的数据中心地点。在Multi-Cloud模式下,IaC尤其重要。DevOps职责包括五大部分:开发运维协作;自动化、基础设施即代码;持续集成/测试;持续交付/部署;持续监控/反馈。

用工具实现自动化

自动化高于手工

按照固定流程所进行的手工工作,比如手工回归测试和手工部署工作,无趣、缓慢且无法审计。如果能将其代码化,且用版本控制系统管理起来,并加以自动化,这既能节省以后手工运行的大量时间,又能体验到开发测试和部署脚本工作的乐趣。

基础设施即代码高于手工配置

传统Ops的部署工作有些需要用鼠标在界面上点来点去,效率很低;效率高一些的Ops用了自动化脚本,但很多脚本都没有进行版本控制,更别提针对脚本的自动化测试了。如果能够将基础设施的维护工作都通过编写代码并加以版本控制来完成,那么会带来很多好处,比如Ops可以不用通过访问生产环境,就能知道生产环境上的配置情况;非运维人员如Dev,就有机会去学习这些运维配置代码并且加以修改,提升整个团队的DevOps能力;另外工具能方便地读取这些代码,来自动化地维护基层设施,大幅度提升Ops的工作效率。

一张图看懂IaC

上图中,右下方是基础设施,主线是Packer、Terraform、容器服务、cloud-init,其中每一部分中灰色字体是表示不同的工具但可以实现与其类似的事情。从图中可以看出,我们可以根据代码定义镜像的内容,通过Packer制作镜像存储在一个媒介中;通过代码定义资源的编排,然后通过Terraform将这些资源创建起来;利用应用定义的方式创建基础设施;在资源的运行时期,利用工具配置基础设施。

Terraform/Packer的介绍

Terraform和Packer是来自HashiCorp家族。Packer是镜像制作工具,它基于aliyun的基础镜像或本地镜像,生成自定义镜像。Terraform是资源编排工具,通过模板定义资源的描述,管理资源的创建、更新、销毁全命周期。它们的特点是支持多平台(Aliyun、AWS、Azure、OpenStack、VMWare等)、开源(成熟、透明、可自增强)。

Terraform

Terraform是通过模板来创建资源,创建之后会生成tfstate文件,该文件会作为后期更新、加载资源的依据。

上图左边是Terraform的模板,最主要的是resource,其中“alicloud_instance”表示使用的是阿里云,后面的“instance”是其别名,里面定义了创建ECS镜像的ID、实例类型、创建数量、可用区、安全组、是否IO优化、是否分配IP、ECS的标签。data也是可选的,利用正则表达式过滤,模板就可以使用过滤之后的结果。output是用来方便于整个资源创建后获取信息发布的输出。

Terraform最常用的有三个命令:terraform plan(预览);terraform apply(执行);terraform destroy(销毁)。上图为整个VPC集群创建完成的输出,可以看到ECS的参数、资源状况。

上图是VPC集群资源拓普图,下方有一个VPC,然后有vswitch,VPC内有一个安全组,其上有规则作用,有两台ECS(worker和master),eip作用在别名为master的ECS上,自定义路由也指向了master。

Packer

手动创建镜像的过程是:首先需要自己创建一台ECS,安装好相应组件,打快照,然后创建镜像。Packer的目的是将这些手动的过程自动化起来。Packer通过模板的描述,选择创建经典网络ECS或者VPC网络ECS,然后自动打快照、创建镜像,如果是基于本地镜像的话还会上传镜像到自定义镜像列表中,最后可以共享镜像、复制镜像。

上图右边是Packer的模板,builders的type用来描述是基于阿里云的定义的镜像,下方部分是创建完ECS之后所做的事情。

上图是整个创建的过程,它会把需要的资源都创建起来,然后在对应的机器上安装软件。创建完成之后会把软件卸载掉,最后返回镜像的ID。

实例演示

四个实例演示的模板详情可以通过以下链接查看。

创建ECS、修改标签(TAG)

首先预览一下所有的资源,没有问题的话运行Terraform真正创建资源。将TAG进行修改,再次运行terraform apply会看到资源被改动。

模板地址:https://github.com/alibaba/terraform-provider/tree/master/terraform/examples/alicloud-ecs

创建ECS、创建SLB、挂载ECS

最后修改ECS的数量,再去执行terraform apply的时候,不仅看到有一台ECS添加,并且可以看到其挂载到了SLB上。

模板地址:https://github.com/alibaba/terraform-provider/tree/master/terraform/examples/alicloud-ecs-slb

创建VPC集群、销毁VPC集群

模板地址:https://github.com/alibaba/terraform-provider/tree/master/terraform/examples/alicloud-ecs-vpc-cluster

Packer制作ChefServer镜像、Terraform创建ECS启动ChefServer

模板地址:https://github.com/alibaba/packer-provider/tree/master/examples/alicloud/chef

对于企业,可以基于.tfstate开发自己的应用资源管理系统。以应用的视角,看到应用所依赖的云平台有哪些,以及每个云平台所用到的资源。

Reference

时间: 2024-12-22 14:14:43

Multi-Cloud模式下Terraform和Packer开源工具实践分享的相关文章

巧用Terraform和Packer开源工具完成云上自动运维

2017年在线技术分会--运维/DevOps在线技术峰会上,来自阿里云的黎山分享了利用开源DevOps工具完成云上的自动运维的实践.她首先通过对5个应用场景的分析引出了"自动化能自动化的一切"的理念.然后介绍了使用Terraform和Packer开源工具完成云上自动运维的具体实现过程.最后对多工具组合案例进行了分享.   以下内容根据直播视频整理而成.   云计算的特点是开箱即用,可以随时扩缩容,不用考虑硬件的损坏问题,而且有丰富的云平台和云产品供选择. 应用场景分析 应用1 某应用1

ThinkPHP在Cli模式下使用模板引擎的方法_php实例

本文实例讲述了ThinkPHP在Cli模式下使用模板引擎的方法.分享给大家供大家参考.具体如下: 关于Cli模式与模版引擎,2.1中的手册是这样说明的: Cli模式默认不使用任何模板引擎(可以自己在操作方法里面调用): 但是怎么调用,手册中没有提到.于是自己动手丰衣足食. 在介绍怎么调用之前,简单的说说什么情况可能需要用到模块引擎: 1. 利用dompdf在计划任务自动生成PDF或HTML报告 2. 计划任务发送HTML类型的邮件 3. 后台自动生成静态页面 4. 其他关于模板的后台操作 <?p

你需要了解的开源工具自动化运维阶段

前言 随着各种业务对IT的依赖性渐重以及云计算技术的普及,企业平均的IT基础架构规模正不断扩张. 有些Web 2.0企业可能会需要在两个星期内增加上千台服务器,因此对运维而言,通过手动来一个一个搭建的方法不仅麻烦.效率低下,而且非常不利于维护和扩展. 即使是在传统的企业当中,日常的备份.服务器状态监控和日志,通过手动的方式来进行的效率也很低,是一种人力的浪费.因此,自动化早已是每个运维都必须掌握的看家本领. 在不同的企业中,自动化的规模.需求与实现方式都各不相同,因此在技术细节层面,运维之间很难

解决Virtual PC在XP PAE模式下无法运行的问题

在xp下装了Virtual PC 运行是出现如下提示: Virtual PC 在PAE模式下无法运行 此版本的Virtual PC无法在PAE(物理地址扩展)模式下运行.请恢复到正常状态下来运行Virtual PC 解释: 物理地址扩展 (PAE) 概述 物理地址扩展 (PAE) X86 允许软件使用地址窗口扩展 (AWE) API 集并在具有 Intel Pentium Pro 或更高版本处理器的计算机上运行,而 4 GB 以上物理内存允许将更多物理内存映射为应用程序的虚拟地址空间. 不使用

在Docker Swarm模式下,Docker应用如何实现服务发现

本文讲的是在Docker Swarm模式下,Docker应用如何实现服务发现[编者的话]无论容器是否存在于集群之中,本文将告诉我们如何可靠地连接到它.  [深圳站|3天烧脑式Kubernetes训练营]培训内容包括:Kubernetes概述和架构.部署和核心机制分析.进阶篇--Kubernetes调工作原理及源码分析等. 当我们第一次考虑在生产环境中使用容器时,常常会面对一个问题:当容器运行在一组服务器集群上时,无论它在哪个服务器上,如何让其他实体(人或应用程序)可靠地连接到它.  一定程度上,

[原创]分析解决lvs fullnat模式下后端服务器获取真实IP地址异常问题

摘要 分析解决lvs fullnat模式下少量的请求记录client IP不是用户真实的IP地址问题. 原创文章:来自分析lvs fullnat模式下后端服务器获取真实IP地址异常问题 问题背景 lvs fullnat模式下观察后端服务器realserver http/https业务运行系统日志,有时候可以发现有少量的请求记录的client IP不是用户真实的IP地址(存在但出现的概率很小,增加了问题排查的难度),而是属于lvs主机私有的IP地址.关于fullnat的简介可以参考http://w

解决 Virtual PC 在 XP PAE模式下无法运行的问题

在xp下装了Virtual PC 运行是出现如下提示: Virtual PC 在PAE模式下无法运行 此版本的Virtual PC无法在PAE(物理地址扩展)模式下运行.请恢复到正常状态下来运行Virtual PC 解释: 物理地址扩展 (PAE) 概述 物理地址扩展 (PAE) X86 允许软件使用地址窗口扩展 (AWE) API 集并在具有 Intel Pentium Pro 或更高版本处理器的计算机上运行,而 4 GB 以上物理内存允许将更多物理内存映射为应用程序的虚拟地址空间. 不使用

新闻发布系统,B/S模式下的三层应用

三层的学习已接触四五个月了,最早是在学习VB.NET视频中开始接触的,那时候跟着视频敲了两个例子.再后来,个人机房重构的时候,从三层进步到了七层,此后就觉得我们不能仅仅局限于三层之上. 不过,那些都是C/S模式之下的编程.到现在,接触了B/S模式也一个多月了,第一个牛腩新闻发布系统觉得很是有趣,还是从最基本的开始,下面就一起看看B/S模式下,三层是怎样应用的.这篇博客就以添加新闻的实例来总结. 对于三层的整个过程大家都是很熟悉的了,那么在这里就不再赘述了,直接一层一层来分析. 一.思路整理. U

openvpn tun模式下客户端与内网机器通信

一.实际问题 先来介绍下目前的基本情况,如下: 1.openvpn服务器单网卡,通过硬件防火墙把openvpn服务器的1194端口映射到公网. 2.openvpn服务器所在的网段为192.168.5.1/24网段 3.openvpn客户端获得IP地址为10.8.0.1/24网段 要求10.8.0.1/24网段能访问192.168.5.1/24网段的服务器. 通过前两篇文章,可知我们现在的openvpn客户端已经可以正常连接openvpn服务器,但是还不能和公司内网的其他机器进行正常通信.如下: