Magnum
官方網站、wiki的介紹
Magnum 是Openstack Containers Team所開發的一套API service,允許一些container編制引擎(orchestration engines)能夠做為第一類的資源(first class resource)來使用,例如:Docker Swarm, Kubernetes(K8s), and Apache Mesos,並透過這些資源來管理及佈署container,達成CaaS(container as a service)。
Magnum是透過Heat去編制一個包含了Docker或是K8s的OS image,而這個image允許以VM或裸機(bare metal)的方式運行。
OpenStack和Docker/container的關係
Openstack和Docker可以呈現互補的關係。因為Openstack著重在IaaS的整合及服務,Docker的出現能利用Openstack在IaaS出色的表現,加上container比VM更輕量的特性,將資源更充分利用。

OpenStack中的項目可以按其特性分成4層:
- 基礎設施層(Base Compute Infrastructure): 如Nova, Glance, Keystone
- 擴展基礎設施層(Extended Infrastructure): 能基於第一層提供延伸性的服務,如Cinder、Swift、Neutron、Designate和Ironic
- 可選的增強項目層(Optional Enhancements): 是選用而不是必備的項目,可以提供用戶更高級的服務,如Ceilometer、Horizon和Barbican
- 消費型服務層(Consumption Services):消費所指的就是要消耗或使用下方的三層的服務來達成的第四層服務,如Heat、Magnum、Sahara、Solum和Murano,其中Magnum就是屬於這一層的服務。
- Kolla不屬於這四層,他主要是將Openstack的所有服務都container化,讓安裝佈署即升級更為方便。
Magnum術語及架構
- Container: 容器
- Pod: 是K8s中的基本佈署單元,是一群Containers的集合,可以在同一個host上一起運行
- Service: 把Container與Network port介接起來,可提供服務是Pod的路由代理抽象,Client端便透過Serive做代理,以運行Pod
- Replication Controller: 是Pod的複製抽象,用來做Pod的複製、Scale、HA、load balance
- Bay: 一群Nova instance的群集集合,透過Magnum可創建K8s或Swarm的Bay
- Baymodel: 用來定義Bay的規格
- Node: Bay中的節點

![]()
Magnum主要有兩個服務Magnum API及Magnum Conductor:
Magnum API負責處理client的請求。
Magnum Conductor負責做後端的處理,將client的請求轉送到對應的K8s、Swarm等backend
Magnum的角色與Nova有一定的相似程度,Nova透過不同的Hypervisor去管理VM,而Magnum透過不同的orchestration engines去管理container。
Magnum所能改進問題
- 在Heat之上實做,並無法提供Multi-tenancy的架構
- Asynchronous API 允許Request提出後,不用持續被block and wait
- 結合並利用Heat的Orchestartion機制,而不是直接靠Heat實做
- 利用Keystone提供SSO(Single-sign on)
Magnum 新特色 2015 Oct. Liberty Release
- 支援Apache Mesos
- Secure Bay,在Magnum API與Client之間實做TLS(Transport Layer Security)
- 更多的Load Balancer,更容易做到scale
- Multi-Master for HA
Magnum FAQ
- Magnum於nova有什麼不同?
Magnum提供API來部署應用容器,與nova-docker部署的容器處於不同的生命週期。事實上,Bay是一群Nova instance的集合 - Magnum於Dokcer和K8S有什麼不同?
與Docker&k8s相比,Magnum提供了一組和Keystone一起工作異步的api,具備多租戶的能力。同時,Magnum不負責編排的工作,編排工作是有heat完成的。在Mangum中,K8S和docker都是Magnum的組件。 Magnum使用它們作為容器後端來管理容器。 - 是否與Nova-docker做的事情是相同的?
Nova-Docker是nova的一個driver,使得用戶可以將容器作為一種輕量的虛擬機來使用。但是,Magum是用來部署用戶的服務容器的。 Magnum提供了一套獨立的ReST API。 Magnum並不會直接調用nova的API創建Bay。 Magnum使用的是heat的API來創建Bay。 - 誰需要使用Magnum?
Magnum為OpenStack雲提供營提供了一種為雲用戶提供容器來託管服務的自助解決方案。 提供了超過現有云資源之外的能力。Magnum支持指定應用實例個數的方式進行應用伸縮,能夠在應用實例失敗的情況下自動重新啟動應用實例,與虛擬機比起來能夠將應用跟更緊的打包一起。 - Heat Docker 是否能完成Magnum做的事情?
Heat Docker沒有提供資源調度的能力及選擇所使用容器技術的能力。 Heat docker並不支持與swarm和k8s的集成。 - 多租戶在Magnum中意味著什麼?
由Mangnum創建出來的容器,服務,Pods,Bays這些資源只對創建他的租戶下的用戶可見。 Bays在不同租戶間不是共享的,不同租戶的容器不會運行在相同的bay裡,這意味這不同租戶的容器不會運行在同一個內核上。將同一個租戶的容器運行在相同的pods和bays裡面,將不通租戶的容器運行在不同的內核上是Magnum的關鍵安全特性。在租戶的隔離性上,使用Mangum創建的容器具有與使用nova創建虛擬機相同的隔離性。