OpenStack Zun组件详解

作者简介:蒋暕青

什么是ZUN?

Zun是Openstack中提供容器管理服务的组件,于2016年6月建立。Zun的目标是提供统一的Openstack API用于启动和管理容器,支持多种容器技术。Zun原来称为Higgins,后改名为Zun。Zun计划支持多种容器技术,Docker,Rkt,clear container等,目前只支持Docker。OpenStack Queens版本发布,由于容器社区的火热,一项值得关注的补充则为“Zun”,它在OpenStack项目中负责提供容器服务,旨在通过与Neutron、Cinder、Keystone以及其它核心OpenStack服务相集成以实现容器的快速普及。通过这种方式,OpenStack的原有网络、存储以及身份验证工具将全部适用于容器体系,从而确保容器能够满足安全与合规性要求。

Zun集成了OpenStack什么服务?

Zun需要下列的OpenStack的服务来支持:

  • Keystone
  • Neutron
  • Kuryr-libnetwork

Zun也可以集成下面的OpenStack的服务(可选):

  • Cinder
  • Heat
  • Glance

在使用Zun的时候,可以直接调用Zun的自带工具或API来创建和管理Docker的Workflow。 Zun的用户功能(以及某些管理员功能)都通过REST API公开,可以直接使用。

另外,也可以通过其他OpenStack组件的API或者SDK来间接调用Zun的API。

  • Horizon: 通过OpenStack WebUI来调用
  • OpenStack Client: 通过OpenStack CLI来调用
  • Zun Client: 通过Zun的Python client来调用

Magnum与ZUN的区别

Magnum是OpenStack中一个提供容器集群部署的服务,通过Heat部署虚拟机和物理机,组成集群,然后调用COE接口完成容器的部署。Magnum项目创建之初,项目目标以CaaS为宗旨,即容器即服务;在后续的发展中将功能集中在容器的集群部署上。

Zun和Magnum的差异在于Zun目标是提供管理容器的API,而Magnum提供部署和管理容器编排引擎(COE)的API。Zun不准备实现COE提供的很多先进的功能(例如容器保活、负载均衡等),而是提供基本的容器操作(CRUD),并和Openstack紧密集成。

ZUN架构

为了更好理解zun与OpenStack其他组件的关系,下面是zun的架构图

  • Zun API: 处理 REST请求并确认输入参数
  • Zun Compute: 启动容器并调度计算资源
  • Keystone: 认证系统
  • Neutron: 提供容器网络
  • Glance: 用于存储docker镜像(另一种选择是使用DockerHub)
  • Kuryr: 用于连接容器网络和OpenStack Neutron的一种plugin

ZUN 怎么使用?

Zun主要使用Container和Capsule的概念。除了Container概念之外,Zun还提供了一些稍微先进的抽象概念,如Capsule。 Zun Capsule的概念有点像Kubernetes Pod,代表一组容器。 Capsule用于将多个需要彼此紧密合作的容器分组,以实现业务目标。

Container由Docker或其他容器引擎支持。Zun集成了基本的Docker的功能(如创建/删除容器)。

Zun的操作要求与其他OpenStack服务相似。 它需要在控制器节点上安装Zun API server,并在每个计算节点上安装Zun-agent。 Zun的主要依赖是一组OpenStack Base Services:与oslo兼容的数据库,消息队列,Etcd和Keystone。

此外,Zun还为容器添加了多个由OpenStack提供的功能。 例如,默认情况下,Zun容器可以使用Neutron分配的IP地址,可以attach Cinder卷,使用由Keystone提供的认证服务。 对于OpenStack用户,他们会发现开始使用Zun容器相当容易。

将Zun与Neutron一起使用,可以在Nova实例所在的隔离网络环境中创建容器。 VM的Neutron功能(即安全组,QoS)也可用于Zun容器。

下面命令就是利用了Neutron和Kuryr来为zun容器提供网络服务的:

为了容纳需要保存数据的应用程序,常用的方法是利用外部服务为容器提供持久卷。 Zun通过与OpenStack Cinder集成解决了这个问题。 创建容器时,用户可以选择将Cinder卷装入容器。 Cinder卷可以是租户中的现有卷或新创建的卷。 每个卷将被绑定到容器文件系统中的路径中,并且存储在那里的数据将被持久化。

下面命令就是利用Cinder来持久化存储容器数据的:

在Orchestration方面,与其他提供内置编排的容器平台不同,Zun使用外部编排系统来实现此目的(现在,Zun与OpenStack Heat集成,将来,Zun将与Kubernetes集成)。通过使用外部协调工具,最终用户可以使用该工具提供的DSL定义他们的容器化应用程序。特别是,借助Heat,还可以定义由容器资源和OpenStack资源组成的资源,例如Neutron负载平衡器,浮动IP,Nova实例等。

ZUN和Kubernetes是竞争关系吗?

Zun和Kubernetes是互补的关系,事实上,Zun社区正在积极地在与Kubenetes集成。目前Zun与COE集成的工作主要还是在Kubenetes上,与其他COE集成还需要时间。

Kubernetes使容器更易于部署,管理和扩展。 但是,在OpenStack上使用Kubernetes仍然需要用户手动底层基础设施,如虚拟服务器集群。 用户需要负责初始容量规划,例如决定VM群集大小以及正在运行的VM群集的维护。

Serverless容器技术或解决方案(如亚马逊网络服务(AWS)Fargate,Azure容器实例(ACI)和OpenStack Zun)的出现为在云上运行容器提供了一种可行的替代方案。 Serverless方法允许用户按需运行容器,而无需预先创建或管理自己的集群。

Zun将利用Kubernetes作为编排层,Kubernetes使用OpenStack Zun来提供“Serverless”容器。

ZUN和Kubernetes结合实现细节:

Virtual-kubelet这个项目可以完成kubelet 到Zun的转换,需要在virtual-kubelet这个项目里面注册一下Zun的driver

感兴趣的同学可以点击下面链接:

https://github.com/virtual-kubelet/virtual-kubelet

如果您选择私有云解决方案,则可以使用OpenStack Zun构建无服务器容器云。 但是,如果需求是独立的基础架构的解决方案,则可以选择使用平台级别的工具,例如Kubernetes。将来,可以将Kubernetes连接到无服务器技术,以便可以跳过配置Kubernetes节点集群并按需启动Kubernetes Pod的步骤。

ZUN-UI 预览

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

对容器的一些基本操作:更新、停止、重启、暂停、执行命令、删除等操作

总结

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

参考资料

https://docs.openstack.org/zun/latest/

Wiki: https://wiki.openstack.org/wiki/Zun

Source code: https://github.com/openstack/zun

原文发布于微信公众号 - SDNLAB(SDNLAB)

原文发表时间:2018-05-31

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏A周立SpringCloud

Docker系列教程19-Docker Compose简介

1612
来自专栏Rainbond开源「容器云平台」

如何正确理解Docker生态

1263
来自专栏python3

Docker是啥?

Docker的图标代表,它托着许多集装箱。我们可以把宿主机可当做这只鲸鱼,把相互隔离的容器可看成集装箱,每个集装箱中都包含自己的应用程序。

872
来自专栏北京马哥教育

如何用两个小时入门 Docker?

最初的2小时,你会爱上Docker,对原理和使用流程有个最基本的理解,避免满世界无头苍蝇式找资料。本人反对暴风骤雨式多管齐下狂轰滥炸的学习方式,提倡迭代学习法,...

1010
来自专栏CSDN技术头条

如何构建企业级Docker Registry Server

很多人问我,虚拟机镜像和docker镜像的区别是什么?其实区别非常明显,我们可以通过阅读Dockerfile文件就可以知道这个镜像都做了哪些操作,能提供什么服务...

22110
来自专栏云计算爱好者

简单介绍Docker的架构特性与局限

Docker 是一个开源的应用容器引擎,让开发者可以打包他们的应用以及依赖包到一个可移植的容器中,然后发布到任何流行的Linux机器上,也可以实现虚拟化。容器是...

2436
来自专栏我是攻城师

容器化网页应用

3566
来自专栏企鹅号快讯

【分享吧】带你初识Docker

一、引言 如今,Docker作为业界领先的轻量级虚拟化容器管理引擎,给全球开发者提供了一种新颖、便捷的软件集成测试与部署之道。Docker借助容器技术彻底释放了...

2285
来自专栏WindCoder

Docker入门:简化Devops

如果您喜欢鲸鱼,或者您只需要快速,无痛地连续将您的软件交付给生产,那么我邀请您阅读本介绍的Docker教程。一切似乎都表明,软件容器是IT的未来,让我们快速地和...

2640
来自专栏Java面试通关手册

可能是把Docker的概念讲的最清楚的一篇文章

本文只是对Docker的概念做了较为详细的介绍,并不涉及一些像Docker环境的安装以及Docker的一些常见操作和命令。

2722

扫码关注云+社区