Openstack与Docker的融合

OpenStack & Docker 综述

时至今日,云计算已经从概念、评估而逐步进入了 Gartner 定义的复苏期 (Slope of Enlightenment) ,逐步在企业中落地推广。而云计算中热门的两个技术 OpenStack 与 Docker也早已是企业中不可或缺的技术话题,看看国内围绕两大技术的创业公司、技术Meetup、技术大会以及各联盟组织就可见一斑。Google Trends 的趋势曲线也印证了两大技术的火热情况:
Past 5 Years the trends of Openstack & Docker

先简单回顾一下两大技术的历史和现状:
OpenStack 起源于2010年7月的 Austin 版本,作为典型的云计算 IaaS 层的具体实现工具,在与当年的 OpenNebula、CloudStack 的血拼中脱颖而出。通过命名为 Nova、Neutron、Keystone、Glance 等各组件实现对裸机、虚机、块存储、对象存储、文件目录、网络、负载均衡、防火墙等数据中心基础架构的统一调度管理,目前已经发布到 W 版本,形成了较强的开源生态圈和产业链,同时也成为了国内企业开源私有云构建的事实首选。

Docker 起源于2013年3月的首版,是基于LXC为基础构建的容器引擎,通过 Namespace 和 Cgroup 实现了资源隔离和调配,使用分层存储来构建镜像,这些特性实现了将 OS 和应用捆绑的方法,直接造成了整个玩法的变革,使得应用系统环境标准化、集装箱化传递成为现实。如果说 OpenStack 只能让数据中心的架构师、系统网络工程师兴奋的话,那么 Docker 则是可以让开发、测试、应用运维、系统网络工程师都兴奋的东西(从曲线的热度即可印证),同时随着DevOps、CI/CD、微服务的火热,Docker 正好是实现上述名词的极佳载体。由于 Docker 本身是缺乏集群调度、管理、监控、服务注册发现等集群化运行管理能力的,因此目前也存在三种主流的 COEs(Container Orchestration Engines) 容器调度引擎:原生的 Docker Swarm、Google 的 Kubernetes(Borg 简化版)以及 Apache Mesos,这三种主流的 COEs 目前还在都还在发展中,下图为 Google Trends:
Past 1 Year and trends of Kubernetes & mesos & docker swarm

OpenStack & Docker 的融合开源技术方案

Nova Docker

Nova Docker
该方案将容器像 VM 一样操作,通过增加 Nova Docker driver,实现对 Docker容器的启停、创建等常规 VM 的操作,可以通过 Docker save 方式将镜像存放在 Glance 之中,该种方案很大的好处在于可以使用现成的 OpenStack Neutron 来管理网络、实现租户的资源配额、使用 Host OS(注:此处不等于 BareMetal )等 OpenStack 的天然好处。然而缺点也明显,没法使用 Docker/COEs 带来的更有价值功能,例如服务发现、端口映射等。国内某大型电商就使用的该方案。该方案是早期的集成方案。目前已经不在官方版本中。

参考 https://wiki.openstack.org/wiki/Docker

Zun

Zun
Zun组件关联

OpenStack是一个主流的开源云管理平台,旨在提供丰富的云平台服务,支持轻松实施、大规模向上/下扩展和统一标准。数百家全球知名企业正在以OpenStack为基础运营业务,以降低成本并加快行动。

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的原有网络、存储以及身份验证工具将全部适用于容器体系,从而确保容器能够满足安全与合规性要求。

参考 https://wiki.openstack.org/wiki/Zun

Magnum

Magnum1
Magnum2
Magnum是OpenStack中一个提供容器集群部署的服务。
Magnum是一个Pass层的OpenStack项目。Magnum使用Heat部署一个包含Docker和Kubernetes的操作系统镜像,让容器集群运行在虚拟机(Virtual Machine)或者裸机(Bare Metal)中。

Magnum项目创建之初,项目目标以Caas为宗旨,即容器即服务。但在后续的发展过程中,社区更倾向于分离容器的集群部署功能和Docker容器集群的管理功能。因此Magnum重新修改了项目目标,Magnum本身专注于容器的集群部署功能。另一个项目Zun专注管理Docker容器集群。

参考 https://wiki.openstack.org/wiki/Magnum

Heat Docker plugin

Heat Docker Plugin
该方案不依赖于 Nova 的调用,而是通过 OpenStack 编排组件 Heat 进行编排调用,通过使用 Heat Docker plugin 在创建的 VM 上使用 Heat Templates 设定 Docker 的参数,这样则可以使用 Docker API 提供的所有功能,缺点在于 VM 上使用 Docker,无法实现资源调度,需要较多的配置工作,无法实现规模集群管理 。

参考 https://github.com/MarouenMechtri/Docker-containers-deployment-with-OpenStack-Heat

Kuryr

Kuryr
刚才提到了由于 COEs 网络方案的多样性与变数,因此社区专门孵化了 Kuryr 项目,该项目用于实现 Neutron 与 Docker/COEs 网络的驱动映射工作,未来可成为 Magnum 网络的选择,实现容器网络的功能性能加强。

参考 https://wiki.openstack.org/wiki/Kuryr

Kolla

Kolla
前面谈到的方案均是 OpenStack 怎么与 COEs/Docker 结合,提供不同形式的混合负载给上层使用的需求,而 Kolla 则是用于实现 OpenStack 这个“庞大复杂“的管理工具自身的部署/升级/维护的。虽然 OpenStack 也有许多的自动化运维项目,如 Fuel、Ansible、Puppet 等项目,然而随着 OpenStack 的日益发展和被管理的节点及环境日志扩张,在庞大的生产系统长期维护和运行一套/多套 OpenDtack(Day 2 Operations) 也会日渐成为严重的问题。而随着容器化的发展,OpenStack 社区也想到自身使用容器进行部署将不仅解决上述问题,也证明自己充分拥抱容器的决心。

目前 Kolla 通过容器化绝大部分的 OpenStack 组件,并通过 Ansible 来实现配置自动化管理。实现 OpenStack 自身的容器化管理。未来也会逐步成为国内企业 OpenStack 的管理方案首选。

参考 http://docs.openstack.org/developer/kolla/


Openstack与Docker的融合
http://maitianxin.github.io/2021/12/27/docker/openstack_docker/
作者
Matianxin
发布于
2021年12月27日
许可协议