Project Loda

Community

公司要改进现有的装机系统,尽量自动化、快速化的批量安装操作系统,提到自动化装机,可能很多人都知道cobbler,之前公司用的也是cobbler,但是在使用工程中遇到了很多问题,于是我们在开源社区调研了下,最终用了一款开源的系统:idcos,这套系统是用Go写的。随着我们的使用,发现这套系统并不能满足我们的所有需求,于是开始给官方提供patch,进行功能扩展,但是在整个过程中,并不是很开心,官方的响应速度慢的出奇,并且整个系统的设计有些细节并不是很满意,正好组里来了几个新人,感觉时候到了。

上图是我们在原有的系统之上做的功能扩展。

LODA

2015年12月开始我们试用了开源的idcos系统,其间我们尝试将遇到的一些问题和新的需求以PR的形式反馈给官方,但是官方反应始终很慢,另一方面,我们也尝试自己维护一个分支,但是后来由于开源代码的不可维护性,我们做了最坏的打算,从头开始。loda-server是整个项目最重要的组件之一,它为loda-agent和loda-portal提供API操作接口。

一个人一个星期完成了 server 和 agent 的功能实现。因为涉及到多机房部署,况且装机系统要和我们的线上生产环境要二层隔离开,以防止DHCP Server的影响。但是我们的最终目标是 二层不隔离(就算隔离,对用户透明),做到这一步,要把交换机的自动化配置搞好才行。现在多机房部署我们会使用多个装机vlan进行隔离。下面是我们的多机房架构,两个机房使用两个vlan。


                            Loda Arch

                   +--------------------------+
                   |                          |
                   |          Portal          |  ZQ IDC
                   |                          |
                   +--+--+--------------------+
                      |  |
++------------------------------+------------------------------+
 |     +----------------------+ | +----------------------+     |
 |     |                      | | |                      |     |
 |     |       Server         | | |         Server       |     |
 | <---+                      | | |                      +-->  |
 | |   |                      | | |                      |  |  |
 | |   +----------------------+ | +----------------------+  |  |
 | |   +-------------------------------------------------+  |  |
 | |   |                       D|B                       |  |  |
 | |   +-------------------------------------------------+  |  |
 | |                            |                           |  |
 | |   +--------------------+   |  +---------------------+  |  |
 | |   |     Server (agent) |   |  |      Server (agent) |  |  |
 | |   |                    |   |  |                     |  |  |
 | |   +--------------------+   |  +---------------------+  |  |
 | +->                          |                         <-+  |
 |     +--------------------+   |  +---------------------+     |
 |     |     Server (agent) |   |  |      Server (agent) |     |
 |     |                    |   |  |                     |     |
 |     +--------------------+   |  +---------------------+     |
 |               .              |             .                |
 |               .              |             .                |
 |               .              |             .                |
 |                              |                              |
 +------------------------------+------------------------------+

             SYQ IDC                       SJS IDC


configuration

原有开源的系统采用了rpm来分发硬件配置文件的,为了降低系统的维护性,提高系统的易用性,并且做到配置可以方便及时review,我们打算把所有的硬件配置脚本和ks文件放到自己的git上。

bootOS ----> 启动 agent ---> 判断硬件类型 ----> 拉取配置信息 ----> 配置 ----> 重启安装系统

我们在自己内部的gitlab上心建立了一个group: loda-tools 专门用于存放配置脚本。

test

跑到机房一个人守着服务器进行测试。

Monitor

由于批量装机拉取系统镜像的时候很耗费带宽资源,甚至可能成功系统的整个并发瓶颈,于是对系统做好流量监控就显得尤为重要,之前用go写了个小的流量监控系统,配合Grafana做展示。正好派上用场。

update 2016.05.05

五一过后,我们的系统迎来了第一次大规模上线,公司的一个核心机房来了170台服务器,我们打算用Loda给这批服务器安装操作系统。准备了这么长时间终于要上线了。

灰度测试了几台之后,开始将服务器序列号批量导入系统,系统开始自动安装。

30min后,系统安装完成。

问题总结:

  1. 1个C段的DHCP能够同时满足90台服务器安装
  2. 虽然刚刚上架,总会有一些故障的机器
  3. 型号对比严格
  4. raid必须测试 你面对的是各种各样的硬件