容器即服務(wù) Magnum開(kāi)發(fā)體驗(yàn)教程
背景介紹
近年來(lái)以Docker為首的容器技術(shù)迅猛發(fā)展,OpenStack成立了專門的容器技術(shù)小組,負(fù)責(zé)容器與OpenStack的整合工作。經(jīng)過(guò) Nova-docker和Heat-driver兩次不算十分成功的實(shí)踐后,社區(qū)將重點(diǎn)投入到Magnum項(xiàng)目,也就是OpenStack的 Containers as a Service項(xiàng)目。
Magnum和其他OpenStack項(xiàng)目一樣, 利用了Nova、Keystone、Heat等已有的服務(wù),結(jié)合了容器調(diào)度系統(tǒng)Kubernetes、Mesos和Swarm等,為OpenStack(公有或私有)云提供多租戶、安全、靈活的容器服務(wù)。相比直接使用容器搭建集群,Magnum提供虛擬機(jī)級(jí)別的安全隔離,而與Nova-docker相比,Magnum有充分利用了容器輕量以及易遷移的特點(diǎn),因此Magnum一度成為2015年溫哥華OpenStack Summit的焦點(diǎn)項(xiàng)目。目前Magnum項(xiàng)目仍在開(kāi)發(fā)中,預(yù)計(jì)2015年下半年可以正式Release,在此之前UnitedStack將帶你提前體驗(yàn)下一代的容器服務(wù)。
在UOS體驗(yàn)Magnum
由于Magnum依賴Nova、Neutron、Keystone和Heat等OpenStack子項(xiàng)目,為了快速搭建Magnum環(huán)境,我們將使用社區(qū)提供的devstack。devstack是OpenStack官方維護(hù)的最小化單機(jī)版OpenStack,由于Magnum還沒(méi)有完全整合到 OpenStack基礎(chǔ)架構(gòu)中,我們需要使用容器技術(shù)小組提供的devstack插件來(lái)安裝帶Magnum的單機(jī)版OpenStack環(huán)境。
首先,我們需要在UOS上創(chuàng)建“云主機(jī)”,建議使用Ubuntu 14.04 64bit鏡像,devstack對(duì)新版Ubuntu支持并不好。
為了讓云主機(jī)能夠連接外網(wǎng),建議申請(qǐng)“公網(wǎng)IP”,并綁定到剛剛創(chuàng)建的云主機(jī)中。
于是我們就有了干凈的Ubuntu開(kāi)發(fā)環(huán)境,這時(shí)需要安裝git、vim等基礎(chǔ)工具,并且clone devstack源碼。是的,***版的devstack就可以了。
為了使用Magnum插件,我們需要將插件地址添加到local.conf中,下面是本機(jī)local.conf的完整配置,使用前需要將HOST_IP改為本地的IP地址。
有了local.conf,直接執(zhí)行“./stack.sh”就可以安裝了。安裝過(guò)程會(huì)下載OpenStack需要的所有依賴,UOS提供國(guó)內(nèi)的軟件源加速下載,整個(gè)過(guò)程仍需10分鐘左右。
安裝成功后可以在瀏覽器打開(kāi)“http://HOST_IP”檢查Horizon是否正常,本地運(yùn)行”magnum”測(cè)試客戶端是否安裝成功。
Hooray! 環(huán)境已經(jīng)安裝好,接著我們可以按照教程一步一步創(chuàng)建Bay、Service和Pod了,詳細(xì)步驟如下。
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
創(chuàng)建BayModel對(duì)象后,我們起兩個(gè)節(jié)點(diǎn)的Bay用來(lái)運(yùn)行一個(gè)Kubernetes或Swarm集群,使用magnum客戶端可以查看狀態(tài)。
接著我們下載Kubernetes源碼,使用它提供的redis例子,在上面的bay集群通過(guò)Kubernetes調(diào)度redis容器,詳細(xì)步驟如下。
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
這樣我們就創(chuàng)建了一個(gè)redis的ReplicationController,由這個(gè)Controller來(lái)調(diào)度和管理redis容器,通過(guò)magnum命令可以查看IP與狀態(tài)。
剩下的工作就是ssh到相應(yīng)的虛擬機(jī)中,通過(guò)docker命令或redis客戶端來(lái)控制和訪問(wèn)容器了。由于UOS提供了干凈的虛擬機(jī)開(kāi)發(fā)環(huán)境,并且提供基礎(chǔ)網(wǎng)絡(luò)的支持,搭建Magnum開(kāi)發(fā)體驗(yàn)環(huán)境還是相對(duì)簡(jiǎn)單的。
Magnum使用總結(jié)
Magnum是目前OpenStack與容器技術(shù)相結(jié)合的***解決方案,Magnum為公有云的獨(dú)立開(kāi)發(fā)者提供了一套容器調(diào)度系統(tǒng)以及生命周期管理的機(jī)制,可以快速一鍵部署容器集群,而針對(duì)私有云用戶Magnum就是一個(gè)多租戶的容器集群管理系統(tǒng),通過(guò)Magnum可以快速部署和Scale公司內(nèi)部基于容器的開(kāi)發(fā)、測(cè)試以及線上集群。
與Nova-docker、Heat-driver不同,Magnum充分利用了容器輕量化和快速啟動(dòng)的特點(diǎn),并且非常友好地整合了Kubernetes、Flannel、Swarm等Docker生態(tài)的項(xiàng)目,并且我們很榮幸看到了國(guó)內(nèi)非常優(yōu)秀的工程師開(kāi)始為Magnum提供Mesos支持而貢獻(xiàn)代碼。UnitedStack在Magnum項(xiàng)目早期就高度重視容器技術(shù),是最早體驗(yàn)CoreOS、Kubernetes、Magnum等項(xiàng)目的公司,UOS云平臺(tái)還提供容器操作系統(tǒng)的支持,除了推出Magnum的使用搭建教程外,我們即將推出Kubernets系列教程,幫助大中小企業(yè)在云平臺(tái)落地Docker等容器技術(shù),如對(duì)我們的服務(wù)感興趣可以加入企業(yè)容器交流群:462294386。