什么是基础架构即代码(IaC)-dev


DevOps的一大优势是基础架构即代码。这意味着您对待基础结构的方式与对待应用程序代码的方式完全相同。为基础设施配置实现版本控制,编写测试,并确保这些配置不会与您在多个环境中的存在差异。
将基础架构作为代码来处理可防止出现意外代码更改以及生产和开发等环境之间的配置差异之类的问题。它还可以确保您所做的每个部署都是完全相同的。您无需担心部署时会发生的怪异差异。
您不需要使用其他编程语言,例如Python或Go。将有一些特定于工具的语言,但是这些语言通常很简单,并且围绕它们提供了很好的文档。使用基础结构作为代码所要更改的主要内容是处理系统的方式。
无需登录服务器并手动进行更改,您将使用开发方法来完成这些任务。这意味着您将不必处理公司中只有一个人知道的许多问题。这样,每个人都有能力更新和部署对基础结构的更改,并且保留更改,就像将代码提交到版本控制一样。
虽然将基础结构作为代码在生产中获取和保持可靠版本的应用程序的许多方面都有帮助,但是当您为其添加自动化时,它确实增加了价值。
 
自动化您的基础架构
工件是由构建Build程序过程产生的任何可部署元素。例如,当您使用React内置的应用程序时,您知道npm build命令会在项目的根目录中生成一个构建目录。该目录中的所有内容都是部署到服务器的内容。
在将基础架构作为代码的情况下,工件是诸如Docker镜像或VM之类的东西。您必须知道您应该从基础结构代码中获得什么工件,因为这些工件将被版本化和测试,就像您的React应用程序一样。基础结构工件的一些示例包括OS软件包,RPM和DEB。
构建工件之后,您需要像使用代码一样对其进行测试。构建完成后,您可以运行单元测试和集成测试。您还可以进行一些安全检查,以确保在整个过程中不会泄露敏感信息。
您可能会使用Chef或Ansible编写一些基础设施自动化的工具。无需配置整个系统,就可以对这两种语法进行任何语法错误或违反最佳实践的单元测试。
您可以将它带入一个新的水平并运行集成测试,以查看是否正确配置和部署了系统。您将能够检查以确保安装了正确的软件包,并且所需的服务在正确的端口上运行。
您可以添加到基础结构代码中的另一种测试类型是安全测试。这包括确保您符合行业法规,并确保没有打开任何其他端口以使攻击者有所作为。编写测试的方式在很大程度上取决于您决定使用的工具我们将在下一部分中介绍其中一些。
测试是将基础结构自动化为代码的重要组成部分,因为它为您节省了许多有关静默错误的调试时间。当您准备部署基础结构并使用它来使应用程序更新持续生产时,您将能够跟踪并修复可能导致问题的所有内容。
您使用的工具将帮助您构建管道所需的基础结构代码。几乎可以满足您的任何基础架构需求,有许多开源和专有工具。
 
常用工具
一些工具包括:

Chef
Puppet
Terraform
Conducto
CFEngine
AWS CloudFormation
Azure资源管理器
Cloud Deployment Manager
SaltStack
Anisble
Juju
Docker
Vagrant
R?ex
NixOS
 
注意点
部署意味着有一个自动过程来处理服务器上的部署应用程序和升级应用程序。您会经常听到的另一个术语是业务流程。编排有助于协调多个系统之间的操作。因此,一旦初始配置完成,业务流程将确保您可以升级并正在运行系统,并且可以控制正在运行的系统。
然后是配置管理。它可以确保根据需要维护和升级应用程序和程序包。在初始配置发生后,这也可以处理对系统配置的更改控制。配置管理中有一些重要规则。

  • 系统应收敛到所需状态。针对服务器和针对模型的新版本运行以符合现有模型的系统称为融合。
  • 系统命令和配置应该是幂等的。这意味着您应该能够多次运行配置管理过程并以相同的状态结束。
  • 系统应该是不变的。这意味着在部署之后无法更改部署。因此,如果需要更改,您将需要重新部署整个系统。
  • 系统应该是自助服务。任何用户都应该能够在没有其他任何人帮助的情况下启动进程。不应只有一个人具有如何配置和部署的魔术知识。

基础架构越复杂,遵循这些基本规则就越重要。
 
如果您正在考虑使用微服务,那么Doc​​ker可能是与Kubernetes一起使用以对其进行编排的一个很好的工具。
如果您正在使用巨大的分布式环境(例如具有自定义应用程序的公司网络),则可以考虑使用PuppetConductoChef。如果您的站点的正常运行时间要求很高,则可以使用诸如AnsibleConducto的编排工具。
这些并不是您应该遵循的硬性规则,因为所有这些工具都可以通过多种方式使用。我在这里提到的用例只是使用代码工具的基础结构的一些常见方式。希望这些用例能使您更好地了解基础结构作为代码的实用性。