容器即服务 Magnum开发体验教程

背景介绍

近年来以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支持并不好。

容器即服务 Magnum开发体验教程

为了让云主机能够连接外网,建议申请“公网IP”,并绑定到刚刚创建的云主机中。

容器即服务 Magnum开发体验教程

于是我们就有了干净的Ubuntu开发环境,这时需要安装git、vim等基础工具,并且clone devstack源码。是的,最新版的devstack就可以了。

容器即服务 Magnum开发体验教程

为了使用Magnum插件,我们需要将插件地址添加到local.conf中,下面是本机local.conf的完整配置,使用前需要将HOST_IP改为本地的IP地址。

容器即服务 Magnum开发体验教程

有了local.conf,直接执行“./stack.sh”就可以安装了。安装过程会下载OpenStack需要的所有依赖,UOS提供国内的软件源加速下载,整个过程仍需10分钟左右。

安装成功后可以在浏览器打开“http://HOST_IP”检查Horizon是否正常,本地运行”magnum”测试客户端是否安装成功。

容器即服务 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客户端可以查看状态。

容器即服务 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与状态。

容器即服务 Magnum开发体验教程

剩下的工作就是ssh到相应的虚拟机中,通过docker命令或redis客户端来控制和访问容器了。由于UOS提供了干净的虚拟机开发环境,并且提供基础网络的支持,搭建Magnum开发体验环境还是相对简单的。

Magnum使用总结

相关推荐