DevOps和云生态系统中的基础设施即代码(IaC)

举报
kaliarch 发表于 2022/10/15 14:12:42 2022/10/15
【摘要】 作为代码、配置模板的基础结构,以及此类产品的需求。为了实现理想的DevOps实现所承诺的绝对潜力,利益相关者的工作概况必须是流动的;开发人员应该能够构建和运行他们自己的基础设施,包括他们的环境需求,运营团队应该被授权理解产品,并在必要时识别差距和错误。基础设施即代码(IaC)的概念,又名可编程基础设施,源于这种必要性,并将项目生命周期中基础设施需求的许多维度编译成几行代码。有了IaC,Dev...

作为代码、配置模板的基础结构,以及此类产品的需求。
为了实现理想的DevOps实现所承诺的绝对潜力,利益相关者的工作概况必须是流动的;开发人员应该能够构建和运行他们自己的基础设施,包括他们的环境需求,运营团队应该被授权理解产品,并在必要时识别差距和错误。
基础设施即代码(IaC)的概念,又名可编程基础设施,源于这种必要性,并将项目生命周期中基础设施需求的许多维度编译成几行代码。

有了IaC,DevOps团队可以让运营团队通过每次恢复配置并部署它们来开发和安装环境。这确保了项目团队的部署设置始终完好无损,而不会在发布管道中出现任何环境漂移的风险。
IaC作为一种DevOps概念,正稳步获得大众的欢迎;Forrester Research的一份题为“基础设施即代码:为更快的应用程序交付加油”的报告称,IaC消除了SDLC几个步骤中的摩擦,并促进了开发人员和Ops团队之间更好的协作。虽然该报告的结论是IaC现在已经成为创建一个更加协作和集成的软件交付组织的加速器,但它也建议仅靠IaC工具无法使其成为可能。该报告建议将最新的IaC工具、协作过程和适当的技能转让相结合,以实现完整的DevOps。

基础设施即代码(IAC)工具和产品:

IAC工具分为两大类:配置编排和配置管理。市场上的许多产品,无论是商业产品还是开源产品,都提供了这两种功能。
配置编排工具包括AWS、CloudFormation和TerraForm。此类工具旨在自动化服务器和其他基础设施的部署。像Chef和Puppet这样的配置管理工具旨在帮助配置已配置系统上的软件和系统。
选择工具时,应考虑目标部署。例如,AWS CloudFormation被设计成只在Amazon Web服务上提供和管理基础设施。这很有道理–为什么AWS会支持谷歌云平台?当然,情况并不总是如此:Red Hat的Ansible运行在各种平台上,而不仅仅是Red Hat Enterprise Linux。
像Puppet和Chef这样的第三方工具与内部服务器和多个云提供商的基础设施即服务提供一起工作。以云为中心的Terraform与云无关,允许您同时自动化来自多个云服务提供商的基础架构堆栈,并集成其他第三方服务。

虽然每个工具都有自己的领域特定语言(DSL),但DSL通常基于YAML和/或JSON。例如,Terraform使用自己的DSL,称为Hashicorp配置语言(HCL),它基于JSON。AWS CloudFormation模板可以用YAML和JSON创建。Chef使用Ruby语言,Puppet也是。
今天,通过一系列可用于自动化整个供应过程的工具,IaC变得更加容易访问。

流行的IaC产品:

1.Azure资源管理器(ARM)

微软的IaC工具以Azure资源管理器的形式提供给用户。使用该工具,用户可以通过Azure Resource Manager模板(ARM模板)在一个无缝循环中提供基础结构和处理依赖关系。您的模板使用的资源在JSON中以声明方式描述,您可以在一个ARM模板中声明多个Azure资源来建立整个项目环境。
我们可以重复使用相同的模板无限次,并且总是得到相同的结果。
使用Azure DevOps或VSTS仪表板可视化地监视所有构建和发布,并快速了解环境的整体健康状况和模板的质量。资源管理器还支持服务器实例的分组和组的统一管理。
例如,模板来生成唯一的存储帐户名。

{$schema”: “http://schema.management.azure.com/schemas/2015-01-01/deploymentTemplate.json#",

“contentVersion”: “1.0.0.0”,

“parameters”: {

“location”: {

“type”: “string”

},

“accountType”: {

“type”: “string”

},

“type”: “string”

},

“accessTier”: {

“type”: “string”

},

“minimumTlsVersion”: {

“type”: “string”

},

“supportsHttpsTrafficOnly”: {

“type”: “bool”

},

“allowBlobPublicAccess”: {

“type”: “bool”

}

},

“variables”: {

“storageAccountName”: “[concat(uniqueString(subscription().subscriptionId), ‘storage’)]},

“resources”: [

{

“name”: “[variables(‘storageAccountName’)]”,

“type”: “Microsoft.Storage/storageAccounts”,

“apiVersion”: “2019–06–01”,

“location”: “[parameters(‘location’)]”,

“properties”: {

“accessTier”: “[parameters(‘accessTier’)]”,

“minimumTlsVersion”: “[parameters(‘minimumTlsVersion’)]”,

“supportsHttpsTrafficOnly”: “[parameters(‘supportsHttpsTrafficOnly’)]”,

“allowBlobPublicAccess”: “[parameters(‘allowBlobPublicAccess’)]},

“dependsOn”: [],

“sku”: {

“name”: “[parameters(‘accountType’)]},

“kind”: “[parameters(‘kind’)]”,

“tags”: {}

}

],

“outputs”: {}

}

部署成功后,资源组中只有一个存储帐户。存储帐户名是模板生成的唯一字符串。

2.AWS云形成

这是专门为在AWS云中工作的用户设计的。CloudFormation允许用户在JSON或YAML模板文件中建模他们的基础结构。该服务还添加了自动化功能,以帮助以可重复和可管理的方式部署资源,您只为使用的资源付费,而不是服务本身。根据应用程序规范配置模板后,CloudFormation将为您处理其余的任务。
明文的使用特别方便。如前所述,YAML或JSON都受到支持,从CloudFormation提供的许多模板中可以轻松地在任何复杂程度上建立安全的基础结构模型。

3.Terraform

到目前为止,我们所讨论的前几个IC工具都是针对特定的云环境设计的。由HashiCorp开发的Terraform完全与云无关,它帮助您处理复杂分布式应用程序的大型基础设施,例如,比在特定于云的平台上工作更容易。
Terraform automation有各种形状,并在不同程度上以核心计划/应用周期为重点进行了编排。有些团队在本地运行Terraform,但使用包装器脚本为Terraform设置一个一致的工作目录。其他开发团队完全在Jenkins之类的备用编排工具中运行Terraform。到目前为止,它是这个列表中适应性最强的工具,但随后可能会令人生畏,至少一开始是这样。

Terraform还支持更改和配置预览,此外,它还具有一组用于复制部署和单个服务器实例的功能。Terraform还通过其版本控制和远程状态更进一步,为协同工作的远程团队提供了集中的真理来源。
还有更多的IaC产品,如Puppet、Ansible、Chef和Google Cloud Deployment Manager。选择最好的IaC工具是一个问题,找到一个最适合您的个人偏好和具体需要。

基础结构即代码(IAC)的优点

  • IAC对任何组织和IT团队都很有用,但它最适合那些希望利用新的、响应更快的IT方法(如云计算、敏捷开发和DevOps)的组织。
  • IAC倾向于促进比脚本更高质量的代码。
  • IAC有助于减少生产中由于配置错误的基础结构而导致的问题数量,并且如果代码中存在问题,可以回滚到“已知良好”状态。
  • 在开发过程中,通过更严格的质量控制,IAC提供预定义的“已知货物”供应过程,以及恢复手动或带外更改的所需状态控制,等等,
  • IAC的好处是可以在现场、云和快速增长的边缘计算中快速部署硬件–对于太多的IT商店来说,这种方法仍然是一个新概念。
  • 与以前的方法相比,IAC最显著的优点是不仅在配置和部署硬件方面,而且在维护硬件方面,速度和灵活性都很高。
  • 通过自动化处理日常流程,如构建服务器到存储、交换机的连接等,IT团队可以自由地执行其他任务。
  • 这在多云环境中成为一种真正的需求。所有这些云都有不同的软件定义API。IAC是将自己从底层云的底层异构中抽象出来的最好方法。
  • 我们还可以使用IaC发布解决方案。虽然容器包含了运行应用程序所需的所有特性,但我们希望它在多个环境中具有线性行为,如Dev和Prod环境。但是,在不同的生产环境中,它可能不会像预期的那样发挥作用。它需要在所有环境中进行相同的基础结构配置,以实现统一的应用程序行为。

结论

DevOps方法,作为一个生命周期模型和一场软件文化革命,将继续存在。这里的获胜者将根据他们在失去相关性之前蜕变的能力来选择。
DevOps实践是一种持续的、严格的方法,包括项目生命周期的每个组成部分,它将使您的组织不仅能够采用仅仅的开发模型,而且能够重新思考产品开发的方式。
此外,当我们将基础结构部署为CI/CD管道中的代码时,我们不再需要手动运行模板的部署,而只需使用命令即可。我们可以在CI/CD发布管道中部署微服务基础结构和容器中的更改。这使得当前在生产环境中部署的流水线中的应用程序代码和基础结构代码能够完全可见。

【版权声明】本文为华为云社区用户原创内容,未经允许不得转载,如需转载请自行联系原作者进行授权。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。