基础设施即代码-1
基础设施即代码
一种基于软件开发实践的基础设施自动化方法。强调系统及其配置的日常置备和变更具有一致性和可重复性。先修改
配置的定义代码,再通过包括全面验证的无人值守过程应用到系统中去
原则
系统能够轻松复制
系统用完可扔
系统是一致的
过程是可重复的
设计经常变更
动态基础设施平台
用于提供和管理基本的基础设施资源,尤其是计算(服务器)、存储、网络。包括公有和私有云基础设施服务、虚拟化和物理设备的自动配置
并且支持程序化(脚本、工具)分配和管理这些资源的系统
特征
- 可编程
- 按需获取
- 自服务
三种基本组件
-
计算: 计算资源就是服务器实例
-
存储:块存储(像本地一样挂载服务器实例上)、对象存储(云平台提供对象存储服务)、网络文件系统(文件共享网络协议)
-
网络: 管理内部元素之间以及与外部网络的网络互通(动态、虚拟化的网络来处理网络互通)
类型
- 公有IaaS云
- 社区IaaS云
- 私有IaaS云
1. SaaS(软件即服务):在最终用户之间共享的应用程序,可能是面向最终用户的,比如电子邮件。也有一些SaaS产品是面向基础设施队,比如监控
2. PaaS(平台即软件):让开发者构建、测试、托管软件的共享平台。抽象了底层的基础设施,这样开发者不用关心应用程序应该分配多少台服务器
3. IaaS(基础设施即服务):共享的硬件基础设施,系统管理员可以用其为各种服务构建虚拟的基础设施 - 混合云
基础设施定义工具
用于管理服务器、存储设备、网络资源的分配和配置
方式
- 用过程化脚本置备基础设施
- 声明式定义基础设施
配置注册表
配置注册表是基础设施元素中信息的目录。对于需要管理和集成基础设施的脚本、工具、应用服务来说,它提供了一种发现这些信息的方式。这对于
动态基础设施来说特别有用,因为随着元素的添加和删除,这些信息持续地变化着
实现配置注册表的方式有很多。对于简单些的基础设施,定义工具使用的配置定义文件也许就足够了。 为了能在动态基础设施上工作,配置注册表服务
必支持从注册表中以编程的方式添加、更新和删除条目
服务器配置工具
处理服务器本身细节,包括软件包、用户账户以及各类型的配置
目标
- 能够完全按需置备一台新服务器,等待时间不超过数分钟
- 当定义了服务器配置变更之后,向服务器应用该变更的过程不需要人工参与
- 每个变更都应该被应用到所有相关的服务器
- 置备以及变更服务器的过程具有可重复性、一致性、自文档、透明化
- 修改置备服务器以及变更配置的流程既容易又安全
- 每次变更触发运行自动化测试
- 配置的变更和出来基础设施任务的流程变更都应版本化
工具
- 创建服务器的工具
- 配置服务器的工具
- 打包服务器模板的工具
- 在服务器上运行命令的工具
- 从中央注册中心获取配置
变更管理模型
- 临时变更管理
- 配置同步
- 不可变的基础设施
- 容器化服务
基础设施服务
帮助管理基础设施和应用程序服务的工具和服务,如监控、分布式进程管理及软件部署等
原则与实践
- 服务可以恨容易地重新创建或复制
- 服务的元素是用完可扔的
- 服务所管理的基础元素是用完可扔的
- 服务所管理的基础设施元素经常会发生变更
- 服务实例的配置是一致的
- 管理和使用服务的流程是可重复的
- 管理可以迅速且轻松满足常规需求,最好是自服务或者自动完成
- 服务可以轻松安全地进行复杂的变更
- 使用外部定义文件
- 自文档化的系统和流程
- 一切版本化
- 持续测试系统和流程
- 小的变更而不是批量变更
- 让服务持续可用
监控: 告警、指标、日志
- 告警: 出现问题时告诉我
当系统的行为偏离正常边界时,间接的监控就会触发告警。当业务交易的数量大幅减少时,某些地方就可能出现问题了。
问题的原因可能是系统故障、重要的外部依赖或者内容问题。即使某个事件不一定触发告警通知,把事件的指标记录下来并确保团队看到异常的波动也是有用的
- 指标:收集和分析数据
- 日志聚合和分析
集中式日志聚合是一种流行的解决方案。把服务器和设备配置成将日志发送到向中央存储服务
分布式进程管理
- 使用服务器角色编排进程
- 使用容器编排进程
容器化未管理服务器进行提供了一个截然不同的模型。进程被打包,可用运行在不是专门为此构建的服务器上面。一个通用宿主机池可用用来运行大量不同的容器化进程或任务
- 调度短期人物
- 容器编排工具