基础结构即代码(IaC)简介

举报
kaliarch 发表于 2022/09/04 20:21:51 2022/09/04
【摘要】 过去,传统的软件系统运行在内部基础设施之上,由独立的工程师团队使用自己的硬件进行管理。当收到需求时,架构师计划所需的资源,并将需求移交给基础结构团队。这个团队将为此分配所需的硬件资源,有时还会购买所需的硬件,允许开发人员在基础结构平台就绪后部署他们的代码。在整个过程中,周转时间很长,导致部署速度急剧下降。该方法的一些挑战是:部署缓慢(某些部署有特定的硬件需求,必须由基础设施团队提供。基础设施...

过去,传统的软件系统运行在内部基础设施之上,由独立的工程师团队使用自己的硬件进行管理。
当收到需求时,架构师计划所需的资源,并将需求移交给基础结构团队。这个团队将为此分配所需的硬件资源,有时还会购买所需的硬件,允许开发人员在基础结构平台就绪后部署他们的代码。
在整个过程中,周转时间很长,导致部署速度急剧下降。该方法的一些挑战是:

  • 部署缓慢(某些部署有特定的硬件需求,必须由基础设施团队提供。基础设施的提供和维护需要时间,导致部署速度下降)
  • 昂贵(维护您自己的硬件包括升级、联网甚至控制您自己的服务器机房的固有成本。所有这些都只是为了满足一个单一的组织需求)
  • 有限的自动化(除了少数过程之外,围绕这种配置的大部分工作都必须手动完成。随着系统的增长,您将需要越来越多的操作工程师来维护您的内部环境中的硬件资源)
  • 人为错误(由于手动过程的数量较多,在此过程中的某些管道容易出现人为错误)
  • 浪费的资源(当架构师决定所需的硬件资源时,他们会基于预期的最大负载容量进行假设。因此,他们不得不分配额外的资源来应对来自用户的意外流量)
  • 不一致(因为大多数服务器都是单独部署的,所以每台服务器都需要软件维护、系统升级和OS级补丁。这将不得不手动对每台服务器进行,在每台服务器上单独尝试这些时可能会出现某些不一致)

云服务提供商

随着时间的推移,当云基础设施和服务发挥作用时,人们开始将他们所有的服务转移到云上。云计算的出现缓解了您刚刚读到的一些痛苦。它将您从构建和维护数据中心以及与之相关的高成本中解脱出来。他们真的不必担心基础设施,因为基础设施本身是作为服务提供给用户的。由于他们的硬件虚拟化,它的成本较低,甚至还附带了一个花哨的用户界面(又名云控制台)来提供资源。
这消除了上面提到的与内部基础设施相关的大部分问题,将基础设施维护的负担完全转移到云服务提供商身上。对于弹性和高度可伸缩性的环境,担心的是添加所需的配置和将正确的软件部署到云中。
随着软件系统的发展,在云中请求和提供这些资源的手工工作水平仍然很高。人为错误和不一致也很高,因为供应必须手动完成。

IaC

作为解决方案,工程师们开始使用云提供商提供的API和SDK,以编程的方式访问和提供云中的资源。他们开始编写自己的脚本来提供硬件并更新它们。许多人为此使用了shell脚本、python和其他脚本语言。这催生了将基础结构编写为代码的过程(IaC)。
基础设施即代码(Infrastructure as Code,IaC)是通过代码而不是通过手工过程来管理和提供基础设施。
当这成为行业中的一个常见问题时,几个社区开始为基础设施提供构建通用工具,这些工具被世界各地的工程师广泛使用,并成为一个围绕用人类可读、简单和高级语言将基础设施编写为代码的广泛社区。

基础结构的版本控制

IaC的一个主要优点是支持对基础结构资源进行版本控制。从技术上讲,这种情况发生在描述基础结构的代码中。它还间接地将版本控制应用于该代码提供的基础结构。
将基础结构部署为代码还意味着您可以将基础结构划分为模块化组件,然后可以通过自动化以不同的方式组合这些组件。

IaC工具

现有的一些常用工具有:

  • Ansible
  • Terraform
  • Puppet
  • Cloudformation
  • Packer
  • Saltstack
  • Vagrant
  • Docker
  • And many more…

这些都是在解决同一个问题。但IAC大致可分为三种类型

  1. 配置管理(例如:Saltstack,Ansible,Puppet)
  2. 服务器模板(例如:Docker,Packer,Vagrant)
  3. 供应工具(例如:Terraform、Cloud formation)

配置管理

这主要是围绕硬件资源所需的配置。在现有基础结构资源上安装和管理软件。(服务器、DBs、网络设备等)。
这些工具引入了一种将所需配置编写为代码的简单方法,以便在基础结构资源中维护所用配置的一致性。
这还提供了控制配置版本和软件更新/升级的能力,允许在需要时通过几行代码快速向前和向后滚动软件版本。在一个拥有100多台服务器的组织中,如果必须手动完成,工程师将不得不通过每台服务器来更新相关软件。
编纂这个过程的另一个好处是它是幂等的。这意味着,无论我们执行这些工具多少次,它们都只会尝试将基础结构带入所需的状态,而不会一遍又一遍地重复更改。

服务器模板工具

这些工具主要负责维护基础结构资源所需的自定义映像、虚拟机、容器和模板。
这些映像和虚拟机带有预装的软件和依赖项,可以根据公司的标准和流程方便地使用。这些是专门为公司的软件需求定制的,允许工程师担心部署软件,而不是安装服务器的底层依赖项。
这使得基础结构也是不可变的。一旦部署了VM或容器,它将保持原样,而不会手动对它们进行更改。如果需要更改,那么我们需要通过服务器模板工具进行这些更改,以更新映像并重新部署。

供应工具

这是关于用一个简单的声明性代码来提供基础结构资源。根据我们所需的云服务提供商,我们只需声明我们需要哪些资源,这些工具将通过相关云服务提供商的APIs/SDK为我们提供这些资源。
Terraform是当今市场上臭名昭著的基础设施供应工具,它与供应商无关,为超过100家供应商提供供应商插件。
另一方面,云形成也是专门为AWS构建的另一个很好使用的工具。

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

评论(0

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

全部回复

上滑加载中

设置昵称

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

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

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