1.背景
随着光音业务规模的上升,线上业务产品的数量及服务器的采购量也越来越大。当达到一定数量级后,就不能使用常规的维护方法来解决这些问题。
以前,一旦业务量上去,我们就不得不停下手头的开发工作,部署业务所需要的环境及线上调试,到最后,只有特别熟悉业务和代码的同事才能胜任此工作。
为了解决这些问题,我们从前年开始就关注了LXC,并试着小规模地使用了一段时间,但是由于LXC本身存在一系列的问题,比如内核版本的限制及二次开发困难,没能大规模地推 广。后来随着Docker的发展及火热,我们也接触到了CoreOS,它的AB分区升级特性特别吸引人。使用后才发现,跟宣传写的不一样,还是需要重启服务器才能升级内核的,但是总的来说,结合Fleet的使用,可以动态地把业务迁到其它服务器,来达到平滑升级的目的,因此还是非常不错的。我是从开发转到基础平台维护岗位的,所以,希望用开发的方式来解决运维的问题,并想通过改变运维的方式的来加快业务研发的速度。但是真正专职做平台开发后,才意识到搭建整个运维体系是多么困难的事。所以,为了更快地构建我们的平台,业务的选型首选开源框架,然后再它的基础上,根据业务的需要做二次开发。借着Google的名气以及相对完善的生态圈,我们最终选择了Kubernetes + Coreos + Docker,做为整个平台编排调度的基础。我们每次采购机器,一般都是几百个节点,所以整个平台的部署就非常头疼,特别是CoreOS和Kubernetes,必须借助梯子才能安装和更新,让人非常不爽。前期的大部分时间都浪费在这上面了!于是,写了一个简单的Yoo-Installer工具 来解决这些问题,现在分享给大家。
项目代码我放到github上了: https://github.com/Goyoo/yoo-installer,代码还在不断完善中,如果有问题,可以直接在上面提Issue。另外,我们组的一个同事赵文来也贡献k8s-client 的Nodejs版本,一并分享给大家:https://github.com/Goyoo/node-k8s-client,希望能跟大家一起打造美好的Docker生态圈

下面介绍Yoo-Installer是如何工作的
它共分为DHCP Service, TFTP Service, HTTP Service, 其中HTTP Service 里包括了Coreos 的引导,安装到硬盘,Kubernetes的安装及其它服务脚本的初始化。

这里写图片描述

PXE引导
收到DHCP广播,获取IP
使用TFTP进行通信,传输CoreOS的基础IMGAGE
在内存启动CoreOS系统
系统启动成功后,下载脚本,执行安装Kubernetes及其它相关服务。

在这里需要分享几个点:服务器的IP
在安装服务器前,应该确定好服务器的IP,因为IP在后面的安装是一个非常重要的变量。比如etcd的service IP,Kubernetes的Master IP都需要写入到配置里的。
我们是这样做的:我们的服务器是高密度刀片服务器,都配有管理模块。通过一些简单的API调用,就可以得到所有的网卡mac信息,与KVM的IP保持一定的逻辑关系,这样就可以保证服务器的IP有序,便于日后的管理与维护。(可以参考Yoo-installer项目的app/utils/IPMI/dhcpMacList.js,通过这段代码得到dhcpd所需要的配置格式,直接使用即可)。

Logo

开源、云原生的融合云平台

更多推荐