概要:
通过把基础设施配置和变更自动化和流水线化,
基础设施即代码极大的改变了基础设施的管理方式。
就在数年前,服务器还常常是放在机房里面的。
为了使业务毫无问题的运行,这需要专用的全职资源来管理服务器和保证24/7的可用性。这时候,系统管理员需要保证服务器的可用性来平滑的运行承载关键业务的应用。
这几年,后端的管理方式发生了翻天覆地的变化。
受惠于云计算和DevOps,服务器管理不再需要全职的管理,也不需要再花费数小时来配置它了。
如今,云计算供应商改变了我们管理基础设施的方式;DevOps则改变了我们开发和部署软件的方式。在软件开发领域,这两项革命性的概念带来了一些物换星移的变化。
DevOps囊括了很多术语、流程、方法和概念,这些术语、过程、方法和概念致力于使软件开发更快、高效和安全。自动化是DevOps的核心;自动化消除了手工的流程并带来了更智慧的工具来使能更快的交付流水线。
基础设施是软件开发中的必要部分,它支撑着整个系统。
在本文中,我们讲讨论这样一个革命性的主题:基础设施即代码(Infrastructure-As-Code)。这有助于你理解软件定义基础设施。
1
什么是基础设施即代码?
它和DevOps的关系如何?
图1 基础设施即代码示意图
简单来说,基础设施即代码是管理基础设施(数据服务器、存储和网络设备)的先进实践。
见名知意,基础设施即代码以代码的方式来设置基础设施,而不是手动的配置硬件和系统。你可以使用机器可读的文件来设置所需要的IT基础设施来测试和运行代码。
2
基础设施即代码和DevOps是什么关系?
说到持续集成/程序交付(CI/CD),基础设施即代码被看作是DevOps的关键实践之一。
持续集成和持续交付是DevOps的关键实践,它们自动化集成和交付流程并创建更快的发布周期。
DevOps的基本目标是在聚焦产品质量的同时在开发中获得敏捷。
当我们讨论更快的发布周期时,我们一直都需要无差错的基础设施组件来促进所需要的测试和生产环境的准备。
就像持续集成和交付一样,基础设施即代码的概念也使得设置基础设施的过程自动化了,从而加加快软件发布速度。
简而言之,基础设施即代码是在组织中实施DevOps的先决条件之一;它视基础设施如软件。
3
为什么需要基础设施即代码?
这里有一些值得注意的点:
-
几年前,软件开发和交付是完全不同的。
-
人们构建软件、测试它,然后把它部署在满足必要需求的物理服务器上来运行。
-
系统管理员、数据库管理员、开发人员和测试人员,这些不同的角色都需要协调一致来在生产环境中部署软件。
-
不同的环境-开发环境、测试环境和生产环境必须是一致的,以便避免在部署过程中出现任何问题。
-
他们常常需要处理版本控制、时区、负载均衡、链接、必要软件包的安装以及一些其他的配置。
-
这种完整的服务器管理和环境设置会花费数个小时,也可能会有人为的错误。这些错误会影响线上环境,导致错误和减慢部署速度。
这些年来,云计算已促成了“硬件虚拟化”。在硬件虚拟化环境中,你不需要管理基础设施;相反,云计算供应商(例如Amazon、Google和IBM)管理你的基础设施以及提供弹性和可扩展性。
另一个改变了基础设施管理方式的概念是DevOps。因为频繁交付和更快部署的需求,手动管理基础设施经常带来问题,因此也导致了更慢的部署节奏。
使用基础设施即代码,你可以在保证可靠性的情况下更快的部署,因为你不需要在各种环境中手动的管理基础设施以及反映基础设施的状态。
有大量的工具可以用于采用基础设施即代码。那些已经采用了基础设施即代码的组织发现这些工具是非常有用的。这些工具极大的减少了工作量而且极大的促进了更快的软件交付。
4
基础设施即代码的好处是什么?
基础设施即代码是和DevOps紧密相联的。因此,对于那些正在开发环境中使用DevOps的组织来说,基础设施即代码带来了巨大的好处。
基础设施即代码常常用于表示物理环境云化实现的过程(请参考这篇文章https://blog.pythian.com/look-current-infrastructure-code-trends/)。
- 使用基础设施即代码带来的主要好处有:
-
更好的系统效能:基础设施即代码让人们及时了解相关领域而规避了风险。而且,它确保了合规和IT基础设施的安全性,也带来了对问题和需求更快的响应。
-
速度:在今天,软件交付/更新的速度被认为是成功背后最重要的因素之一。基础设施即代码通过实现所有IT相关需求而使得可以高速的交付软件。
-
变更管理:在部署到生产环境之前,代码常常被修改和测试。基础设施即代码确保了在不同设备、平台和系统中实现更安全和高效的变更管理。
-
可扩展的基础设施:基础设施即代码为组织带来了极大的扩展性的好处。硬件的虚拟化使得在需要时增加、替换和扩展资源易如反掌。
-
整体的客户满意度:除了节省成本和节省时间,基础设施即代码也极大的提升了客户满意度,因为它能够以可承担的成本交付更快的服务。
而且,这种方法也使得人们更容易采用DevOps,因为它使得开发和部署过程流水线化了。
实施基础设施即代码的团队能够快速而且大规模的交付稳定的环境。团队避免了手动的配置,而且通过使用代码表示环境的期望状态来强制实现了一致性。使用基础设施即代码来部署基础设施是可重复的,也避免由于配置漂移或者缺失依赖导致的运行时问题。DevOps团队可以通过一套统一的实践和工具来协作以快速、可靠和大规模的交付应用以及其支撑的基础设施。—Microsoft Azure DevOps团队首席客户律师
5
如何实施基础设施即代码?
哪些是基础设施即代码的最佳工具?
以下是一些最优秀的工具,你可以在组织中使用它们来实现基础设施的准备:
-
AWS CloudFormation
-
Azure Resource Manager(ARM Templates)
-
Terraform – 开源基础设施即代码工具
-
Google Cloud Deployment Manager
-
Chef – 流行的基础设施即代码工具
-
Ansible – 流行的配置管理工具
以上工具中,有一些是由大型云计算供应商来支持的;有一些属于DevOps工具供应商。
6
基础设施即代码的挑战是什么?
以下是基础设施即代码的一些挑战,它们是采用基础设施即代码的路障:
-
它需要新的技能以使用工具
-
在设置完成后外部的干预导致麻烦
-
需要人力定期的审计基础设施即代码的设置
-
为了获得成果,基础设施即代码需要高效的计划和无差错的执行
-
为了实施基础设施即代码,协作是非常关键的
7
采用基础设施即代码是否对你的组织有益?
采用基础设施即代码减少了复杂度,带来了更快的设置。同时,也要注意,这和几年前维护服务器的方式是不一样的。随着DevOps和云计算的兴起,基础设施即代码为组织带来了一致性和可靠性的好处,但是这取决于需求和恰当的技能集合。
切换到基础设施即代码需要从一开始就有高效的变更管理,也需要使用工具的知识。你可以战略性的规划这种技术栈并对其投资来提供业务效能。有各种工具来帮助你以正确的心态和技能采用基础设施即代码。
你准备好用基础设施即代码来提升IT基础设施的效能了么?