云上自动化资源架构和变更实践

本文涉及的产品
云服务器 ECS,每月免费额度280元 3个月
云服务器ECS,u1 2核4GB 1个月
简介: 云栖TechDay41期,阿里云高级技术专家董孝带来云上自动化资源架构和变更实践。在业务转型互联网+或是+互联网的时代,企业上云已成定局。但上云之后,如何管理云计算基础设施?如何实现云原生架构的交付?本次以开源技术工具Terraform、Packer、Jenkins、Docker为例,分享一个Multi-Cloud下的基础设施和应用自动化管理方案。

云栖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整个环节,从提交代码到最后运营监控的整个环节。

556b36c00a2e601656c36c3a386648a82dfb5d31

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

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

5ac85ac1bc5550dd89e3da0bc96fbb89570d8ff8

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

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

ee56bc0a2f89ee25154b6b832fc6858a6fc4adc1

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

55be50e518d69a00bbf8720100a95cd6c729b02b

在这个过程中,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能很方便的管理阿里云上的所有主流资源。

84a269e01644db4455ac28b06c3e4ecb2f1f1075

992917cf01220ff9233f15687942b9a9c4892e13

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

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

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

d1cda95d1dea3790502a85d973053a4d8189e176

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

3d935ffdccd8e74be1046ea47ae4773f43c0d386

在这个场景中间我们访问一个外部服务,例如我们的ECS上要访问GitHub,在传统模式下,我们需要直接用不加密的方式放到ECS上,如果这样你的ECS被攻破的话,那么黑客就可以访问你的GitHub了。但是在这种模式下,首先从阿里云的Keypair服务得到一个Keypair,然后使用KMS进行加密私池,加密后放到ECS上,然后通过KMS的RAMpolicy把RAMRole赋给ECS,当你需要去访问Git的时候,它就会从KMS去解密你的私池,然后通过公池就能连接起来,这样在整个过程中你的私池是被加密的,即使拿到加密的私池也无法访问你的GitHub,整个复杂的场景我们也可以通过简单的Terraform模板来完成。

 

容器服务

3ac1a28a781e741531932276551e2506ee08b2ac

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

20938a9328fc1a1301952a502729a66a4dcf5038

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

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

 

总结

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

容量规划,因为在云上我们可以快速以分钟级创建资源,所以我们并不需要过多的考虑怎么样扩容,我们是按需来规划,我们当前需要多少就规划多少,那么就把一个拍脑袋来规划容量的事情变成当前可及的事情。

采购计划也相对简单,不需要准备机房、布置网络、安装软硬件这些工作,如果我们采用Packer的模板来创建基础设施,也可以一键来准备这些东西,将一个几小时或者几周时间变成分钟级的任务。

如果采用CodePipeline等类似的SaaS服务,我们也不需要准备应用的构建和部署工具。因为我们可以很方便的去派生一套新的环境,如果我们需要一套干净的环境时候,我们就可以很快在分钟级来创建这些资源。不用应对开发和测试运营之间因为环境一致性引发的各种争论,业务如果要增长要扩容,对于云上也是Terraform一个简单的命令能完成的事情,所以在云上基础设施自动化DevOps,解决了对于线下来说非常难以解决的基础设施自动化的问题。让Dev Ops变得更简单,更方便。

云上DevOps工具提供了覆盖Dev Ops的整个环节,从代码的提交到应用发布的整个生命流程,我们可以有灵活的选择开源工具和专业的产品。我们不仅仅能在同一供应商之间选择,也可以在多个云平台厂商之间进行选择。

 

相关实践学习
Docker镜像管理快速入门
本教程将介绍如何使用Docker构建镜像,并通过阿里云镜像服务分发到ECS服务器,运行该镜像。
容器应用与集群管理
欢迎来到《容器应用与集群管理》课程,本课程是“云原生容器Clouder认证“系列中的第二阶段。课程将向您介绍与容器集群相关的概念和技术,这些概念和技术可以帮助您了解阿里云容器服务ACK/ACK Serverless的使用。同时,本课程也会向您介绍可以采取的工具、方法和可操作步骤,以帮助您了解如何基于容器服务ACK Serverless构建和管理企业级应用。 学习完本课程后,您将能够: 掌握容器集群、容器编排的基本概念 掌握Kubernetes的基础概念及核心思想 掌握阿里云容器服务ACK/ACK Serverless概念及使用方法 基于容器服务ACK Serverless搭建和管理企业级网站应用
相关文章
|
25天前
|
负载均衡 测试技术 持续交付
高效后端开发实践:构建可扩展的微服务架构
在当今快速发展的互联网时代,后端开发扮演着至关重要的角色。本文将重点探讨如何构建可扩展的微服务架构,以及在后端开发中提高效率的一些实践方法。通过合理的架构设计和技术选型,我们可以更好地应对日益复杂的业务需求,实现高效可靠的后端系统。
|
9天前
|
Kubernetes 安全 Java
构建高效微服务架构:从理论到实践
【4月更文挑战第9天】 在当今快速迭代与竞争激烈的软件市场中,微服务架构以其灵活性、可扩展性及容错性,成为众多企业转型的首选。本文将深入探讨如何从零开始构建一个高效的微服务系统,覆盖从概念理解、设计原则、技术选型到部署维护的各个阶段。通过实际案例分析与最佳实践分享,旨在为后端工程师提供一套全面的微服务构建指南,帮助读者在面对复杂系统设计时能够做出明智的决策,并提升系统的可靠性与维护效率。
|
25天前
|
运维 监控 持续交付
构建高效自动化运维体系:策略与实践
在数字化时代,企业IT基础设施的管理和维护变得日益复杂。为了提高效率、降低错误率并快速响应市场变化,构建一个高效的自动化运维体系至关重要。本文将探讨自动化运维的核心策略,并通过实际案例分析展示如何将这些策略应用于日常管理中,以实现IT运维的优化。
15 0
|
26天前
|
消息中间件 敏捷开发 运维
构建高效可靠的微服务架构:策略与实践
随着现代软件开发的复杂性增加,微服务架构逐渐成为企业解决大型应用系统分解、敏捷开发和持续部署问题的有效手段。本文深入探讨了构建一个高效且可靠的微服务架构的关键策略,包括服务的合理划分、通信机制的选择、数据一致性保障以及容错处理。通过分析这些策略在具体案例中的应用,我们旨在为开发者提供一套可行的微服务设计及实施指南。
130 6
|
28天前
|
Cloud Native 安全 持续交付
构建未来:云原生架构的演进与实践
【2月更文挑战第30天】 随着数字化转型的深入,企业对于信息技术的需求日益复杂化和动态化。传统的IT架构已难以满足快速迭代、灵活扩展及成本效率的双重要求。云原生技术作为解决这一矛盾的关键途径,通过容器化、微服务、持续集成/持续部署(CI/CD)等手段,实现了应用的快速开发、部署及运维。本文将探讨云原生架构的最新发展,分析其如何助力企业构建更加灵活、高效的业务系统,并结合实际案例,展示云原生转型过程中的最佳实践和面临的挑战。
|
2天前
|
消息中间件 运维 监控
现代化软件开发中的微服务架构设计与实践
本文将深入探讨现代化软件开发中微服务架构的设计原则和实践经验。通过分析微服务架构的优势、挑战以及常见的设计模式,结合实际案例,帮助开发者更好地理解如何构建可靠、可扩展、高效的微服务系统。
|
2天前
|
负载均衡 Java 开发者
细解微服务架构实践:如何使用Spring Cloud进行Java微服务治理
【4月更文挑战第17天】Spring Cloud是Java微服务治理的首选框架,整合了Eureka(服务发现)、Ribbon(客户端负载均衡)、Hystrix(熔断器)、Zuul(API网关)和Config Server(配置中心)。通过Eureka实现服务注册与发现,Ribbon提供负载均衡,Hystrix实现熔断保护,Zuul作为API网关,Config Server集中管理配置。理解并运用Spring Cloud进行微服务治理是现代Java开发者的关键技能。
|
4天前
|
运维 Kubernetes Devops
构建高效自动化运维体系:DevOps与容器技术融合实践
【4月更文挑战第15天】 在当今快速发展的信息技术时代,传统的IT运维模式已难以满足业务敏捷性的需求。本文旨在探讨如何通过整合DevOps理念和容器技术来构建一个高效的自动化运维体系。文章将详细阐述DevOps的核心原则、容器技术的基础知识,以及两者结合的优势。此外,文中还将分享一系列实践经验,包括持续集成/持续部署(CI/CD)流程的搭建、微服务架构的应用,以及监控和日志管理策略的优化,以期帮助企业实现快速、可靠且安全的软件交付过程。
|
4天前
|
测试技术 持续交付 Docker
Django中的自动化部署与持续集成实践
【4月更文挑战第15天】本文介绍了Django项目中自动化部署与持续集成的实践方法。自动化部署通过选择Ansible、Fabric或Docker等工具,编写部署脚本,配置持续集成工具(如Jenkins、GitLab CI),确保服务器环境一致,实现快速应用上线。持续集成则涉及配置版本控制系统,设置自动化构建和测试,编写全面的测试用例,集成代码质量检查工具,并配置通知机制,以提升代码质量和开发效率。这两者结合能有效提升项目的迭代速度和可靠性。
|
6天前
|
Linux 数据安全/隐私保护
Linux基础与服务器架构综合小实践
【4月更文挑战第9天】Linux基础与服务器架构综合小实践
1191 6

热门文章

最新文章