当前位置: 首页 > 科技观察

云数据中心需要基础设施即代码(IaC)

时间:2023-03-13 01:43:26 科技观察

硬件虚拟化技术的全面普及,催生了云基础设施托管的新一轮机遇。云托管商开始为客户提供对动态基础设施即服务(IaaS)平台的直接访问。随着这些平台的快速增长和基础设施资产的日益复杂,传统系统管理角色的工作内容变得越来越复杂。大规模云基础设施的快速配置和统筹管理成为管理者面临的新问题。持续集成/持续部署(CI/CD)的成功激发了基础设施即代码(IaC)的新思想,即使用代码对基础设施进行建模。DevOps证明只要将代码提交到Gitrepo,然后通过功能分支和pullrequest,就可以建立一个极其高效的工作流。借助这个已经在软件开发自动化领域大放异彩的全新工作流,相信云系统的管理复杂性也将迎刃而解。什么是基础架构即代码?Infrastructureascode是一套IT基础设施管理流程,强调将DevOps软件开发最佳实践引入到云基础设施的资源管理中,包括虚拟机、网络、负载均衡器、数据库等各类基础设施资源,包括联网应用,适合这种新工艺。IaC代表一种配置管理形式,它将组织的基础设施资源编码成文本文件,并将这些基础设施文件提交给Git等版本控制系统。版本控制repo支持功能分支和拉取请求等工作流,这些是建立CI/CD系统的基本要素。基础设施即代码的实现离不开云基础设施托管平台,尤其是IaaS平台的兴起。IaaS允许我们通过远程API按需提供和申请云资源。这些API本质上是提交给基础设施配置文件的属性设置模板。Iac的自动化获取这些配置文件并针对远程IaaSAPI运行它们。在团队将基础架构配置提交到版本控制repo之后,CI/CD实践可以应用于我们的基础架构更改。基础设施更新也可以遵循DevOps工作流程。如果团队成员编辑其中一个配置文本文件,则可以使用拉取请求和代码审查工作流来审查和验证编辑结果的正确性。基础架构即代码的意义是什么?IaC的不断进化就是为了帮助用户解决“环境漂移”的问题。云应用在其发布生命周期的各个阶段往往都有相互独立的部署环境,包括开发、暂存、生产等环境类型,不同的环境对应不同的网络资源,如应用服务器、负载均衡器、数据库等。当这些特定环境之间的基础设施无法同步时,就会导致所谓的环境漂移。如果没有IaC的支持,基础设施管理将是一个混乱而脆弱的过程。系统管理员只能手动访问远程云服务提供商并使用API或Web仪表板来配置新硬件和资源。这种手动工作流缺乏应用程序基础架构的整体视图,使管理员有可能对一个环境进行更改而忘记对另一个环境进行相应的更改。也正是因为如此,环境漂移才会频繁发生。环境漂移是一种昂贵的商业浪费。错误和失败的根本原因始终是团队在暂存或开发环境中的构建结果与最终部署时的生产环境不同步,迫使成员花费大量时间排查原因并进行弥补。所有缺失的内容。如果没有IaC,基础设施的手动管理在速度方面同样令人抓狂。受环境漂移、流量高峰或其他特定问题的影响,如果我们明确需要对基础设施进行某些改变,系统管理员的响应和适应时间根本无法预测或控制。由此导致的服务中断会削弱客户的信心。在IaC的帮助下,基础??设施可以自动适应配置变化,并通过自动扩展功能对流量高峰做出反应。基础架构即代码还提供了对手动系统管理更好的监督和可见性。基础设施配置文件提交到中央版本控制repo后,所有团队成员都可以查看和编辑基础设施数据,从而实现强大的审计能力。例如,如果一个团队接受PCI合规性审计,则应该清楚基础设施的某些部分是否使用SSL加密。在IaC的支持下,可以快速查看SSL是如何配置的,并执行相关代码,确保当前基础架构与配置文件完全一致,即正确启用了SSL。版本控制提交历史也可以用作日志记录,以查看何时添加更改以及何时删除更改。基础设施即代码如何运作?要完全实现基础架构即代码,我们需要准备一系列依赖项。第一个也是最重要的依赖项是远程访问托管。配置管理工具需要访问和修改远程主机。如果远程基础设施能够自我管理,我们需要确保团队可以随时访问其配置管理工具。IaaS云托管平台提供API,允许用户根据需要自动创建、删除和修改基础设施资源。配置管理工具也可以访问这些API,从而自动执行相关的操作任务。目前流行的IaaS平台包括DigitalOcean、AmazonAWS和MicrosoftAzure。实施IaC的下一个要求是一个工具套件,它与IaaSAPI接口并负责自动执行例行任务。当然,团队可以独立打造一套脚本和工具,但这会带来大量的开发负担和后续的维护成本,投资回报往往不高。市场上已经有多种开源配置管理平台可以满足此类需求,包括Terraform、Ansible、SaltStack和Chef。最后是版本控制系统。配置管理平台使用以标记语言(例如YAMl)编写的文本文件来声明平台将要执行的任务和序列,该文本文件可以被人和机器读取。此类文本文件作为应用程序代码文件存在,并存储在版本控制系统repo中。这套repo相当于集中指定来源,同时支持pullrequests和codereviews。目前最流行的版本控制系统是Git。有了上面的依赖关系,让我们想象一下下面的示例场景,开发人员想要向系统添加新的应用程序服务。下面来看IaC工作流演示:(1)开发者在选择的配置管理平台Terraform中编辑YAML配置文本文件,从而指定想要的新托管服务器。(2)开发者将编辑结果提交到Gitrepo中的feature分支。由于该项目的Git存储库托管在Bitbucket上,因此开发人员打开了一个拉取请求。其他团队成员的任务是审查拉取请求,发现其中包含基础架构更改。后者批准pullrequest,之前的开发者合并提交并合并到repo的master分支中。(3)此时,我们需要使用配置平台进行更新。此更新可以由开发人员手动触发。此场景中的团队正在使用Bitbucket,因此可以访问BitbucketPipelines以使用管道自动执行此步骤。(4)执行完成后,Terraform会与团队的IaaS进行交互。Terraform将针对IaaSAPI执行一系列命令,以确保IaaS与预期的基础设施配置同步。总结IaC是一种高效的配置管理形式,专注于云IT基础设施的自动化管理。IaC部署到位后,可用于实现CI/CD层面的自动化功能,高效调整项目基础架构。IaC还对基础设施变更中的沟通和透明度因素提供了有用的见解。至于实现IaC所需的托管平台、自动化工具等依赖,市场上已经有多家托管厂商提供了丰富的解决方案可供选择。