自动化部署工具设计与实现
2018-12-24,,,,
, , , ,
(1.南瑞集团有限公司(国网电力科学研究院有限公司),南京 211106; 2.国电南瑞科技股份有限公司,南京 211106)
0 引言
随着信息化技术的不断发展,信息系统对电网企业运营的支撑作用愈加重要,机房建设规模也不断随之扩大,致使机房运维工作较之以往更为艰难。在机房运维管理当中,操作系统、数据库、中间件等基础软件的部署是信息化工作的基础条件,而且这些工作往往是不断重复、耗时费力的,为了能够将更多精力关注于应用和业务,不再关注不同厂商的服务器和软件,需要解决标准化和自动化问题,才能满足日常部署的需求。因此有必要研究,制定自动化运维的部署策略及相关规范,实现系统应用的自动化部署和快速交付,提高系统整体部署的质量。
国外,Google、Amazon、微软等大型公司都建有成熟的自动化运维体系,如微软公司开发了Autopilot工具提供自动化软件部署与系统监控、故障自动修复来管理数据中心大规模服务器,以减少人工干预[1-3]。在国内,互联网公司是这方面的先行者,已经做了大量研发工作,如阿里巴巴构建了一套支持资产核对、自动化装机、环境配置、应用发布、运行监控等功能的云效自动化运维平台,支撑了双11期间百万量级主机管理能安全、稳定、高效,可见自动化运维的重要作用[4]。还有开源部署配置软件cobbler、ansible、Puppet和SaltStack等的广泛使用[5-8],也减轻了运维的压力。目前,自动化部署工具主要聚焦在应用层面上很少涉及硬件配置层面,本文设计开发了一款自动化部署工具,解决了硬件配置和软件安装配置自动化的问题,以更好地满足机房统一运维部署的需求。
1 总体设计
设计自动化部署工具为运维人员提供机房物理资源集中部署和展示平台,实现设备自动发现、自动部署、自动配置,中间结果数据实时推送,可定制化统一部署模板,实现部署工作的标准化、合规化、统一化作业,极大提高运维工作效率,对机房设备实现集中式管理。
本文设计的自动化部署工具采用的是B/S架构,通过在自主设计的可引导操作系统中内置Agent来对服务器的各项基本信息进行采集上报实现了服务器的自动发现,再根据任务编制时选择的脚本来决定设备要安装的操作系统,并将安装步骤的中间结果实时反馈,安装完成操作系统之后再进行其他基础软件的部署,接着进行脚本的下发、执行结果的回收完成整个部署过程。系统整体架构图如图1所示。
图1 系统整体架构图
主要分资源层、服务层、应用层三层结构,资源层是指机房中各厂商服务器,也就是部署服务直接操作对象。服务层是应用层与资源层之间沟通的桥梁,包含HTTP、DHCP、TFTP、任务调度、执行引擎等服务。通过DHCP为资源层分配临时IP地址,HTTP、TFTP为应用层和资源层之间提供传输文件服务,任务调度、执行引擎为应用层提供批量下发和执行脚本服务。应用层负责处理具体的业务逻辑和操作,集成了引导安装管理、硬件服务管理、脚本管理和任务管理四大功能模块。
系统总体设计采用MVC分层思想,前后端分离,模块之间相互独立通过API接口进行调用,满足系统的可扩展性需求。
各个模块主要功能如下。
(1)可引导操作系统管理。通过在内存操作系统上内置agent进行信息采集上报,接口查询,调用接口完成硬件配置,引导操作系统的安装。其中,内存操作系统被资源层中服务器开机PXE启动自动加载。
(2)硬件服务管理。提供支持的硬件设备信息,提供手动添加新的硬件设备。服务器硬件配置由agent执行,主要包括对RAID、OOB以及BIOS的设置。
(3)脚本管理。包括操作系统模板、数据库、中间件等脚本的增删改查功能以及对软件部署的一系列脚本进行排序,形成能够部署软件的脚本库。
(4)任务管理。为自发现的设备选择脚本管理中软件形成一次部署任务,任务要进行审核,审核通过之后才能进行执行部署任务,并提供安装进度监控。
在系统的实现过程中使用以java语言为基础的SpringMVC[9][10]框架,agent使用go[11]语言开发,数据库使用MySQL[12]。
2 主要功能模块实现
2.1 引导安装管理
引导安装管理主要是收集服务器信息、配置RAID、引导安装操作系统等,实现这些功能的基础是可引导操作系统。可引导操作系统是一种基于内存的操作系统。加载工作的基本原理。服务器上电→PXE网络启动→加载kernel→加载initrd→解压rootfs→切换根文件系统→运行init进程→启动服务→启动登录shell。通过这个流程可引导最小操作系统镜像全部加载到内存中,启动了一个可用的操作系统,而并不依赖磁盘设备。因此也就可以直接对服务器硬件进行操作,包括升级BIOS、修改RAID、配置OOB,以及对磁盘分区和创建文件系统等。
而且在内存操作系统中内置了Agent,Agent是控制采集信息、接口查询、硬件配置、安装操作系统等过程的核心,通过与Server端以接口方式进行交互完成部署任务。Agent工作流程如图2所示。
图2 Agent工作流程图
(1)采集服务器信息
服务器信息采集是通过编写的shell脚本在内存操作系统上执行来收集网卡、raid卡、厂商、内存、磁盘等信息。以raid卡型号信息收集为例说明。lspci | grep SAS | sed ':a;N;!ba;s/ /\n/g' 。
采集脚本由Agent调用,并将采集的信息通过接口发送给Server端,这样也完成了设备的自动发现。
(2)接口查询
接口查询是通过restful JSON api接口方式进行。以状态查询为例,Agent查询当前设备是否在安装队列里,通过http的POST方式发送json格式的数据到Server端。
Agent发送json格式数据询问:
{ "Sn": "9XCE01" }
Server反馈结果json格式给Agent:
{
"Content":{ "Result":"true" },
"Message":"该设备在安装队列里",
"Status":"success"
}
2.2 硬件配置管理
服务器硬件配置主要包括对RAID、OOB以及BIOS的设置。如表1所示。
表1 厂商硬件配置工具
硬件的自动化配置包括。
(1)RAID。支持RAID 0、RAID 1、RAID 5、RAID 10等Raid卡策略
(2)OOB。支持用户、密码、网络等初始化
(3)BIOS。支持VT、HT、NUMA、C-State、Turbo等配置
由表1可知,每个厂商提供的硬件配置工具不同,也给硬件的自动化配置提高了难度。为了能够兼容更多的硬件设备配置,给每个设备厂商提供一套硬件配置脚本,支持RAID、OOB、BIOS的配置,并且封装成rpm包。每个硬件配置有且只有一个入口脚本(如raid.sh、oob.sh、bios.sh),Agent会调用此脚本并接受传递的参数来进行硬件配置,每个入口脚本可以调用其他子脚本。除此之外Agent采集到厂商信息后会加载相应厂商脚本依赖的硬件配置工具包。
2.3 脚本管理
脚本管理是以软件为管理单元,提供部署每款软件所需一系列脚本的添加、删除、下载、排序等操作,形成软件脚本库。以维护mysql部署脚本为例来说明,管理员首先创建一条mysql软件记录,再将mysql所需脚本上传至服务器,以mysql记录的唯一标识作为文件夹,存储在服务器对应的路径下。上传脚本实现流程如图3所示。
图3 上传脚本流程图
系统前端使用layui的upload上传脚本,控制器响应请求将脚本存入对应路径下的根据所属软件唯一标识创建的文件夹,若在当前文件夹下文件存在,则覆盖当前文件,始终保存最新的文件。当写入成功时,控制器返回Success,页面弹出提示框,显示上传成功,用户可以通过预览查看已经上传的脚本内容。
2.4 任务管理
任务管理主要包括任务编辑、任务执行和任务状态监控等。任务编辑将服务器对象与需要部署的软件关联形成实例化任务。任务执行实质是批量脚本下发和执行,首先连接目标服务器,连接成功后将脚本管理中存放软件部署脚本的整个文件夹拷贝至目标服务器,赋予每个脚本执行权限并依次执行,实现脚本批量下发和执行的流程如图4所示。
图4 脚本批量下发和执行流程图
其中,部署任务所需的安装包也是通过脚本以http的方式自动下载的。任务状态监控是提供在任务执行过程中跟踪部署状态,展示给用户安装进度和日志信息。这些信息的收集是通过接口反馈给Server端。
3 系统应用
目前系统已建成并投入到机房运维管理中,是实现机房标准化、自动化管理的重要工具。应用结果表明,系统运行稳定,功能齐全,能够满足机房日常部署工作需求。系统的推广应用,减轻了运维人员的工作压力,提高了运维管理的效率,提升了软件部署的交付质量。软件效果如图5所示。
图5 软件效果图
4 总结
通过介绍一种一键部署操作系统、数据库、中间件等软件的实现方案,对工具的总体设计及功能模块的设计进行论述,并给出了可行的设计方案。从服务器上架到交付使用的过程自动化,实现了硬件配置到软件安装后的交付使用。随着虚拟化技术的大规模使用,后期还会继续扩展对虚拟资源的支持。系统各功能模块相互独立,有良好的扩展性,可以扩展脚本,将脚本进行维护编排形成任务,支持更多种类软件的部署。