OpenStack Project-Zun(容器管理)

Zun 容器服务简介

Zun 允许用户无需管理服务器或集群即可快速启动和运行容器。它通过与 Neutron 、Cinder、Keystone 和其他核心 OpenStack 服务集成,无缝地将先进的企业网络、存储和身份验证功能添加到容器中。
Zun目标在于解决 Nova Docker driver方案存在的问题,独立于 Nova 之外实现 Docker 部署调度框架,自身实现与 Glance、Neutron、Cinder等组件的集成,但并不实现对容器编排引擎(Container Orchestration Engines COE)的部署调度。Nova-docker通过Nova API访问容器,而Zun不受Nova API的限制。
Zun和Magnum的差异在于Zun目标是提供管理容器的API,而Magnum提供部署和管理容器编排引擎(COE)的API。Zun将容器作为Openstack管理的资源,为用户提供了创建和管理这些容器的接口。被Zun管理的容器和其他Openstack资源能够良好的集成在一起,例如Neutron网络和Cinder卷。用户使用统一的、简化的API接口来管理容器,而不需要关心不同容器技术的差异。
Zun不准备实现COE提供的很多先进的功能(例如容器保活、负载均衡等),而是提供基本的容器操作(CRUD),并和Openstack紧密集成。

使用 devstack 安装 Zun

local.conf 添加如下内容,运行 ./stack.sh

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
$ vim local.conf

……
#Enable Zun plugin
enable_plugin devstack-plugin-container http://git.trystack.cn/openstack/devstack-plugin-container  #安装docker,如果已经安装docker,可以忽略
enable_plugin zun http://git.trystack.cn/openstack/zun
enable_plugin zun-ui http://git.trystack.cn/openstack/zun-ui
enable_plugin kuryr-libnetwork http://git.trystack.cn/openstack/kuryr-libnetwork
KURYR_CAPABILITY_SCOPE=local          #单节点安装使用local,多节点要改为global
KURYR_ETCD_PORT=2379

Zun 测试

1. Zun-ui 预览

创建 Container 的页面和创建虚拟机的页面类似。可以选择来自 DockerHub 或者 Glance 的镜像,可以选择网络、端口、安全组等,支持容器特有的一些功能如限制cpu和内存的使用 image image

2. 创建容器

考虑到 DockerHub 的龟速,先把镜像拉取到本地

1
# docker pull cirros

使用命令行创建一个 cirros 的容器

1
$ openstack appcontainer run --name cirros --net network=$NET_ID cirros

3. 查看容器

1
2
3
4
5
6
# openstack appcontainer list
+--------------------------------------+--------+--------+---------+------------+-----------+-------+
| uuid                                 | name   | image  | status  | task_state | addresses | ports |
+--------------------------------------+--------+--------+---------+------------+-----------+-------+
| 61dfa221-826b-496c-963a-e5222ca054a3 | cirros | cirros | Running | None       | 10.0.0.4  | []    |
+--------------------------------------+--------+--------+---------+------------+-----------+-------+

4. 进入容器查看网络连接

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
# openstack appcontainer exec --interactive cirros /bin/sh

# openstack appcontainer exec --interactive cirros /bin/sh
connected to container "cirros"
type ~. to disconnect
/ # ping 10.0.0.5                 # 10.0.0.5 为同一个网络的虚拟机,非容器
PING 10.0.0.5 (10.0.0.5): 56 data bytes
64 bytes from 10.0.0.5: seq=0 ttl=64 time=5.934 ms
64 bytes from 10.0.0.5: seq=1 ttl=64 time=0.969 ms
64 bytes from 10.0.0.5: seq=2 ttl=64 time=0.855 ms
64 bytes from 10.0.0.5: seq=3 ttl=64 time=0.791 ms
^C
--- 10.0.0.5 ping statistics ---
4 packets transmitted, 4 packets received, 0% packet loss
round-trip min/avg/max = 0.791/2.137/5.934 ms

5. dashboard上面的容器详情

在 dashboard 上面也可以查看容器的详细信息和 log 以及控制台,查看控制台需要容器以 interactive 模式启动 image 对容器的一些基本操作:更新、停止、重启、暂停、执行命令、删除等操作 image image

总结

Zun 的操作基本和 docker 的操作一致,使用起来和原生docker容器没有区别。但是现在可以和 Openstack 的资源良好的结合在一起,统一管理,提高的 OpenStack容器管理的灵活度,还是很令人期待的。

遇到问题

1. zun-compute 警告信息

查看 devstack@zun-compute.service 服务有如下警告:

1
2
3
4
5
$ journalctl -f --unit devstack@zun-compute.service

Mar 07 13:51:28 queens.domian.tld zun-compute[992]: 2018-03-07 13:51:28.172 DEBUG docker.auth [-] Trying paths: ['/opt/stack/.docker/config.json', '/opt/stack/.dockercfg'] from (pid=992) find_config_file /usr/lib/python2.7/site-packages/docker/auth.py:234
Mar 07 13:51:28 queens.domian.tld zun-compute[992]: 2018-03-07 13:51:28.173 DEBUG docker.auth [-] No config file found from (pid=992) find_config_file /usr/lib/python2.7/site-packages/docker/auth.py:241
Mar 07 13:51:28 queens.domian.tld zun-compute[992]: 2018-03-07 13:51:28.208 DEBUG zun.compute.manager [-] Complete syncing container states. from (pid=992) sync_container_state /opt/stack/zun/zun/compute/manager.py:951

.docker/config.json 和 .dockercfg 是 docker login 成功后创建的文件。因为 Zun 可以直接从 DockerHub 拉取镜像,我们需要提供认证信息。

1
2
3
4
5
$ docker login
Login with your Docker ID to push and pull images from Docker Hub. If you don't have a Docker ID, head over to https://hub.docker.com to create one.
Username: lovelonger           #这里比较坑,只能写用户名,写邮箱一直登录失败
Password: 
Login Succeeded

2. 端口映射的问题

暂时不知道创建容器的时候怎么添加端口映射,如果容器创建在私有网络上面,上面的服务外部无法访问。

一个默默无闻的工程师的日常
Built with Hugo
主题 StackJimmy 设计