阅读 726

【云计算】历史的选择-基础设施即代码IaC

小知识,大挑战!本文正在参与“程序员必备小知识”创作活动。
本文同时参与 「掘力星计划」 ,赢取创作大礼包,挑战创作激励金。

之前几篇讲到了基础设施代码的工具,但并没有讲什么是IaC,这篇文章简单说一下。

一、历史的选择

随着软件迭代速度快,且复杂度的上升,组织结构和职能发生了变化。

  • 第一阶段,开发(Dev)和运维(Ops)组织分开,开发负责编写软件,运维负责管理硬件。→问题: 跨团队协作,开发和运维环境不一致,运维人员大多数部署通过手动完成,代码冲突、服务故障和停机频繁。
  • 第二阶段,上云计算平台,运维团队任务从硬件管理转移到编写软件管理,需要编写代码,这样开发和运维都需要编写代码,所以Dev和Ops合并,演化成DevOps

DevOps自动化的目标是将软件交付过程自动化。所以落实到管理基础设施方面,也要尽可能多地通过代码来实现,减少点击网页或手动执行Shell命令的方式,即采用IaC(基础设施即代码)。

二、走进IaC

IaC(Infrastructure as Code)即基础设施即代码,核心思想为通过编写和执行代码来定义、部署、更新和销毁基础设施。

它是一种观念的转变,其将运维的各个工作都视为与软件相关,甚至一些明显针对硬件的工作,即将所有事物都在代码中进行管理,包括

  • 服务器
  • 数据库
  • 网络
  • 日志文件
  • 应用程序配置
  • 文档
  • 自动化测试,部署过程

2.1 IaC解决方案的价值

  • 版本控制(可Review)
  • 建立CI/CD自动化(不依赖于UI操作,减少人为错误)
  • 重复使用(减少时间上的浪费)
  • 环境切换控制(保持生产、预发、测试环境的一致性,平滑切换)
  • 团队成长和协作(文档分享)

总的来说,周而复始的手动管理基础设施,难免枯燥乏味,如此工作,既无创意又无挑战,使用Iac在改进我们工作的同时,让我们关注更有价值的事情

2.2 IaC工具分类

IaC是一种思想,实现这种思想的工具有很多,大致分为五大类。

  • 专项脚本(为每一项任务写一个专项脚本,比如配置docker环境,配置web服务等。其维护难度相当大,可针对小规模、一次性的任务。)
  • 配置管理工具(Chef、Puppet、Absible、SaltStack属于此类,目的是在现有服务器上安装和管理软件,优于专项脚本,可用作大规模、分布式、统一管理的场景)
  • 服务器模板工具(Docker、Packer、Vagrant属于此类,使用容器镜像、虚拟机(VM)的方式拥有一个完全独立的服务器,然后在所有服务器上统一安装)
  • 编排工具(管理服务器模板工具创建虚拟机和容器等,具体实现包括K8s,Marathon/Mesos、AmazonElastic Container Service(Amazon ECS)、Docker Swarm和Nomad等等)
  • 服务开通工具(创建云资源,比如服务器,网络、防火墙设施、路由规则、负载均衡等等,具体实现包括Terraform、CloudFormation、OpenStack Heat、Pulumi等等)
文章分类
后端
文章标签