在第一章中我们了解到了部署软件的三个步骤:
- 创建并管理应用程序运行所需的基础设施
- 在其上安装正确的应用程序版本
- 配置应用程序,包括它所需要的任何数据和环境
本章将讨论的就是第一个步骤,先来认识两个概念
- 环境:应用程序运行起来所需要的所有资源以及它们的配置信息
- 基础设施:指的是项目中的所有环境及支持其运行的所有服务(DNS 服务器、防火墙、路由器...)
而想要对这些基础设施进行管理,我们应该遵守以下原则:
- 使用保存在版本库中的配置信息来指定基础设施的状态
- 基础设施应该具备自治特性(自动的将自己设置为所需状态)
- 通过一些测试设备或手段,需要做到实时的掌控基础设施的状态
一 理解运维团队的需要
在一个略大点的项目团队中都会存在开发团队和运维团队,但通常两个团队的关系并不是很好,从而导致互坑的现象出现。开发团队很久才去提交代码,导致运维团队发布软件可能会需要很长时间,这样大幅动的更新带来的也是高风险。所以所有项目组成员都应该达成一个共识,也就是发布有价值的软件成为一件低风险的事情。这么做就需要尽可能的频繁发布,运维团队比较关注的点:
- 文档和审计
- 异常事件的告警
- 保障 IT 服务持续性的计划
- 使用运维团队熟悉的技术
二 基础设施的建模和管理
在项目的开始阶段,我们应该就应该搞清楚用当前的技术栈是否可以很好的完成自动化部署和配置软硬件基础设置,并解决下列问题:
- 如何准备基础设施
- 如何部署和配置应用程序所依赖的各种软件
- 如何管理这些基础设施
1、基础设施的访问控制
- 在没有批准的情况下,不允许他人修改基础设施
- 制定一个对基础设施进行变更的自动化过程
- 对基础设施进行监控
2、对基础设施进行修改
- 任何变更都应该走相同的变更管理流程
- 对变更的内容进行记录
- 所有有权进行修改的人都应该登录同一系统进行更改
- 确保做的修改不会破坏原有环境(跑自动测试)
- 需要编写测试来验证变更是否生效
三 虚拟化
虚拟化是一种在一个或多个计算机资源上增加了一个抽象层的技术。平台虚拟化是指模拟一个完整的计算机系统,从而在物理机上可以运行多个操作系统的实例。虚拟化的快捷性可以减少部署软件所花费的时间,并降低部署所带来的风险,可以带来以下收益:
- 对需求的变化作出快速响应,很短的时间就可以搭建一个测试环境
- 固化,不同的团队可能会有不同的持续集成服务器和测试环境,使用虚拟化可以将持续集成和测试基础设施的固化变得更容易,以便将其提供给交付团队
- 硬件标准化
- 基线维护更容易
虚拟化技术的最重要特性之一就是虚虚拟机映像只是一个文件,这也就意味着这个映像(快照)可以很方便的被重用。在整个部署流水线上,我们都可以在我们需要的地方去做快照。 虚拟化还可以对另外两种不可追踪的场景更容易管理:
- 已经用非受控方式修改过的环境
- 无法以自动化方式来管理栈中的软件