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

本文涉及的产品
传统型负载均衡 CLB,每月750个小时 15LCU
应用型负载均衡 ALB,每月750个小时 15LCU
网络型负载均衡 NLB,每月750个小时 15LCU
简介: 2017年在线技术分会——运维/DevOps在线技术峰会上,来自阿里云的黎山分享了利用开源DevOps工具完成云上的自动运维的实践。她首先通过对5个应用场景的分析引出了“自动化能自动化的一切”的理念。然后介绍了使用Terraform和Packer开源工具完成云上自动运维的具体实现过程。

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

 

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

 

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

应用场景分析

应用1

a0c7ba83fdc86264351cfef675dba10cc3ea2bd8

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

应用2

83d40633b6269a2aaa3b1a466094269c2a0b5acd

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

应用3

5296b30825ca85d8d762664a1fbe44ecfac0af49

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

应用4

20b7902ad267a557a03f61bb5a6e44e98d5c2a2f

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

应用5

bc9dd2c69a48d025cfd96a8e7a93372a3e6282c5

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

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

自动化能自动化的一切

d61010b8e4701b93877c923be0dbdbd6e2465300

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

针对场景5的IaC思路

7211509d668b3e102496021e72b3bcf708330d6a

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

Terraform/Packer介绍

5a0cf414c29bf3db306e9a110e00ebb91f3ae489

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

Terraform

257fe4e5e9a61bae20882d093396e801e4548f06

Terraform的安装如上图所示。

0eb54221128269c5fd893b310f085e668df302f5

上图是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做销毁。

ef5b8735bb6a9c934dd5a0b06ff40508d49b13ce

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

Packer

285642ff87ede886ac1275874e25293ef91d6869

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

e81253f47f0f439bd4f7bc144acca91648011d61

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

多个工具组合案例

案例1

627a841d8d4835c9b0f6e3b106adc3f520826a0a

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

案例2

35608ae615a45934456efdcd5f7fdc7ace23a164

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

案例3

418645c981125766d0dbac3da51753ee89909c04

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

总结

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

Reference

相关实践学习
借助OSS搭建在线教育视频课程分享网站
本教程介绍如何基于云服务器ECS和对象存储OSS,搭建一个在线教育视频课程分享网站。
7天玩转云服务器
云服务器ECS(Elastic Compute Service)是一种弹性可伸缩的计算服务,可降低 IT 成本,提升运维效率。本课程手把手带你了解ECS、掌握基本操作、动手实操快照管理、镜像管理等。了解产品详情: https://www.aliyun.com/product/ecs
相关文章
|
18天前
|
运维 监控 数据处理
常用的运维工具:基本的命令行工具详解(grep, awk, sed)
常用的运维工具:基本的命令行工具详解(grep, awk, sed)
34 14
常用的运维工具:基本的命令行工具详解(grep, awk, sed)
|
6天前
|
运维 持续交付 开发工具
自动化运维工具:Ansible入门教程
【8月更文挑战第60天】在现代IT运维管理中,自动化工具的使用已成为提高生产效率、减少人为错误和确保环境一致性的重要手段。本文将介绍Ansible——一款流行的开源自动化运维工具,通过其简单易学的语法和强大的功能,帮助读者快速入门并实现自动化部署和管理。我们将从Ansible的基本概念讲起,逐步深入到实际的代码示例,展示如何利用Ansible简化日常的运维任务。无论你是新手还是有经验的系统管理员,这篇文章都将为你提供实用的知识和技巧,让你轻松驾驭Ansible,开启自动化运维之旅。
|
5天前
|
运维 监控 jenkins
自动化运维之路:从脚本到工具的演变
【9月更文挑战第29天】在数字化浪潮中,运维不再是简单的服务器管理。本文将带您穿越自动化运维的发展历程,揭示如何通过技术革新提升效率与可靠性。我们将探索自动化工具如何解放双手,实现快速部署、监控和故障恢复,最终达到高效运维的目标。
|
11天前
|
运维 关系型数据库 MySQL
自动化运维工具:Ansible入门与实践
【9月更文挑战第23天】本文将带你进入自动化运维的世界,以Ansible为例,从基础概念到实际操作,让你轻松掌握自动化运维技能。我们将一起探索如何通过代码实现批量部署、配置管理和任务执行等功能,提高运维效率,减轻工作压力。让我们一起开启自动化运维之旅吧!
|
8天前
|
运维 Prometheus 监控
运维中的自动化工具与实践指南
本文深入探讨了自动化工具在IT运维中的重要性,提供了多种实用工具的推荐与应用实例。通过分析自动化工具如何提升运维效率、减少错误率,我们将揭示其在现代信息技术管理中的核心价值。无论你是IT新手还是经验丰富的专家,都能从中汲取到有益的知识,进而提升你的工作效果。
|
15天前
|
机器学习/深度学习 人工智能 运维
自动化运维:从脚本到工具的演进之路
【9月更文挑战第19天】在数字化时代的浪潮中,自动化运维如同一剂强心针,赋予IT系统以生命力。本文将带领读者穿梭于自动化运维的历史长河,探索它的起源、成长与变革。我们将一同见证如何从简单的shell脚本起步,逐步演化为复杂的自动化工具和平台。通过深入浅出的语言,我们不仅分享实用的代码示例,还将探讨自动化运维的最佳实践、面临的挑战以及未来的发展趋势。让我们开始这段旅程,解锁自动化运维的秘密,提升你的技术洞察力。
|
17天前
|
存储 运维 网络安全
自动化运维工具:Ansible入门与实践
【9月更文挑战第17天】本文将介绍Ansible的基本概念、安装和简单使用,以及如何编写一个简单的Ansible playbook。通过本文,您可以了解到Ansible的基本原理和使用方法,以及如何在实际工作中应用Ansible进行自动化运维。
|
26天前
|
弹性计算 持续交付 API
基于 ROS 的Terraform托管服务轻松部署ChatGLM-6B
文章介绍了如何利用ROS和Terraform模板轻松自动化部署基于GLM架构、优化中文对话的ChatGLM-6B模型至阿里云,提高了部署效率与便捷性,适用于多种应用场景,且模型部署过程详细,彰显了基础设施即代码(IaC)的优势。
33 3
基于 ROS 的Terraform托管服务轻松部署ChatGLM-6B
|
26天前
|
弹性计算 人工智能 持续交付
基于 ROS 的Terraform托管服务轻松部署Qwen-7B-Chat
文章介绍了如何利用ROS和Terraform模板轻松自动化部署阿里云的Qwen-7B-Chat大语言模型服务,提高了部署效率与便捷性,是实现云资源和服务快速上线的最佳实践。
44 2
基于 ROS 的Terraform托管服务轻松部署Qwen-7B-Chat
|
4月前
|
弹性计算 API 持续交付
基于 ROS 的 Terraform 托管服务轻松部署文本转语音系统 ChatTTS
基于 IaC 的理念,通过定义一个模板,使用 ROS 提供的 Terraform 托管服务进行自动化部署,可以非常高效快捷地部署任意云资源和应用(比如 ChatTTS 服务)。相比于手动部署或者通过 API、SDK 的部署方式,有着高效、稳定等诸多优势,也是服务上云的最佳实践。
57 1
基于 ROS 的 Terraform 托管服务轻松部署文本转语音系统 ChatTTS

推荐镜像

更多
下一篇
无影云桌面