Zun是Openstack中提供容器管理服务的组件,建立于2016年6月。Zun的目标是提供统一的Openstack API用于启动和管理容器,支持多种容器技术,比如Docker、Rkt、Clear container、 Kata container以及用户自定义的容器技术。由于容器技术的火热,Zun得以在OpenStack中迅速发展,通过与Keystone、Neutron、Cinder、Glance以及其它核心的OpenStack组件集成, 实现容器的网络、持久化存储等功能。OpenStack架构中的网络、存储以及身份验证工具全部适用于容器体系,从而确保容器能够满足安全与合规要求。
一、发展历史 OpenStack平台主要有如图所示的几个方案支持容器技术:Nova-docker driver、
Heat-docker-plugin、Magnum等。
Nova Docker driver方案将容器当成虚拟机一样进行操作,通过增加nova-docker驱动,实现容器生命周期的管理操作。但是容器和虚拟机存在较大差异,通过类似虚拟机的方式管理容器,导致无法对接很多容器的原生接口。
Heat-docker-plugin方案不依赖于Nova的调用,而是通过 OpenStack Heat进行编排,使用 Heat Docker plugin插件, 编辑Heat Templates 设定 Docker 的参数,在虚拟机上管理容器。虽然可以使用 Docker API 提供的所有功能,但是在虚拟机上使用 Docker,无法实现资源调度,需要较多的配置工作,无法实现规模化的集群管理 。
Magnum是OpenStack中提供容器集群部署功能的服务,通过Heat部署k8s虚拟机集群,调用coe接口管理容器。Magnum立项之初,以CaaS为宗旨,即“容器即服务”。后续发展过程中,Magnum将集群管理和容器管理两大功能进行分离,magnum专注于容器的集群管理。
而容器的管理则独立出来,衍生出OpenStack Zun这个新的项目。Zun将容器作为一种OpenStack资源进行管理,并通过集成OpenStack的其他服务,为用户呈现统一的、简化的API接口,无需关心不同容器技术之间的差异。
二、基础架构 下面的Zun架构图,可以更好地理解Zun与OpenStack各组件之间的关系。
OpenStack 基础设施层:
Zun API: 处理 REST请求并检查输入参数
Zun Compute: 资源调度与容器管理
Keystone: OpenStack的认证组件
Neutron: 为容器提供网络
Glance: 用于存储容器镜像
Cinder: 提供容器数据卷,用于持久化存储
Placement:统一的资源管理,比如资源的类型、记录、分配、消费等。也就是说OpenStack中的虚机、裸机、容器实例,既资源共享,也存在资源竞争。
Horizon:官方的界面管理,zun-ui作为其插件,将容器操作集成到界面中。
多种运行时:
Runc: Docker原生支持的运行时
Clear Container&Kata:安全容器,结合了轻量级虚拟机的优势
Firecrocke:一种运行多租户容器服务的新虚拟化技术
Others:用户自定义的容器技术
编排层:
Heat: 容器资源集成到heat资源模板
Kubernetes: 通过Virtual Kubelet工具,将zun-compute node作为 k8s的工作节点,为k8s提供serverless容器服务。
三、组件关系 在OpenStack发展过程中,虚机、裸机、容器逐渐成为三大主流的资源实例。终端用户采用裸机与虚拟机系统,还是容器技术?
如上图所示,Nova是管理虚拟机的创建、启动、删除等的服务;Ironic是管理裸机安装部署的服务;而Zun是容器管理服务。虚机、裸机、容器三者可以运行在同一框架之内!
四、功能优点 Zun集成了多个OpenStack服务,其中Keystone、Neutron、Kuryr-libnetwork是运行Zun所必须的服务,它们分别为Zun提供认证、网络、neutron网络与docker网络之间的连接。集成OpenStack服务的优点在于,可以借助于OpenStack已存在的功能来扩展容器功能。
例如Zun容器可以使用Neutron分配IP地址,可以在Nova实例所在的隔离网络环境中创建容器,实现虚拟机和容器的单网络平面部署。虚拟机的网络安全组,也实用于Zun容器。在实际的业务场景中,通常需要对运营数据进行持久化存储,Zun通过与OpenStack Cinder集成解决这个问题。 创建容器时,用户可以选择将Cinder卷挂载给容器。 Cinder卷可以是租户中的现有卷或新创建的卷。每个卷将被绑定到容器文件系统路径中,并且存储在该路径下的数据将被持久化。
在Orchestration方面,与其他提供内置编排的容器平台不同,Zun使用外部编排系统来实现此目的,例如Heat与Kubernetes。通过使用外部协调工具,最终用户可以使用该工具提供的DSL定义他们的容器化应用程序。
Zun实现与 Glance、Neutron、Cinder等组件的集成,但并不实现对容器编排引擎(Container Orchestration Engines)的部署调度。综上,Zun提供了一种OpenStack + 容器的解决方案,不仅将多个OpenStack服务与容器技术有效地结合到一起,提高了OpenStack管理容器的能力,而且简化了容器的使用,扩展了容器的功能。同时Zun社区的各项功能正在开发、补全当中,值得期待。
五、中兴通讯持续社区贡献 中兴通讯作为OpenStack基金会黄金会员和主要代码贡献者之一,致力于推动OpenStack的演进和发展。针对Zun社区,中兴通讯bp完成数,bug修复数都位居前列。同时,中兴通讯在Rocky、Stein等多个版本单项项目负责人(PTL),为Zun项目的发展,做出了卓越的贡献。未来,中兴通讯将不断加大对开源社区的投入,并积极寻求落地商用的机会。