Icycloud--基于docker的IAAS云平台

是的,docker也可以做IAAS,并且搜狗已经在这样做了:《基于docker构建IAAS和PAAS》,使用docker搭建iaas平台确实会带来很多的问题,但是这样做的收益也非常大,首先是docker大幅度降低内存和硬盘的占用量,而且因为和操作系统共享内核,性能几乎和原生相同,对硬件的要求会减小非常多,小到能在我的云主机上搭建,于是我真的就在我的云主机上搭建了一个:

icycloud : cloud.icybee.cn

这篇文章将要描述搭建一个基于docker的iaas平台的架构和需要的技术。

icycloud 架构

icycloud的整体架构有一定的复杂性,但总体还是很好理解,我就从功能展开来描述架构:

动态二级域名实现方案

在给用户分配主机时,会需要给主机配二级域名,这一部分就涉及到动态二级域名,我的实现方案参照了《这篇文章》,修改了nginx http auth 来实现动态路由,非常聪明。nginx 接收到二级域名请求,http auth 向flask 请求域名ip对应关系,flask请求数据库,然后层层返回完成路由,flask由supervisord监控。

用docker容器模拟虚拟机

这部分参考了《基于docker构建IAAS和PAAS》,并且在baseimage-docker基础上进行了修改,有兴趣的同学可以参考一下文章和镜像代码,然后就是设置密码了,我的思路是将密码在docker容器启动时作为环境变量传入,然后在容器内部设定。

docker跳转机

跳转机是一台特殊的docker虚拟机,镜像是在上边提到的docker模拟机基础上安装了lshell,来限制用户能使用的命令。

后台生成docker container

django控制器接受到用户创建虚拟机请求后不立即生成docker container,而是将请求置入一个消息队列,消息队列是rabbit mq + celery,然后立即返回,由rabbitmq来完成创建docker container,然后写回数据库。

嗯,这差不多就是icycloud的全部架构,完成这一系列架构大概耗费了我两周的业余时间,全部用python完成,一些细节没有提到,感兴趣的同学可以邮件。