什么是基础设施即代码?
基础设施即代码 (IaC) 使用 DevOps 方法和版本控制以及描述性模型来定义和部署基础设施,例如网络、虚拟机、负载均衡器和连接拓扑。IaC 模型每次部署时都会创建相同的环境,就像相同的源代码始终生成相同的二进制文件一样。
IaC 是一个重要的 DevOps 实践,也是持续交付的一部分。DevOps 团队可以使用 IaC 来协作使用一致的技巧和工具,以快速可靠地大规模交付应用程序和支持基础设施。
基础设施即代码的优势
采用 IaC 的公司可以获得以下优势:
速度 - 基础设施安装快速且安全,因为它们不需要操作员参与。
源代码管理 - 代码可以在源代码控制下进行验证,以促进透明度和问责制。
文档 - 基础设施代码提供了基础设施当前状态的动态文档。
一致性 - 通过在整个环境中部署类似的基础设施,避免边缘情况和一次性设置。
敏捷性 - DevOps 提高了软件交付的效率,而 IaC 为基础设施管理增加了敏捷性。
可重用性 - IaC 使得设计可重用模块变得简单,例如用于复制开发和生产环境的模块。
基础设施即代码是如何工作的?
基础设施即代码可以分为三个简单的阶段:
开发人员使用特定领域语言编写基础设施定义。
输出文件被传递到主服务器、管理 API 或代码存储库。
平台执行建立和配置计算资源所需的所有过程。
声明式与命令式基础设施即代码
在处理 IaC 工具时,有两种基本方法可以开发代码。这些是声明式和命令式技术。
命令式方法允许用户描述要为更改执行的特定操作,并且系统完全遵循这些过程。
声明式方法意味着用户需要声明最终结果,而单个工具或平台会管理为实现所需结果而遵循的操作。
在大多数基础设施管理用例中,选择声明式方法,因为它在管理基础设施时提供了更好的灵活性。
基础设施即代码 (IaC) 的类型
开发人员可以选择四种基本形式的 IaC:
脚本 - 最简单的 IaC 方法是编写脚本。临时脚本非常适合执行基本、简短或一次性操作。但是,对于更复杂的配置,建议选择更专业的选项。
配置管理软件 - 这些是专业的软件管理工具,有时称为配置即代码。它们通常专注于服务器安装和配置。Chef、Puppet 和 Ansible 是这些工具的一些示例。
供应设备 - 供应工具专注于基础设施创建。开发人员可以使用这些工具来指定特定的基础设施组件。Terraform、AWS CloudFormation 和 OpenStack Heat 就是这方面的例子。
容器和模板软件 - 这些工具创建包含运行应用程序所需的所有库和组件的模板或镜像。容器化工作负载易于分发,并且比运行完整大小的服务器的开销要低得多。Docker、rkt、Vagrant 和 Packer 就是一些例子。
IaC 工具
基础设施即代码工具设置和自动化基础设施供应。通过编排功能,这些系统可以自动化服务器等基础设施的部署。它们还可以配置和监视已供应的系统。
基础设施即代码技术使用推送或拉取技术来从模板强制执行设置。推送方法使用集中式服务器将所需配置分发到指定系统或系统。拉取方法由基础设施中的系统或系统向集中式服务器发出请求来启动。工具通常默认构建为推送或拉取代码部署,但可以针对特殊情况进行配置以执行相反的操作。这些工具还应该能够撤消代码修改,例如在出现错误时。
AWS CloudFormation、Red Hat Ansible、Chef、Puppet、SaltStack 和 HashiCorp Terraform 是基础设施即代码技术的示例。一些工具使用特定领域语言 (DSL),而另一些工具使用通用模板格式,例如 YAML 或 JSON。
组织在选择工具时应评估目标部署。例如,AWS CloudFormation 旨在在 AWS 上部署和管理基础设施,并与其他 AWS 服务集成。Chef 还与本地服务器和各种云提供商的基础设施即服务解决方案一起使用。
结论
IaC 是一种非常高效的配置管理类型,专注于自动化云 IT 基础设施的管理。一旦 IaC 就位,它就可以用于实现项目中基础设施更改的 CI/CD 自动化程度。IaC 提供了许多关于围绕基础设施改进的沟通和透明度的有用见解。IaC 需要一些依赖项,例如托管平台和自动化工具,这两者通常都可以从当前的托管公司获得。
数据结构
网络
关系数据库管理系统
操作系统
Java
iOS
HTML
CSS
Android
Python
C 编程
C++
C#
MongoDB
MySQL
Javascript
PHP