Zun組件簡介
Zun是Openstack中提供容器管理服務的組件,于2016年6月建立。Zun的目標是提供統一的Openstack API用于啟動和管理容器,支持多種容器技術。Zun原來稱為Higgins,后改名為Zun。
Zun計劃支持多種容器技術,Docker,Rkt,clear container等,目前只支持Docker、對于k8s 的開發進度社區也已經很快進行中。
zun組件的架構圖
Openstack支持容器主要有Nova Docker driver,Heat Docker driver和Magnum等多個方案。Nova Docker driver方案將容器像虛擬機一樣操作,通過增加 Nova Docker driver,實現對 Docker容器的啟停、創建等常規虛擬機的操作。缺點是由于Docker和虛擬機差別,導致容器的許多功能無法實現,例如容器關聯、端口映射等。
Zun目標在于解決 Nova Docker driver方案存在的問題,獨立于 Nova 之外實現 Docker 部署調度框架,自身實現與 Glance、Neutron、Cinder等組件的集成,但并不實現對容器編排引擎(Container Orchestration Engines COE)的部署調度。Nova-docker通過Nova API訪問容器,而Zun不受Nova API的限制。
Magnum是OpenStack中一個提供容器集群部署的服務,通過Heat部署虛擬機和物理機,組成集群,然后調用COE接口完成容器的部署。Magnum項目創建之初,項目目標以Caas為宗旨,即容器即服務;在后續的發展中將功能集中在容器的集群部署上。Zun和Magnum的差異在于Zun目標是提供管理容器的API,而Magnum提供部署和管理容器編排引擎(COE)的API。
Zun將容器作為Openstack管理的資源,為用戶提供了創建和管理這些容器的接口。被Zun管理的容器和其他Openstack資源能夠良好的集成在一起,例如Neutron網絡和Cinder卷。用戶使用統一的、簡化的API接口來管理容器,而不需要關心不同容器技術的差異。
Zun不準備實現COE提供的很多先進的功能(例如容器保活、負載均衡等),而是提供基本的容器操作(CRUD),并和Openstack緊密集成。
Zun組件的使用
Zun組件提供了大量的命令用于部署和管理容器
接下來具體玩法:
查看neutron網絡:
(openstack) network list
+--------------------------------------+-------+--------------------------------------+
| ID | Name | Subnets |
+--------------------------------------+-------+--------------------------------------+
| 430e352f-d501-4fdb-9748-30b5557081ef | vx600 | ffa869af-6b86-407a-9a84-8a839b30ef3b |
| c10df5e8-661e-4f52-b56b-a2f83b18a60e | vx500 | 35b3cbfa-9946-4819-9b2a-c889917ad6dc |
| c35653fa-092c-4e17-ab36-17e2466af619 | ext? ? ?| b7d4743f-6dff-4526-8f63-643e39000a90 |
+--------------------------------------+-------+--------------------------------------+
創建容器:
(openstack) appcontainer run --name container01 --net network=430e352f-d501-4fdb-9748-30b5557081ef centos ping 8.8.8.8
查看zun-compute,這個網絡是從neutron自動同步過來的
[root@compute01 ~]# docker network list
NETWORK ID NAME DRIVER SCOPE
82238add79df 430e352f-d501-4fdb-9748-30b5557081ef kuryr global
78dffbdc2bb3 bridge bridge local
afd55e93f749 host host local
3de4b85f1ecc none null local
查看容器是否創建成功:
[root@compute01 ~]# docker ps
CONTAINER ID? ? ? ? ? IMAGE? ? ? ? ? ? ? ? ?COMMAND? ? ? ? ? ? ? ? ? ? ? ? CREATED? ? ? ? ? ? ? ? ? ? ?STATUS? ? ? ? ? ? ? ? ? ? ? ? ? ? PORTS? ? ? ? ? ? ? ? ? ? ? ? NAMES
3a424b5859c0? ? ? ? centos:latest? ? ? ? ? ?"ping 8.8.8.8"? ? ? ? ? ? ? ? ? ? ? About a minute ago? ? ? ?Up About a minute? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? zun-dfc6176c-f210-4551-849f-33c6b172341b
f6d9875e2817? ? ? ? kuryr/libnetwork? ? ? ?"/opt/kuryr-libnetwo… "? ? ? ?42 hours ago? ? ? ? ? ? ? ? ?Up 8 minutes? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?kuryr-libnetwork
?
我測試的容器,容器和vm公用neutron網絡
?
?
?
?
接下來開放容器端口:
?
配置上浮動IP就可以訪問容器了
?有興趣的可以看看Zun 的Capsule 玩法。在實際使用中上面的方式可以略顯麻煩。可以考慮Zun?Capsule 方式創建