IaC 能够经过机器或许直接到机器的代码来布置、办理和扩展根底设施。

译自Infrastructure as Code: The Ultimate Guide,作者 B. Cameron Gain 是 ReveCom Media 的开创人和首席分析师。他对核算机的痴迷始于 20 世纪 80 年代初,当时他破解了太空侵略者操控台,以每天 25 美分的价格在当地视频游戏厅玩了一整天。

什么是根底设施即代码(IaC),为什么它正在取得普及?

跟着 IaC 的兴起,DevOps 中关于与机器直接通讯的需求日益增长,这使得开发人员和运维人员能够运用同享言语来完结和办理根底设施。

这消除了不必要的软件接口层,促进了更明晰的办法。一起也存在着减少杂乱性、远离软件接口中的“臃肿”的趋势。

人们似乎更喜欢直接交互,有时经过大型言语模型(LLM)接口以近乎自然言语的办法交互,然后显现用于根底设施的代码。

IaC 允许经过机器或机器直接代码来布置、办理和扩展根底设施。

鉴于 IaC 倾向于供给一种直接装备、布置和办理根底设施的办法,它十分适合版别操控以及版别操控DevOpsGitOps的扩展,从这个视点来看,它也供给了扩展时机。

“IaC 的重要意义在于它为您供给了一种主动化根底架构层布置清单的办法,与其方位和规划无关,”“GitOps” 一词的创造者Alexis Richardson对 The New Stack 表明。

IaC 的原则是什么?

IaC 经过机器或直接到机器的代码完结根底设施的布置、办理和扩展。这与传统的经过接口和额定软件层进行操作的办法构成对比。因为其直接的办法,IaC 有利于版别操控,并扩展到 DevOps 或 GitOps,供给扩展时机。

IaC 的盛行开源装备包含 HashiCorp Terraform(及其开源等价物 OpenTofu)、Nitric、Pulumi 和Red Hat Ansible

IaC 怎么运用于继续集成/继续交给(CI/CD)?

经过指令行一致高效地在各种环境中进行根底设施供应和布置的 IaC 运用十分适合 CI/CD。

当 IaC 运用于生产流水线时,组织陈述说生产力和资源节约有所进步。但是,并非一切的 IaC 解决计划都效果相同。潜在的 IaC 用户应该细心审视某个特定解决计划是否以及怎么能够真实改进 CI/CD 流程。

IaC 解决计划应为 CI/CD 供给:

  • 主动化供应
  • 不变的版别操控,因而运用单一仓库创立和删除根底设施
  • 贯穿 CI/CD 的测验功能
  • 设置战略的才能
  • 办理安全的才能

IaC 为 CI/CD 供给的不变性“至关重要”,企业办理协会(EMA)分析师Torsten Volk对 The New Stack 表明。他说,之所以如此,是因为它“保证一致性、便于回滚的明晰审计轨迹、对安全性和合规性的一致操控,以及全体功率”。

IaC 怎么用于设置战略和办理安全?

IaC 供给了一种一致的办法来处理和界说各种装备的战略。其优势不只限于声明式办法,还影响到依据东西挑选和 IaC 办法论的安全办理。

在 Pulumi 年度用户大会 PulumiUP 上题为“一家银行怎么经过根底设施即代码主动化现代化其软件工程”的讲演中,华盛顿信托银行的 DevOps 工程师Dennis Sauv供给了一个关于 IaC 在银行战略和安全方面的角色的小事例研讨。

他指出他怎么与开发人员“协作理解他们的云根底设施需求,并和谐怎么最好地运用我的团队和信息安全部分的资源来布置这些资源。”

依据 Sauv 的说法: “与咱们的开发团队协作有时会具有挑战性。咱们的开发团队遵从敏捷结构进行调度,而根底设施则遵从更多看板分类结构进行作业,究竟这是 IT 运维。这意味着有时分我有很多带宽来协助开发方针,而其他时分我在根底设施上的责任有必要优先。”

华盛顿信托银行选用 IaC 的总体方针是“消除根底设施可用性成为瓶颈,并以预制的根底设施即代码资源和组件的形式将很多开发环境脚手架放在开发人员手中”,Sauv 说。主动化布置极大地减轻了根底设施团队的很多手动布置负担,并“为未来项目创立可重复运用和可重用的组件”,Sauv 说。

在华盛顿信托银行决议在其布置流水线中选用 IaC 之前,联邦存款保险公司(FDIC)关于维护客户个人数据的严格规则影响了这一决议,Sauv 说。

正如 Sauv 所描绘的:“数据走漏对组织的客户有可怕的影响,一切托付给咱们的数据都有必要视为机密。这是因为这是正确的事情,也是因为 FDIC 强制要求这样做。鉴于有必要维护客户数据,运用根底设施即代码构建云资源供给了一个能够由信息安全部分和根底设施团队审查和改进的蓝图。”

根底设施即代码的一个比如是什么?

IaC 触及运用 Ansible 等东西来办理和主动化 IT 根底设施。Ansible 需要安装其软件并随后履行指令。初始过程触及创立 Ansible playbook,它由指导 Ansible 履行各种使命的 YAML 指令组成,跨过布置、网络、服务办理以及安全和战略装备

以下是装备 Ansible playbook 的 YAML 指令示例:

来历:Ansible 项目贡献者。

设置 playbook 后,运用此指令运行 playbook:

根底设施即代码终极攻略

来历:Ansible 项目贡献者。

输出如下所示:

根底设施即代码终极攻略

来历:Ansible 项目贡献者。

IaC 有哪些局限性?

IaC 确实存在局限性 —— 即,它旨在主动化并防止在创立和办理根底设施时进行手动流程。

仅运用基本的开源替代计划或东西,比如 Terraform 会有局限性。因而,主动化这些东西,供给更直接的根底设施供应办法,或使其简化会大有裨益。

这对开发人员尤为重要。例如,关于供给根底设施作业流程主动化的东西,IaC 能够帮助开发人员在代码文件中更加声明式地装备和办理云根底设施

其想法是为开发人员在云中设置根底设施时降低过错概率并进步不变性。供给履行 IaC 的一起简化该流程的才能 —— 并供给更易于运用的模板,例如用于 Terraform、Ansible 或任何其他东西 —— 有助于完结这一方针。

怎么主动化或改进 IaC?

呈现了许多替代计划,它们要么添加层以提高主动化并添加相似 Terraform 或 Ansible 的附加功能,要么寻求替换这些解决计划。就 Terraform 对手 Pulumi 而言,虽然 Terraform 的市场比例几乎是 Pulumi 的 10 倍,但依据企业办理协会(EMA)的数据,Pulumi 的比例增长率是 Terraform 的 2-3 倍。这些解决计划(包含 Nitric 和 Pulumi)旨在为 IaC 供给主动化方针。

Pulumi CEO 兼开创人Joe Duffy在 Pulumi 年度用户大会 PulumiUP 上的宗旨讲演中表明,Pulumi 供给的编程言语挑选的灵活性至关重要。“例如,许多用户今天不幸仅限于运用 YAML 进行布置,这不应该是这种情况;开发人员不应该仅限于一种言语,”Duffy 说。

另一方面,Pulumi 声明支撑一切干流编程言语,从而为继续集成/继续交给(CI/CD)和一般情况下的根底设施装备供给更多的挑选自由和更直接的办法。

“Pulumi 是您最喜欢的言语中的根底设施即代码 —— 熟悉根底设施即代码的人或许运用过其他东西,这些东西运用特定域言语乃至符号言语如 YAML 或 JSON,这在开端时通常就足够了。但尤其是当咱们扩展到现代云架构时,缺陷开端显现,”Duffy说。

“因而,Pulumi 的办法真的是采取不同的办法:带着您最喜欢的编程言语,无论是 JavaScript 仍是 TypeScript,Python,Go。Pulumi 在其中心是多言语的。这意味着您能够运用编程言语的一切丰富功能来表达您的根底设施即代码。”

根底设施即代码怎么与 GitOps 集成?

首先,让咱们描绘一下GitOps 是什么,以及它怎么用来主动化和简化继续集成/继续交给的根底设施布置,以及在杂乱的环境(如 Kubernetes)中。

云原生核算基金会运用程序交给特别兴趣小组下的 GitOps 作业组OpenGitOps现已发布了关于 GitOps 的准确且以一致为导向的描绘。它由一组开源规范、最佳实践和面向社区的教育组成,以帮助组织选用结构化、规范化的办法来施行 GitOps。它将 GitOps 原则描绘为:

  • 声明式: 由 GitOps 办理的体系有必要声明式地表达所需状况。
  • 版别化和不变性: 所需状况以强制不变性和版别操控的办法存储,并保留完好的版别历史记录。
  • 主动拉取: 软件署理主动从源中拉取所需的状况声明。
  • 继续和谐: 软件署理继续调查实践体系状况,并测验运用所需状况。

“方针是改进云原生布置的可访问性和可办理性,简化与 Kubernetes 相关的杂乱性,并促进更顺利的运营,”Alexis Richardson说。“这些改进将经过正在进行的尽力和 GitOps 的进步完结,在很大程度上由开源社区和相似Flux的项目推进,”他说。

能够说,根底设施即代码就是 GitOps —— 或许至少,它是 GitOps 作业办法的一个组成部分。在开发人员方面,无论是仅运用拉取请求,仍是在概念上经过 Flux 或 Argo 将运用程序放在存储库上,开发团队都运用根底设施即代码指令来完结这项作业,运用模板或 API。

当运用程序布置时,例如,运维人员更新和布置实践根底设施时,不变性方面就是根底设施即代码角色发挥作用的地方。

依据 Richardson 的解释,与此一起,您也得到了主动化,这是 GitOps 的一个关键方面。一组规范代码模板用于作为继续集成/继续交给领域的 GitOps 的一部分创立、布置等运用程序。这反映了根底设施即代码的主动化部分。当然,这个主动化与 GitOps 一起发生。

Richardson 说,GitOps 和根底设施即代码包含三个不同的用例:根底设施即代码、继续集成/继续交给(特别是继续交给)和平台工程

“这三个元素会聚构成一种和谐办法,用于主动化怎么办理整个技能栈:最佳实践要求运用这些东西的组合来和谐正确的布置,办理流水线、交给、机群和规划,”Richardson说。“跟着规划的扩展,您会发现需要选用新技能来处理规划,因为关于 1000 个集群有 1000 个 Git 仓库是不实践的。抱负情况下,您要么需要一个 Git 仓库,要么最多只需要一小部分。”

本文在如此众生yylives.cc/)首发,欢迎大家访问。