【转载】如何用开源工具进行Multi-Cloud的自动化资源架构和变更?

本文涉及的产品
资源编排,不限时长
简介: 本次以开源技术工具Terraform、Packer、Jenkins、Docker为例,分享一个Multi-Cloud下的基础设施和应用自动化管理方案。

阿里云高级技术专家董孝在云栖TechDay41期带来了云上自动化资源架构和变更实践,本文整理字TechDay41期的沙龙内容。在业务转型互联网+或是+互联网的时代,企业上云已成定局。但上云之后,如何管理云计算基础设施?如何实现云原生架构的交付?

本次以开源技术工具Terraform、Packer、Jenkins、Docker为例,分享一个Multi-Cloud下的基础设施和应用自动化管理方案。

为什么上云?

从技术人员的角度来说,上云的因素包括价格、基础设施启动和运行时间、云上具有良好的扩展性、云上具有更好的安全性。

钱从自己家里放到银行一开始也需要建立 一个信任的过程,需要相应法律法规的完善,这样大家才慢慢放心把钱从家里放到银行。而上云同样需要一个过程,大家一开始可能对敏感信息放到云上是有担心的,一方面是技术上的问题,网速不够快,想访问的时候访问不了,一方面法律法规不健全,可能会导致我们的信息泄露。但是随着技术进步和相应法律法规的完善,云一定会像银行一样成为社会的基础设施。

传统模式下上线新业务基础设施准备引发我们的思考,我们需要准备哪一些?我们要进行容量规划,在容量规划方面我们不能只考虑现在,如果业务发展很快的话,还要规划扩容的准备,还要规划测试用多少,应用用多少,服务要有多少,这是一个很困难的过程;容量规划做完了,还要报采购计划,还要准备机房、布置网络等等,还要安装软硬件,准备相应的应用的构建部署工具;在开发应用上线之前,也要应对开发和测试运营之间因为环境一致性引发的各种争论,比如开发人员说软件已经开发好了,结果测试人员说在我的环境下就是运行不好,然后检查发现是因为测试用的是重复的环境,不是一个干净环境,结果造成了数据污染,造成了自己应用在测试的环境下跑不起来,这是环境引发的。在一个传统的环境下我们会遇到各种各样的问题,等到我们把这些问题都解决了,应用上线了,可能几周甚至几个月过去了,有时候可能商机就丧失了。

这些问题都解决后,如果说业务增长迅速需要扩容,或者说我们需要在新的地域来开展我们的业务,那么所有过程又需要重新来一遍,而且这一部分基础设施准备在传统的环境下是不可避免的,流程难以自动化。

DevOps和基础设施自动化

据数据统计,在2015年DevOps的被采纳率是66%,而到了2016年就达到了74%,在这短短的一年间增加了8%,对于现在的企业来说,是否采用DevOps,使用得好不好,不仅仅是企业运行的好坏问题,而是生与死的问题。

什么是DevOps?有人说采用敏捷开发,追求最小的可交付价值,快速的开发敏捷是Dev Ops;也有人说建立良好的监控体系能够自动迅速的反馈提高交付质量就是DevOps;也或者是建立良好的组织和文化,建立企业之间各个部门之间相互良好的沟通方式,以快速交付软件的价值为目的,就是DevOps;还有说DevOps就是打破开发和运营之间的壁垒。那么这些是DevOps吗?

依我看来,DevOps是能够加速从需求收到最后应用和服务交付的一切流程和方法。只有我们采用敏捷的方法,始终追求一个目标,然后建立快速的监控和反馈体系,来提高我们交付的质量,建立企业之间各个部门之间沟通信任的交流环境,以最快的交付服务应用为目的的企业文化,然后基于自动化的工具和服务作为基础来实现目标的快速交付,只有这几个部分有机的组合,才能取得DevOps最大效益。

云上DevOps有哪些优势呢?主要有以下三点:

功能强大

它能够覆盖DevOps整个环节,从提交代码到最后运营监控的整个环节。

我们来看一看在“IaaS”层可以使用Terraform、ROS、ANSIBLE、CHEF和Parker,在传统中我们的基础设施是用配管等等之类的工具来维护的,存在信息更新等等方式的问题,而且使用起来也比较麻烦,而使用IaaS到模式的话,我们创建基础设施也像创建代码一样,比如说我们要创建一个VPC集群,里面要包含哪些机器,要配置一个什么样的网络,怎么样设计安全组规则,在传统模式下需要人去操作,然后通过配管工具来记录的。

而我们首先像写代码一样写出我们的这些需求,写出我们的模板然后直接应用,会在云上创建出各种资源,而且它也会把这些创建资源的结果记录到状态文件里面,我们就知道当前有哪一些文件,哪一些资源,而且在创建资源的时候,有的时候需要维护一个状态,假设我们需要六台虚拟机,如果已经有了三台虚拟机,使用传统模式我们相对要创建三台,而在IaC模式下,使用Terraform模板的话,我们就只需要指定需要六台虚拟机,它就会在云上看当前有多少台,然后产生新的三台,如果到了六台发现业务量下降了,我们只需要两台,那我们就写最终目的是两台,我们不用去计算我们现在有六台,我们要达到两台的目的我们还要减少四台,我们只需要写最终要保留两台,那么它就会自动给我们销毁另外的四台。这样就避免了我们在写代码脚本维护时容易发生的各种错误。而像ANSIBLE、CHEF这些都是大家常用的运维工具,现在在云上也提供了相应的功能,而ROS是阿里提供的跟Terraform相对应的专有产品,能够自动化的一键创建我们的基础设施。Packer是一个创建镜像的IaC工具。

如果大家对于基础设施这一块创建好之后,那么有的企业不关心怎么样去使用基础设施,这个时候我们就可以选择PaaS平台,使用couldfundry,或者说我们使用容器服务来发布我们的应用,用像ContainerService这种。那么当Paas平台都准备好了之后,我的代码怎么样能快速发布到云上?这个时候就有我们的产品CodePipeline可以直接提交代码,然后自动构建,按照我们的指令部署到ContainerService或者我们的ECS上,在这一块CodePipeline在阿里云也提供。这些工具怎么样来支撑完成DevOps的完整流程呢?

从一个Develop提交代码到Github里面去,这个时候webhook就会通知CI Server有代码变化了,你需要去构建。那么CIServer就会从Git上拉起代码,按照事先的指令进行构建,如果构建的过程中发生了错误,它就会通知开发者有错误需要去修正。如果成功之后,对于喜欢使用新技术的人,可能会把构建完的构建物打包成Docker镜像push到Docker Registry里面去,然后进行测试和产品环境的部署,从Docker Registry上pull它的镜像,在各个环节上进行分发。

对于一些企业来说,他们不习惯采用Docker,或者应用已经采用传统物理机,这个时候我们可以将构建物上传到OSS里面去,然后我们的CDServer会将我们的部署物按照我们指定的指令部署到相应的ECS上,或者是物理机上。

在这个过程中,CI、CD我们可以采用Codepipeline来实现,而容器的发布运行环境可以使用容器服务。当我们部署到ECS上的时候,Terraform能够帮助我们快速的一键生成我们所需要的环境。

灵活性&适应性

我们可以自由的选择开源工具和专有的产品,现在广泛使用的DevOps和服务都是支持多云平台的。

灵活性构成的工具里面既有我们自己提供的产品,像ROS、ContainerService、Codepipeline,也有众多的开源产品,是不是我们使用了专有产品就被阿里云绑定了呢?不是的,因为好的服务,其实各个云平台场上都提供了。比如ROS功能在AWS是由CloudFormation来提供的,而ContainerService在AWS也提供了ECS,所以我们采用这些工具并不会被某一云平台锁定,而对于开源部分更是天生就是跨云平台支持的,所以它有良好的适应性,我们并不担心使用这些工具会让我们绑定在某一平台上。

关于Terraform

Terraform是什么呢?

Terraform是一个开源的基础设施编排工具。

  1. 它具备广泛的产品支持。Terraform集成了所有主要的阿里巴巴云服务,能够覆盖90%的需求,在AWS上Terraform更是比较成熟的,基本上所有AWS的服务Terraform都支持,而且谷歌某一项产品要提供云的支持,这个产品如果不支持Terraform是不准发布的。
  2. 我们也提供了丰富的示例。大家可能对Terraform不是很熟,也不知道怎么样去编写Terraform的模板,这不是问题,因为我们在开源仓库里面已经针对我们每一个提供的资源都提供了示例,总计有大于30以上的模板。
  3. Terraform是多云支持的,能够很方便的管理阿里云、AWS、AZure等主流云平台的基础设施。使用Terraform一键打通了阿里云所有的主流产品,使用Terraform能很方便的管理阿里云上的所有主流资源。‘

我们要创建一个VPC集群,我们有哪一些服务呢?我们有ECS服务,我们要创建两台ECS,要在不断的子网中间有统一的安全组,然后设计了通过NET网管进行对外访问,有SNET、DNET来提供网络访问,同时SLB提供负载均衡的服务,health check来检查SLB的健康状况。

大家在使用页面的时候,如果一个两个资源大家都会觉得很简单,按几个button就创建完了,但如果创建一个复杂的环境,使用Terraform可能编写一个模板,然后使用一个简单的命令,这样一个集群就创建好了。如果你需要创建一个新的,只要再执行一次命令就可以重建集群,如果我觉得这个集群现在不用了,Terrafor执行destroy命令,那么整个集群就被销毁了,所有的资源都被释放了,这是很方便的,而且我可以很方便的去查有哪一些资源,从它生成的状态文件里面,我就可以很方便的查到,可以创建哪一些资源组,有哪一些ECS,网络的IP是什么等等,所有的集群信息都在这个状态文件里面。

在我们仓库里面,已经对常用场景提供了模板,大家只要拿下来复制,简单的去修修改改就可以满足你的日常需求了。这样就把我们一个很复杂的基础设计创建过程变成一个简单的命令执行过程。

如果访问一系列服务的时候,我们很关心密码怎么样,比如说我现在作为阿里云上的一个ECS里面的APP,我要访问OSS,在以前我是需要在应用里面放上我访问ECS的AKD的,这是一个不安全的行为,因为如果突破了ECS,那么就有可能会获取到AKD,而现在通过RAM,我们在创建ECS的时候,把相应的RAMROLE绑定到相应的ECS上,那么从这台ECS上去访问我们指定的ECS时候,我们的应用就不需要OSS的密码了,这台机器绑定相应的Role也可以通过一个Terraform的模板完成。

容器服务

使用Terraform能够方便的帮助我们一键创建整个基础设施,而且这种创建是可以重用的,比如说我在北京Region创建的基础设施,然后我的业务扩大了,到海外或者其他的省份创建这种基础设施的话,我们只需要修改Region名字然后pipeline,就可以快速一键复制我们的整个基础设施。而我们的容器服务提供了服务编排,服务发现,自动伸缩,失败调度等等功能,它是无缝的阿里云服务支持,降低客户创建和使用服务的成本。我也可以简单的自己搭建一个容器集群,但是要达到一个生产级的容器服务,然后方便使用相关的各种各样技术还是有一定的门槛的,而容器服务能降低这种门槛。我们自己的CodePipeline里面也使用了我们自己创建的容器服务,在我们build的时候,我们的CodePipeline是一个SaaS服务,怎么样能最大化的实现在构建时候的资源共享?

这个时候我们使用了自己的Container服务来根据需要来动态分配资源完成构建任务,构建结束后,而如果我们要部署到容器也就可以部署到ContainerServers,也可以部署到ECS,我们自己在创建CodePipeline产品的时候,我们的基础设备准备也是为使用Terraform模板来准备的,这样当我们要国际化的时候我们可以很方便的使用Terraform模板来复制我们的基础结构,同时对于部署到ECS的时候,我们可以用Terraform、ROS来创建测试Staging production所需要的各种各样环境。

在CodePipeline服务中,我们的构建是运行在容器中间的,当然容器构建完成的时候,我们就会释放资源,供其他的JOB来使用。

总结

那么以下问题怎么样来解决呢?

  • 通过云服务实现容量规划:因为在云上我们可以快速以分钟级创建资源,并不需要过多的考虑怎么样扩容。我们是按需来规划,我们当前需要多少就规划多少,那么就把一个拍脑袋来规划容量的事情变成当前可及的事情。
  • 云产品的采购计划也相对简单,不需要准备机房、布置网络、安装软硬件这些工作,如果我们采用Packer的模板来创建基础设施,也可以一键来准备这些东西,将一个几小时或者几周时间变成分钟级的任务。
  • 如果采用CodePipeline等类似的SaaS服务,我们也不需要准备应用的构建和部署工具。因为我们可以很方便的去派生一套新的环境,如果我们需要一套干净的环境时候,我们就可以很快在分钟级来创建这些资源。不用应对开发和测试运营之间因为环境一致性引发的各种争论,业务如果要增长要扩容,对于云上也是Terraform一个简单的命令能完成的事情,所以在云上基础设施自动化DevOps,解决了对于线下来说非常难以解决的基础设施自动化的问题。让DevOps变得更简单、更方便。
  • 云上DevOps工具提供了覆盖DevOps的整个环节,从代码的提交到应用发布的整个生命流程,我们可以有灵活的选择开源工具和专业的产品。我们不仅仅能在同一供应商之间选择,也可以在多个云平台厂商之间进行选择。
相关实践学习
巧用云服务器ECS制作节日贺卡
本场景带您体验如何在一台CentOS 7操作系统的ECS实例上,通过搭建web服务器,上传源码到web容器,制作节日贺卡网页。
容器应用与集群管理
欢迎来到《容器应用与集群管理》课程,本课程是“云原生容器Clouder认证“系列中的第二阶段。课程将向您介绍与容器集群相关的概念和技术,这些概念和技术可以帮助您了解阿里云容器服务ACK/ACK Serverless的使用。同时,本课程也会向您介绍可以采取的工具、方法和可操作步骤,以帮助您了解如何基于容器服务ACK Serverless构建和管理企业级应用。 学习完本课程后,您将能够: 掌握容器集群、容器编排的基本概念 掌握Kubernetes的基础概念及核心思想 掌握阿里云容器服务ACK/ACK Serverless概念及使用方法 基于容器服务ACK Serverless搭建和管理企业级网站应用
目录
相关文章
|
1月前
|
运维 Linux Apache
Puppet 作为一款强大的自动化运维工具,被广泛应用于配置管理领域。通过定义资源的状态和关系,Puppet 能够确保系统始终处于期望的配置状态。
Puppet 作为一款强大的自动化运维工具,被广泛应用于配置管理领域。通过定义资源的状态和关系,Puppet 能够确保系统始终处于期望的配置状态。
53 3
|
16天前
|
存储 SQL Apache
Apache Doris 开源最顶级基于MPP架构的高性能实时分析数据库
Apache Doris 是一个基于 MPP 架构的高性能实时分析数据库,以其极高的速度和易用性著称。它支持高并发点查询和复杂分析场景,适用于报表分析、即席查询、数据仓库和数据湖查询加速等。最新发布的 2.0.2 版本在性能、稳定性和多租户支持方面有显著提升。社区活跃,已广泛应用于电商、广告、用户行为分析等领域。
Apache Doris 开源最顶级基于MPP架构的高性能实时分析数据库
|
8天前
|
安全 前端开发 测试技术
如何选择合适的自动化安全测试工具
选择合适的自动化安全测试工具需考虑多个因素,包括项目需求、测试目标、系统类型和技术栈,工具的功能特性、市场评价、成本和许可,以及集成性、误报率、社区支持、易用性和安全性。综合评估这些因素,可确保所选工具满足项目需求和团队能力。
|
9天前
|
运维 Ubuntu 应用服务中间件
自动化运维工具Ansible的实战应用
【10月更文挑战第36天】在现代IT基础设施管理中,自动化运维已成为提升效率、减少人为错误的关键手段。本文通过介绍Ansible这一流行的自动化工具,旨在揭示其在简化日常运维任务中的实际应用价值。文章将围绕Ansible的核心概念、安装配置以及具体使用案例展开,帮助读者构建起自动化运维的初步认识,并激发对更深入内容的学习兴趣。
31 4
|
11天前
|
运维 监控 数据安全/隐私保护
自动化运维工具的设计与实现
【10月更文挑战第34天】在现代IT基础设施管理中,自动化运维工具扮演着至关重要的角色。它们不仅提高了运维效率,还确保了服务的连续性和稳定性。本文将深入探讨如何设计并实现一个自动化运维工具,从需求分析到功能实现,再到最终的测试与部署。我们将通过一个简单的代码示例来展示如何自动执行常见的运维任务,如日志清理和性能监控。文章旨在为读者提供一套完整的方法论,以便他们能够构建自己的自动化运维解决方案。
|
22天前
|
编解码 人工智能 开发者
长短大小样样精通!原始分辨率、超长视频输入:更灵活的全开源多模态架构Oryx
【10月更文挑战第23天】Oryx 是一种新型多模态架构,能够灵活处理各种分辨率的图像和视频数据。其核心创新在于能够对图像和视频进行任意分辨率编码,并通过动态压缩器模块提高处理效率。Oryx 在处理长视觉上下文(如视频)时表现出色,同时在图像、视频和3D多模态理解方面也展现了强大能力。该模型的开源性质为多模态研究社区提供了宝贵资源,但同时也面临一些挑战,如选择合适的分辨率和压缩率以及计算资源的需求。
28 3
|
27天前
|
Kubernetes 持续交付 Docker
探索DevOps实践:利用Docker与Kubernetes实现微服务架构的自动化部署
【10月更文挑战第18天】探索DevOps实践:利用Docker与Kubernetes实现微服务架构的自动化部署
75 2
|
1月前
|
存储 运维 监控
高效运维:从基础架构到自动化管理的全面指南
【10月更文挑战第11天】 本文将深入探讨如何通过优化基础架构和引入自动化管理来提升企业IT运维效率。我们将从服务器的选择与配置、存储解决方案的评估,到网络的设计与监控,逐一解析每个环节的关键技术点。同时,重点讨论自动化工具在现代运维中的应用,包括配置管理、持续集成与部署(CI/CD)、自动化测试及故障排除等方面。通过实际案例分析,展示这些技术如何协同工作,实现高效的运维管理。无论是IT初学者还是经验丰富的专业人员,都能从中获得有价值的见解和实操经验。
69 1
|
1月前
|
运维 关系型数据库 MySQL
自动化运维工具Ansible的实战应用
【10月更文挑战第9天】在现代IT运维领域,效率和可靠性是衡量一个系统是否健康的重要指标。自动化运维工具Ansible因其简洁、易用的特性,成为了众多企业和开发者的首选。本文将通过实际案例,展示如何利用Ansible进行日常的运维任务,包括配置管理、软件部署以及批量操作等,帮助读者深入理解Ansible的应用场景及其带来的效益。
|
16天前
|
NoSQL 测试技术 Go
自动化测试在 Go 开源库中的应用与实践
本文介绍了 Go 语言的自动化测试及其在 `go mongox` 库中的实践。Go 语言通过 `testing` 库和 `go test` 命令提供了简洁高效的测试框架,支持单元测试、集成测试和基准测试。`go mongox` 库通过单元测试和集成测试确保与 MongoDB 交互的正确性和稳定性,使用 Docker Compose 快速搭建测试环境。文章还探讨了表驱动测试、覆盖率检查和 Mock 工具的使用,强调了自动化测试在开源库中的重要性。