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

本文涉及的产品
云服务器 ECS,每月免费额度280元 3个月
云服务器ECS,u1 2核4GB 1个月
简介: 在2017云栖大会·深圳峰会上,来自阿里云云开发的黎山分享了《Multi-Cloud基础设施和应用管理实践》。软件行业的变化、云计算的出现和兴起,推动着越来越多的企业选择Multi-Cloud模式。黎山详细介绍了Terraform和Packer开源工具的使用方法,通过4个案例源码分享了具体的实践过程。

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

 

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

 

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

a716ac9e823da6b9923cfa70aa3059e549eeeea4

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

2617ac213e21c3c24154c480e98a696d009bdabc

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

用工具实现自动化

自动化高于手工

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

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

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

一张图看懂IaC

926f32a33502bbec095d695fe4d2238968d4be36

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

Terraform/Packer的介绍

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

Terraform

3bf49422b4a2191bb00b4123242e2780de78d65b

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

b9789930a3dfc7886c5b9a31e9375f211f7d4aa1

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

d296a2dd8699b8d893fc96e3c923adbac97560ef

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

eedd21ed18ba6f5f7995d749b19ff5d867ef39fc

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

Packer

def3888cf583f9e1cc568bd1a8dbd0bf699fa16e

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

0ba13a58699f0da6c0ea079d59de39303296a1f9

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

5505c845f87f97538505d898de51dd836cb6bb54

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

b2bb648ca8a474d85b06674d40ca7b47f716378e

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

Reference

相关实践学习
一小时快速掌握 SQL 语法
本实验带您学习SQL的基础语法,快速入门SQL。
7天玩转云服务器
云服务器ECS(Elastic Compute Service)是一种弹性可伸缩的计算服务,可降低 IT 成本,提升运维效率。本课程手把手带你了解ECS、掌握基本操作、动手实操快照管理、镜像管理等。了解产品详情: https://www.aliyun.com/product/ecs
相关文章
|
并行计算 Shell 网络安全
利用Packer和Terraform,一键创建即拿即用的迷你并行计算集群
        俗话说的话,没有完整使用过ECS产品的程序员不是好的程序员(好吧,其实是我说的)。当然,控制台操作或者用OpenAPI也没有必要去写一篇文章,所以那就来点儿有意思的。我们来说说,怎么用Packer和Terraform,这两个开源基础架构自动化编排工具,来快速搭建一个即拿即用的迷你并行计算集群(当然,这里的并行计算集群的网络知识普通的以太网互联啦)。
3749 0
|
Web App开发 网络协议 Linux
阿里云平台下Terraform+Packer一键部署WordPress案例
## 前言 前面 [云生态下的基础架构资源管理利器Terraform](https://yq.aliyun.com/articles/215592?spm=5176.8091938.0.0.qNh0er) 一文对Terraform做了产品介绍,包括安装、模板配置文件编写,资源构建与销毁等。这里通过介绍Terraform + Packer 在阿里云平台上一键部署WordPress的案例,以供大家使
2755 0
|
弹性计算 网络协议 Devops
云上DevOps-CodePipeline,Packer和Terraform集成实践探索
DevOps越来越火,各种产品层出不穷,技术人员如果不谈谈这个词,就会显得很落伍了,在这种形势下,阿里云也推出了自己的DevOps公共云产品CodePipeline,本文并不想介绍已经铺天盖地的DevOps概念,而是结合阿里云的产品CodePipeline和开源工具Packer,Terraform来实践一种全新云上的DevOps方案,从构建代码,创建自定义镜像,然后基于包含新应用的镜像来创建运行应用的整个基础设施,包括ECS,VPC网络,安全组等等,然后发布应用,从无到有一键完成。
4861 0
|
弹性计算 运维 Devops
巧用Terraform和Packer开源工具完成云上自动运维
2017年在线技术分会——运维/DevOps在线技术峰会上,来自阿里云的黎山分享了利用开源DevOps工具完成云上的自动运维的实践。她首先通过对5个应用场景的分析引出了“自动化能自动化的一切”的理念。然后介绍了使用Terraform和Packer开源工具完成云上自动运维的具体实现过程。
13422 0
|
数据中心 iOS开发 MacOS
玩转阿里云 Terraform(三):Terraform 的安装和加速
本文以Mac OS为例,详细介绍如何在本地安装Terraform,并在文章最后介绍一种可以加速Terraform安装的方法。
14938 0
|
17天前
|
消息中间件 Kubernetes Kafka
Terraform阿里云创建资源1分钟创建集群一键发布应用Terraform 创建 Kubernetes 集群
Terraform阿里云创建资源1分钟创建集群一键发布应用Terraform 创建 Kubernetes 集群
14 0
|
9月前
|
Kubernetes NoSQL 持续交付
使用Terraform/Ansible/Kubernetes在阿里云上自动部署MongoDB
Terraform, Ansible, Kubernetes, MongoDB, AliCloud
289 1
EMQ
|
存储 JSON 安全
使用 Terraform 在阿里云上快速部署 MQTT 集群
本文将以分布式物联网 MQTT 消息服务器 EMQX 为例,采用阿里云作为公有云平台,介绍如何使用 Terraform 快速部署一个高可用的 MQTT 集群。
EMQ
233 0
使用 Terraform 在阿里云上快速部署 MQTT 集群