基于OpenStack和Kubernetes的双向部署技术研究
来源:用户上传
作者:杜磊
摘要:该文基于OpenStack和Kubernetes两大云计算领域开源技术研究了二者的融合及双向部署技术。OpenStack通过虚拟化技术将计算、存储、网络等资源抽象成计算资源池、网络资源池和存储资源池,实现基础虚拟资源的统一调度管理。Kubernetes能够对容器化应用进行编排、运行、维护和扩展等,可以实现容器管理功能。基于OpenStack集群实现Kuber-netes集群的部署可利用OpenStack的Magnum项目融合Kubernetes集群提供容器服务。基于Kubernetes集群实现EOpen-Stack集群的部署的核心思想是将OpenStack组件容器化,可使用Kolla、OpenStack-helm以及Tripleo等项目,保证其更高效稳定的运行,资源得到充分利用并且便于扩展和维护。
关键词:OpenStack;Kubernetes;云计算;双向部署
中图分类号:TP393 文献标识码:A
文章编号:1009-3044(2020)01-0010-03
隨着现代计算机技术的不断发展,尤其是近年来国家网络信息体系的不断建设,云计算及相关领域的技术越来越受到重视。云计算是一种按需计费的商业模式,能够使消费者通过便捷的、可用的网络访问,进一步使用由云服务商提供的计算资源共享池(资源主要包括软件、网络、服务器、存储等),即只需要投入极少的管理工作就能快速提供资源,且消费者与服务提供商之间的互动会大幅减少。
OpenStack是一个构建稳定高效的开源云管理平台项目,OpenStack集群通过虚拟化技术将计算、存储、网络等资源抽象成计算资源池、网络资源池和存储资源池,并将这些资源池进行统一划分和管理,提供市场所需的虚拟资源及虚拟服务能力。Kubernetes是一个开源的容器集群管理系统,能够支持不同的容器技术,Docker是Kubernetes集群系统普遍应用的容器化技术,利用Kubernetes集群便于管理跨主机的容器化应用,实现容器化程序的自动部署、实例化和运行管理能力。
OpenStack和Kubernetes都是开源的技术,二者的集群部署技术都已十分成熟,但OpenStack和Kubernetes的融合是当今虚拟化系统的研究热点,更多的开发者聚焦于两种集群的融合技术中,是未来OpenStack虚拟化集群和Kubernetes容器集群的发展方向,能够使云计算供应商提供更好的应用及资源,有利于促进云计算领域IaaS层资源与PaaS层平台服务的深入融合。
1OpenStack与Kubernetes概述
1.1OpenStack概述
OpenStack是一个构建稳定高效的开源云管理平台项目,通过虚拟化技术将计算、存储、网络等资源抽象成计算资源池、网络资源池和存储资源池,通过keystone、nova、neutron、glance、cinder等组件实现对虚拟机、裸金属、块存储、文件存储、对象存储、网络、负载均衡、安全组、防火墙等基础虚拟资源的统一调度管理。OpenStack架构如图1所示。
OpenStack集群部署组件中keystone组件为nova、neutron、cinder、glance、ceilometer、swift等组件提供认证服务,保障集群的认证管理功能;nova组件为虚拟机VM提供部署和计算能力,便于虚拟机增、删、改、查等全生命周期管理;neutron组件为虚拟机VM提供网络服务,保障集群内的网络架构功能;cinder为虚拟机VM提供云硬盘存储能力,并将备份存储在swift中统一管理,支撑集群的云存储功能;glanee组件为虚拟机提供镜像服务,支撑集群的应用部署镜像环境,并将镜像存储在swift中统一管理;swfit组件为集群保障对象存储功能,主要管理镜像和备份存储能力;ceilometer组件为nova、neutron、cinder、glanee等组件提供监控能力,用于集群的监控管理功能;horizon组件为nova、neutron、cinder、glance、swift、keystone等组件提供可视化界面,便于各个组件功能的可视化操作管理;heat组件为集群提供编排能力,能够实现各个组件功能的应用编排。
1.2 Kubernetes概述
Kubernetes是由Google公司开源实现的跨主机集群自动部署、扩展管理容器化集群的系统。利用Kubemetes集群便于管理跨主机运行的容器化应用,能够对容器化应用进行编排、运行、维护和扩展等,可以实现容器的负载均衡、资源监控、日志访问与获取、认证和授权、健康检查、水平扩展和自动发现等功能。Kubernetes架构如图2所示。
Kubernetes集群分为Master和Minion两种类型的节点,Master为控制节点,Minion为计算节点。Master节点上部署着Kubernetes的主要控制组件:kube-apiserver、kube-controller-manager、kube-scheduler、etcd等,能够处理Kubemetes API请求,能够融合控制器处理集群中常规任务的后台进程,能够调度Kubernetes集群中部署的最小单元模型pod,能够提供存储Kubernetes集群的数据信息的键值对存储服务。Minion节点上部署着kubelet、kube-proxy等组件,用于维护pod的运行时环境,kubelet是pod的代理服务,能够通过apiserver或本地配置实现监视已分配的pod、加载volume、下载密钥、启动运行pod中的容器、定时执行健康检测、报告pod运行状态、创建镜像备份等功能。kube-proxy能够通过在主机节点上维护一个网络规则和连接转发来实现Kubernetes抽象出的服务概念,底层通过iptables实现流量转发。 1.3 OpenStaek与Kubernetes的融合
0penStack与Kubernetes的融合主要有两个方向:一是在0penStack集群上部署Kubemetes集群,利用OpenStack的mag.nun项目融合Kubernetes集群提供容器服务;二是在Kubernetes集群上部署OpenStack集群,利用一些重要的工具,比如Open-Stack-helm、Kolla-Kubemete等,将OpenStack的服务封装成应用进行安装,或者将0penStack以镜像的形式运行在Kubernetes集群中。OpenStack与Kubernetes的融合已是大势所趋,随着技术的发展OpenStack和Kubernetes集群的双向部署相信在未来都能够很好地实现。
2OpenStack上部署Kubernetes研究
基于OpenStack集群实现Kubemetes集群的部署可利用OpenStack的Magnum项目融合Kubemetes集群提供容器服务,OpenStack的Magnum项目旨在为用户提供更好的容器服务。Magnum项目支持主流的容器编排引擎Kubemetes、Swarm和Mesos,实现在OpenStack集群上搭建容器集群并使用容器服务。使用Magnum架构实现Kubernetes集群创建的核心在于Magnum的两个组件:Magnum API和Magnum Conductor。mag-nun整体架构如图3所示。
Magnum API负责接收创建Kubernetes集群的请求,Mag-nun Conductor负责执行创建Kubemetes集群的操作,通过与0penStack和容器编排引擎的交互操作提供容器服务。Mag-nun API和Magnum Conductor两者之间的通信通过RabbitMQ服务的RPC(Remote Procedure Call,远程服务调用1队列完成。Magnum API组件主要包括certificate、cluster与clustertemplate等资源,certificate的作用是实现用户鉴权,提供认证功能,clus-ter能够提供容器服务,通过Magnum Conductor按照集群模板创建,clustertemplate是创建集群的模板,主要定义需要创建的集群的特征属性,整合集群的特征属性并为其提供创建的具体参数信息。Magnum API对接收到的请求进行解析后经过RPC队列将操作集群的消息传递到Magnum Conductor组件进行处理,与集群模板相关的操作会直接与数据库进行交互实现。Mag-nun Conductor接收到与操作集群相关的消息后,通过其三大核心资源进行后续处理,包括heat template、handlers和database等。heattemplate接收Magnum API的clustertemplate提供的集群特征属性和具体参数信息,OpenStack集群中的Heat组件将其当作整体规划模板以便于后续编排,handlers的主要功能是将资源信息写入数据库,集群资源的创建驱动会根据容器编排引擎和镜像类型的不同而不同,创建集群时作为可选项提供功能,database提供数据库功能,实现集群资源信息的写入和记录等。
通过OpenStack的Magnum项目实现Kubernetes集群创建的流程如图4所示。Heat在创建集群时会将Kubernetes集群引擎的配置写入Cloud-init工具,Openstack集群提供的虚拟机中会注2kCloud-init工具和相关配置,进而完成Kubernetes集群的创建,保证Kubernetes集群的容器服务正常运行。
3Kubernetes上部署openStack研究
基于Kubernetes集群實现OpenStack集群的部署的核心思想是将OpenStack组件容器化,实现OpenStack的微服务化,保证其更高效稳定的运行,资源得到充分利用并且便于扩展和维护。OpenStack的容器化部署可使用Kolla项目,Kolla-Ansible和Kolla-Kubernetes这两个Kolla的子项目可实现容器的配置管理。Kolla-Ansible使用自动化运维工具Ansible实现容器的编排,Kolla-Kubernetes使用Kubernetes完成容器的编排,Open-Stack社区还有OpenStack-helm以及Triple0项目等将Kuber-netes运行于OpenStack底层。
Kolla-Ansible使用Docker Registry、Docker Compose与An-sible等工具来解决容器服务的下发、编排和配置等问题。Kolla首先将OpenStack打包成容器镜像,并将镜像存放在DockerRegistry仓库中,然后用户选择部署方式,依据用户需求编写部署的yaml文件,将yaml文件分发给Docker Compose执行操作,Docker Compose依据集群配置进行编排,最后Ansible根据用户的OpenStack配置将其写入各个容器中,通过Docker拉起镜像,完成集群部署。
Kolla-Kubernetes项目依靠Kubernetes实现OpenStack的容器化部署,实现OpenStack组件的容器化管理、编排和自动化管理。在Kubernetes集群上封装OpenStack组件到容器中,同时写入配置,完成集群的部署。将OpenStack部署在Kubernetes集群上有一个瓶颈还需解决,OpenStack集群和Kubernetes集群都具有较为复杂的一层网络平面,OpenStack中主要使用neu-tron组件实现网络功能,而Kubernetes中主要使用kube-proxy来实现容器间网络流量的负载均衡,neuron需要直接对接底层硬件,若将其封装在容器中运行就无法实现neuron与主机的连接,因此需要使用neutron直接为Kubernetes提供网络服务,后续解决方向应该是将Kubernetes的kube-proxy组件和Open-Stack的neutron组件融合,提供Kubernetes集群更为强大的网络插件,完美实现OpenStack的容器化部署。
4结束语
基于OpenStack和Kubernetes的双向部署是云计算领域的发展趋势,将Kubernetes集群部署在OpenStack集群上能够充分利用计算、存储、网络资源,灵活调度,应用以容器的形式部署提高了开发效率和运维成本,将OpenStack集群部署在Ku-bernetes集群上在一定程度可以解决OpenStack部署困难的问题,无论是部署难度还是部署时间都优于现有的部署工具,同时在OpenStack集群的灰度升级、灵活调度、高效运维等方面充分发挥了容器技术的优势,后续针对OpenStack的neutron组件和Kubernetes网络组件的融合方面仍是研究重点和趋势。
转载注明来源:https://www.xzbu.com/8/view-15143852.htm