内容来源:本文内容来源于 黎山在 阿里云栖社区- 运维/DevOps在线技术峰会上的主题演讲,IT大咖说为独家视频合做方。
阅读字数 :2916 | 15分钟阅读
云计算的特色是开箱即用,能够随时的扩缩容,不用考虑硬件的损坏问题,也有丰富的云服务和云平台供咱们选择。在本次演讲中,黎山经过实际应用场景为咱们讲述了基础设施及代码的重要性,以及在云计算的运维中,如何利用工具来实现自动化,提升效率。html
嘉宾分享视频地址:t.cn/RX8IwrAjson
你们好,今天咱们围绕几个议题展开:后端
经过实际的应用场景来说解IaC的重要性。安全
Terraform、Packer的使用介绍。服务器
多个工具组合案例+操做演示。网络
某应用为了增大吞吐量,作了流量的均衡处理,在整个的基础设施架构中,选择了两台ECS挂在SOB的一个基础设施。若是要实现这样的一个架构,须要作如下8个步骤来完成这些基础设施的搭建:建立ECS、建立安全组、添加安全组规则、建立SOB、添加后端服务器、配置监听端口、配置会话保持、添加健康检查。要经过这八个步骤来完成两个ECS挂到SOB上面的基础设施搭建。架构
应用二的特色是须要作网络隔离,因此要把它整个的应用架构搭在VPC下面。它有对外访问网络的需求,同时也有应用对外提供服务。若是要实现这样一个基础设施的话,大的步骤是须要如下七步:建立为PC、建立VSWITCH、建立NET网关、新建共享带宽包、建立ECS、建立SLB、建立SNAT、最后挂载SLB。中间省略了若干个配置操做。并发
应用三与应用二是同样的基础设施要求,就要按照固定的流程再从新作一遍重复的这些操做。app
随着应用的增长和业务的发展,咱们的基础设施的资源也在增长。咱们但愿可以把应用和基础设施作一个分组,也就是经过打标签的方式,把哪些资源属于哪个应用作分类。框架
随着业务的发展,应用二深受市场欢迎,流量也暴增。就须要增长ECS以承载更多的并发和访问量,因此须要扩容一台与线上应用一致的ECS挂载到SOB上面,这里的一个关键点是扩容一台与现上应用一致的ECS。
按照传统的操做方式,先将已经安装好应用的ECS打上快照,而后生成镜像,基于此镜象建立ECS,再添加到SLB当中,一样这里面省略了若干的配置步骤。
场景总结:
经过以上几个场景可知,它们的特色就是,操做流程是有序可循的,而且配置是固定的。若是所有是手工操做的话,会带来如下缺点:效率低、时间长、可能致使错误、变动不能回滚、过程当中没有历史记录、过程不能审计。
针对场景五的IaC思想。场景五的一个需求就是要扩展,扩容一台与线上应用一致的ECS。若是用IaC的思想,操做流程应该是利用Packer建立一个镜像,在打镜像的时候,把提供服务的应用打到镜像当中,而后用Terraform建立ECS以及其余资源。在建立ECS的时候,选择Packer打出来镜像ID。在变动的时候,咱们只须要修改Terraform的模板,把ECS变量的参数加一,执行变动就能够了。就可以实现扩容一台与线上应用一致的ECS而且自动挂载到SLB下面。
它们来自于HashiCorp家族,有两大特色,第一是支持多平台,第二是开源。如今主流的云平台像阿里云、AWS、Azure等都已经支持了。另外一个开源的好处是成熟、透明、可自加强。
Terraform最重要的一点就是模板,模板里面最重要的就是resource。resource是来描述资源,它后面有两个字串。第一个字符串是资源名称,这个名称是固定的;后面的一个串表明的是别名,别名能够自定义。咱们就以这个模板为例来详细讲解一下,怎么经过模板去描述一个把资源的定义。
首先看一下安全组。安全组的规则能够定义出网或者入网规则,它的端口是多少,指定的规则做用在哪个安全组上。也就是对security_group的一个引用,还能够指定它的网段。
对于ECS来说能够指定instance的name,还有它的镜像ID和count。前面说若是应用于场景五,咱们若是想扩容一台的话,咱们就在count数加一,它就会自动建立一台ECS,能够指定这台ECS所依赖的安全组。SLB一样是指定它的name以及网络的收费类型,它是公网SLB仍是私网SLB,还有对它监听的一些配置。
最后一个是SLB的挂载。这里定义了SLB和instance这两个主要的参数,也就是要把哪些instance挂载到SLB下面。
Terraform最重要的三个命令就是PLAN、APPLY和DESTROY。Terraform的意义是执行以后会看到资源的全部的参数值以及要建立哪些资源,若是确认没有问题的话,就执行APPLY去真正的建立这些资源,而后经过DESTROY作销毁。
咱们经过一个实例的操做演示来看一下,建立一个VPC集群的。Terraform在运行时是怎样的状态。这个整个的基础架构是一个VPC集群,有一个子网,子网里面有一个ECS,有安全组、安全组规则,经过NET网关和共享带宽包来实现子网出网和入网的能力。
首先执行Terraform plan。咱们要预览一下要建立哪些资源,一共有八个资源会被添加。确认没有问题的话,咱们去执行Terraform apply,这个时候就会实际的创实际的建立这些资源。建立完成以后会返回带宽包的两个ip以及instance的ID。
Packer主要的思想也是经过模板来定义一些内容,而后建立镜像。Packer会经过模板本身来决定是基于阿里云的基础镜像建立仍是基于自定义镜像建立,而后会自动建立一个经典网络的ECS或者是VPC网络的ECS,同时会根据模板的定义在ECS之上去添加这个去安装相关的应用,而后把ECS打一个快照,根据这个快照生成镜像。当镜像建立完成以后,会把它中间所用到的这些资源都释放掉,能够再作进一步的操做。
Packer模板最重要的就是两部分,一个是builders一个是provisioners。Builders的type来决定她建立的这个镜像是给哪里用的。Provisioners定义的就是镜像中要处理的任务。Packer的命令最主要的就是Packer build的一个指定目录的json。在执行完build以后会提示镜像建立完成并返回镜像ID。
用Packer制做镜像,制做镜像以后会生成镜像ID,而后用Terraform的模板镜像ID建立ECS,这个ECS就自带了所要提供的服务的应用。这个好处就是一次制做重复使用,免去每次建立机器来重复安装服务的过程。也能够用Packer把应用打在镜像当中,而后经过ESS去作伸缩。不少用户在作弹性伸缩的时候呢会遇到一个麻烦,就是在最初的时候,ECS所用到的镜像是只有一个操做系统的镜像,是没有服务的,建立出来以后不可以直接使用。若是结合Packer,Packer把这些应用打在镜像当中,而后用Terraform或其余工具,在用弹性伸缩的时候直接是基于已经安装好应用服务的镜像去作伸缩。另一个工具就是把Terraform和Ansible结合,一块儿去实现这个组合。
自动化的实现路径共有三条主线。第一条线能够利用Packer去而生成镜像,自动的存储到自定义镜像列表当中,而后用Terraform建立更新或者销毁这些基础设施。在建立ECS的时候,咱们能够选择Packer建立出来的那个镜像ID。在运行期咱们可使用Ansible去管理这些基础设施或是ECS上的应用。
用代码描述基础设施的好处就是,代码编写好,验证也是正确的,以后每次执行任务都不会出错,而且快速高效。还能够用代码代替文档,而且也有历史记录,可回滚。不用担忧文档更新不及时或者是人员流动带来的一些问题。并且不用经过访问生产环境就可以知道生产环境上的配置状况,也能够提升整个团队DevOps的能力。
今天的分享就到这,谢谢你们!