容器即服務 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支持并不好。
為了讓云主機能夠連接外網,建議申請“公網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。