作为一名运维,管理IT基础设施是一项艰巨的体力劳动,从最原始的用Excel记录维护配置信息,到开发CMDB系统来进行资源的配置管理,从传统上,运维的任务就是管理和配置所有的软件和硬件,这些配置信息对于保证基础架构中的应用程序平稳运行至关重要,但这始终是一个漫长的过程。
IT基础设施管理的痛点
长期以来,我们将服务器部署到机房,对机器进行软、硬件配置,安装并初始化操作系统,在做好基础配置后提供给业务部门;业务部门拿到机器后进行应用的部署,在这整个手动过程中通常会导致很多问题。
成本问题
从网络工程师到硬件维护人员,在流程的每一步必须有相应的专业人员来执行必要的任务,作为企业而言,聘请专业人员的报酬以及管理成本都是必不可少的,同时人员增多还会增加组织内部沟通的复杂性,钱花了也未必能构建和维护好自己的数据中心。
扩展性和可用性
由于手动配置太慢,当我们的应用遇到访问高峰,运维人员需要配置更多服务器来增加负载,这必然会影响可用性,如果没有提前准备好备份的服务器甚至数据中心,可能导致应用长时间不可用。
监控和性能可见性
应用上线后,如何确保我们的基础架构正以最佳方式运行?当遇到问题时,又如何准确定位问题来自基础设施的哪个位置?我们的应用的整体拓扑映射、事件关联和根本原因分析,这些都需要我们去维护相应的业务关系,通过配置管理来完成。
不一致性
如果有多个运维人员都在负责手动部署配置,基础设施以及环境的不一致性将成为不可避免的问题。
IaC(Infrastructure as code 基础设施即代码)
随着云计算的到来,在很大程度上帮我们解决了上述的部分问题,通过云计算,我们甚至无需构建和维护自己的数据中心即可让我们的应用运行起来。
不过,云计算并不能解决所有问题。虽然它能够让我们快速设置基础设施需求,从而解决高可用性和可扩展性等严重问题,但它对解决不一致问题没有任何帮助。当多个人员都在执行配置或变更时,差异必然存在。
而IaC(基础设施即代码)正好能够弥补上面问题的缺失部分。
IaC是什么
IaC(Infrastructure as code 基础设施即代码)是通过使用配置文件来管理所有的基础设施并自动化基础架构管理。
使用基础设施即代码,我们的基础设施配置会采用代码文件的形式。由于它只是文本,因此可以轻松编辑、复制和分发它。我们可以使用VCS(版本控制系统)来管理配置文件,就像管理任何其他源代码文件一样。
IaC的优点
那么IaC能给我们带来什么样的好处呢?我简单罗列了一下:
- 易于复制
- 易于查看
- 易于销毁
- 易于分享
- 易于移植
- 易于找到
- 易于审核
- 易于回滚
- 易于重构
如果你使用过云平台的console来进行资源的管理,那你一定能够体会到实现以上操作的繁琐和复杂程度,如果只是创建一次,后续就不用再管理操作的话还好,但往往我们需要不断重复的创建、管理类似的基础设施,当然我们可以通过调用云平台的SDK或API来实现自动化操作,但这一方面增加了我们的开发成本,另