背景介绍
近年来以Docker为首的容器技术迅猛发展,OpenStack成立了专门的容器技术小组,负责容器与OpenStack的整合工作。经过 Nova-docker和Heat-driver两次不算十分成功的实践后,社区将重点投入到Magnum项目,也就是OpenStack的 Containers as a Service项目。
Magnum和其他OpenStack项目一样, 利用了Nova、Keystone、Heat等已有的服务,结合了容器调度系统Kubernetes、Mesos和Swarm等,为OpenStack(公有或私有)云提供多租户、安全、灵活的容器服务。相比直接使用容器搭建集群,Magnum提供虚拟机级别的安全隔离,而与Nova-docker相比,Magnum有充分利用了容器轻量以及易迁移的特点,因此Magnum一度成为2015年温哥华OpenStack Summit的焦点项目。目前Magnum项目仍在开发中,预计2015年下半年可以正式Release,在此之前UnitedStack将带你提前体验下一代的容器服务。
在UOS体验Magnum
由于Magnum依赖Nova、Neutron、Keystone和Heat等OpenStack子项目,为了快速搭建Magnum环境,我们将使用社区提供的devstack。devstack是OpenStack官方维护的最小化单机版OpenStack,由于Magnum还没有完全整合到 OpenStack基础架构中,我们需要使用容器技术小组提供的devstack插件来安装带Magnum的单机版OpenStack环境。
首先,我们需要在UOS上创建“云主机”,建议使用Ubuntu 14.04 64bit镜像,devstack对新版Ubuntu支持并不好。
为了让云主机能够连接外网,建议申请“公网IP”,并绑定到刚刚创建的云主机中。
于是我们就有了干净的Ubuntu开发环境,这时需要安装git、vim等基础工具,并且clone devstack源码。是的,***版的devstack就可以了。
为了使用Magnum插件,我们需要将插件地址添加到local.conf中,下面是本机local.conf的完整配置,使用前需要将HOST_IP改为本地的IP地址。
有了local.conf,直接执行“./stack.sh”就可以安装了。安装过程会下载OpenStack需要的所有依赖,UOS提供国内的软件源加速下载,整个过程仍需10分钟左右。
安装成功后可以在浏览器打开“http://HOST_IP”检查Horizon是否正常,本地运行”magnum”测试客户端是否安装成功。
Hooray! 环境已经安装好,接着我们可以按照教程一步一步创建Bay、Service和Pod了,详细步骤如下。
source ./openrc admin admin cd ~ test -f ~/.ssh/id_rsa.pub || ssh-keygen -t rsa -N “” -f ~/.ssh/id_rsa nova keypair-add –pub-key ~/.ssh/id_rsa.pub testkey NIC_ID=$(neutron net-show public | awk ‘/ id /{print $4}’) magnum baymodel-create –name testbaymodel –image-id fedora-21-atomic-3 \ –keypair-id testkey \ –external-network-id $NIC_ID \ –dns-nameserver 8.8.8.8 –flavor-id m1.small \ –docker-volume-size 5 –coe kubernetes magnum bay-create –name testbay –baymodel testbaymodel –node-count 2 magnum bay-list
创建BayModel对象后,我们起两个节点的Bay用来运行一个Kubernetes或Swarm集群,使用magnum客户端可以查看状态。
接着我们下载Kubernetes源码,使用它提供的redis例子,在上面的bay集群通过Kubernetes调度redis容器,详细步骤如下。
git clone https://github.com/GoogleCloudPlatform/kubernetes.git cd kubernetes/examples/redis/ magnum pod-create –manifest ./redis-master.yaml –bay testbay magnum service-create –manifest ./redis-sentinel-service.yaml –bay testbay sed -i ‘s/\(replicas: \)1/\1 2/’ redis-controller.yaml magnum rc-create –manifest ./redis-controller.yaml –bay testbay sed -i ‘s/\(replicas: \)1/\1 2/’ redis-sentinel-controller.yaml magnum rc-create –manifest ./redis-sentinel-controller.yaml –bay testbay magnum bay-show testbay
这样我们就创建了一个redis的ReplicationController,由这个Controller来调度和管理redis容器,通过magnum命令可以查看IP与状态。
剩下的工作就是ssh到相应的虚拟机中,通过docker命令或redis客户端来控制和访问容器了。由于UOS提供了干净的虚拟机开发环境,并且提供基础网络的支持,搭建Magnum开发体验环境还是相对简单的。
Magnum使用总结
Magnum是目前OpenStack与容器技术相结合的***解决方案,Magnum为公有云的独立开发者提供了一套容器调度系统以及生命周期管理的机制,可以快速一键部署容器集群,而针对私有云用户Magnum就是一个多租户的容器集群管理系统,通过Magnum可以快速部署和Scale公司内部基于容器的开发、测试以及线上集群。
与Nova-docker、Heat-driver不同,Magnum充分利用了容器轻量化和快速启动的特点,并且非常友好地整合了Kubernetes、Flannel、Swarm等Docker生态的项目,并且我们很荣幸看到了国内非常优秀的工程师开始为Magnum提供Mesos支持而贡献代码。UnitedStack在Magnum项目早期就高度重视容器技术,是最早体验CoreOS、Kubernetes、Magnum等项目的公司,UOS云平台还提供容器操作系统的支持,除了推出Magnum的使用搭建教程外,我们即将推出Kubernets系列教程,帮助大中小企业在云平台落地Docker等容器技术,如对我们的服务感兴趣可以加入企业容器交流群:462294386。