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

本文涉及的产品
资源编排,不限时长
密钥管理服务KMS,1000个密钥,100个凭据,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的整个环节,从代码的提交到应用发布的整个生命流程,我们可以有灵活的选择开源工具和专业的产品。我们不仅仅能在同一供应商之间选择,也可以在多个云平台厂商之间进行选择。

 

相关实践学习
巧用云服务器ECS制作节日贺卡
本场景带您体验如何在一台CentOS 7操作系统的ECS实例上,通过搭建web服务器,上传源码到web容器,制作节日贺卡网页。
容器应用与集群管理
欢迎来到《容器应用与集群管理》课程,本课程是“云原生容器Clouder认证“系列中的第二阶段。课程将向您介绍与容器集群相关的概念和技术,这些概念和技术可以帮助您了解阿里云容器服务ACK/ACK Serverless的使用。同时,本课程也会向您介绍可以采取的工具、方法和可操作步骤,以帮助您了解如何基于容器服务ACK Serverless构建和管理企业级应用。 学习完本课程后,您将能够: 掌握容器集群、容器编排的基本概念 掌握Kubernetes的基础概念及核心思想 掌握阿里云容器服务ACK/ACK Serverless概念及使用方法 基于容器服务ACK Serverless搭建和管理企业级网站应用
相关文章
|
1月前
|
弹性计算 运维 安全
云上DevOps自动化的最佳实践
本文介绍了云上DevOps自动化最佳实践,重点探讨了企业在上云过程中面临的成本管理、运维效率和弹性等问题。通过阿里云的产品和服务,企业可以实现自动化的资源管理、成本优化和高效运维。文章详细阐述了如何利用标签进行成本分析、选择合适的付费类型和实例规格、以及通过弹性伸缩降低成本。此外,还介绍了新功能发布,如统一的实例运维通道界面、AI辅助的运维工具等,帮助企业提升云上业务的管理和运营效率。
|
14天前
|
存储 缓存 关系型数据库
社交软件红包技术解密(六):微信红包系统的存储层架构演进实践
微信红包本质是小额资金在用户帐户流转,有发、抢、拆三大步骤。在这个过程中对事务有高要求,所以订单最终要基于传统的RDBMS,这方面是它的强项,最终订单的存储使用互联网行业最通用的MySQL数据库。支持事务、成熟稳定,我们的团队在MySQL上有长期技术积累。但是传统数据库的扩展性有局限,需要通过架构解决。
54 18
|
28天前
|
搜索推荐 NoSQL Java
微服务架构设计与实践:用Spring Cloud实现抖音的推荐系统
本文基于Spring Cloud实现了一个简化的抖音推荐系统,涵盖用户行为管理、视频资源管理、个性化推荐和实时数据处理四大核心功能。通过Eureka进行服务注册与发现,使用Feign实现服务间调用,并借助Redis缓存用户画像,Kafka传递用户行为数据。文章详细介绍了项目搭建、服务创建及配置过程,包括用户服务、视频服务、推荐服务和数据处理服务的开发步骤。最后,通过业务测试验证了系统的功能,并引入Resilience4j实现服务降级,确保系统在部分服务故障时仍能正常运行。此示例旨在帮助读者理解微服务架构的设计思路与实践方法。
81 16
|
29天前
|
存储 消息中间件 小程序
转转平台IM系统架构设计与实践(一):整体架构设计
本文描述了转转IM为整个平台提供的支撑能力,给出了系统的整体架构设计,分析了系统架构的特性。
65 10
|
1月前
|
负载均衡 Serverless 持续交付
云端问道9期实践教学-省心省钱的云上Serverless高可用架构
详细介绍了云上Serverless高可用架构的一键部署流程
53 10
|
1月前
|
存储 人工智能 运维
面向AI的服务器计算软硬件架构实践和创新
阿里云在新一代通用计算服务器设计中,针对处理器核心数迅速增长(2024年超100核)、超多核心带来的业务和硬件挑战、网络IO与CPU性能增速不匹配、服务器物理机型复杂等问题,推出了磐久F系列通用计算服务器。该系列服务器采用单路设计减少爆炸半径,优化散热支持600瓦TDP,并实现CIPU节点比例灵活配比及部件模块化可插拔设计,提升运维效率和客户响应速度。此外,还介绍了面向AI的服务器架构挑战与软硬件结合创新,包括内存墙问题、板级工程能力挑战以及AI Infra 2.0服务器的开放架构特点。最后,探讨了大模型高效推理中的显存优化和量化压缩技术,旨在降低部署成本并提高系统效率。
|
2月前
|
运维 监控 安全
天财商龙:云上卓越架构治理实践
天财商龙成立于1998年,专注于为餐饮企业提供信息化解决方案,涵盖点餐、收银、供应链和会员系统等。自2013年起逐步实现业务上云,与阿里云合作至今已十年。通过采用阿里云的WA体系,公司在账号管理、安全保障、监控体系和成本管控等方面进行了全面优化,提升了业务稳定性与安全性,并实现了显著的成本节约。未来,公司将持续探索智能化和全球化发展,进一步提升餐饮行业的数字化水平。
|
4月前
|
机器学习/深度学习 人工智能 运维
构建高效运维体系:从自动化到智能化的演进
本文探讨了如何通过自动化和智能化手段,提升IT运维效率与质量。首先介绍了自动化在简化操作、减少错误中的作用;然后阐述了智能化技术如AI在预测故障、优化资源中的应用;最后讨论了如何构建一个既自动化又智能的运维体系,以实现高效、稳定和安全的IT环境。
107 4
|
4月前
|
运维 Linux Apache
,自动化运维成为现代IT基础设施的关键部分。Puppet是一款强大的自动化运维工具
【10月更文挑战第7天】随着云计算和容器化技术的发展,自动化运维成为现代IT基础设施的关键部分。Puppet是一款强大的自动化运维工具,通过定义资源状态和关系,确保系统始终处于期望配置状态。本文介绍Puppet的基本概念、安装配置及使用示例,帮助读者快速掌握Puppet,实现高效自动化运维。
95 4
|
19天前
|
机器学习/深度学习 人工智能 运维
基于AI的自动化事件响应:智慧运维新时代
基于AI的自动化事件响应:智慧运维新时代
83 11