蜂窝之Iaas云主机快速启动的优化
蜂巢之Iaas云主机快速启动的优化
蜂巢之Iaas云主机快速启动的优化
使用过Linux的,不使用桌面的技(无)术(限)大(装)拿(X)的筒子们大概都有经验,电脑的操作启动时间是速度很快的,往往都是在几秒级别完成。但是在同样没有桌面的云主机启动经常给我们的却不是这样一个感觉,特别是在第一次创建的过程中,总是发现启动过程需要10s+的时间,于是就想,能不能也加速一把,享受秒级别的云主机启动的畅快体验。
PS:目前我们所使用的蜂巢容器是在虚拟机内部进行启动的,云主机的启动速度也是影响蜂巢容器快速启动的一个重要部分。
1. 首先我们分析新创建云主机的启动过程
在此只分析比较关键的一些步骤,和一些比较耗时的步骤。
- 首先要重新扩展根分区的分区表和适配相应的文件系统。在创建镜像的时候我们采用2G大小的镜像,但是在最终创建云主机的时候使用不同的规格,故需要把跟分区扩展为目标规格的大小,然后使用resize2fs来扩展跟文件系统。
- 初始化网络相关的步骤,包括网络设备的IP,路由等相关部分。
- 云主机的初始化相关工作,在此我们使用的是cloud-init来进行相关的初始化工作,这部分涉及到比较多的工作:
- 获取云主机的meta数据,
- 根据meta数据判断云主机的生命周期并设置hostname
- 生成hostkey,注入相关的登录key,
- 启动相关的服务如openssh-server,内部的agent上线表示准备好为容器的初始化服务。
到此为止,云主机的启动基本完成,Paas的服务接过接力棒并开始进行进一步的
下面我们贴出的是原始的云主机启动的时间图表
2. 接下来看看我们的手段
在图中我们可以看出,云主机启动花费了超过10s加的时间。具体的时间时间分析参照图片。我们把分析结果和优化办法再此处说明。
- 1, cloud-init数据源使用169.254【ec2】的数据源比较慢,切换为configdrive。
- 2, cloud-init把多个阶段的任务放在一个阶段中,每个阶段的任务运行都会消耗比较久的时间。
- 3, 切换网络由DHCP获取ip和路由换为由静态IP注入获取。
- 4, 把启动所需要的mod均在内核中编译,去除initrd部分,并且在做镜像的时候直接把系统盘做到目标大小(目标默认系统盘20G,其他数据全部放在云硬盘中)
其中除了第4条,其他部分我们已经发布上线,目前我们的线上云主机启动时间是4.5s左右,如果加上第4条,就超额完成了我们的目标—-不超过5秒的内部启动时间。
ps:具体的实现过程,如有问题或者好的建议请联系abaobo199@gmail.com
3. 最后看看我们的成果
从下图可以看到我们的记过,是不是很诱人,我们已经从最开始的10s+的启动时间减少到现在的4秒多。上面的第4条再次处并没有使用。