基于Kubernetes的私有云PaaS服务资源管理调度系统研究
2024-05-29张硕
张硕
关键词:Kubernetes;容器;私有云;资源管理调度
中图分类号:TP315 文献标识码:A
0 引言
私有云平台包括基础设施服务(infrastructureas a service,IaaS)、平台即服务(platform as aservice,PaaS) 和软件运营服务(software as aservice,SaaS)。企业范围内的私有云应用主要包括移动互联网应用、物联网应用和大数据处理应用等,支撑这些应用的平台软件服务包含工作流引擎、复杂事件处理和大数据处理等相关服务[1]。随着容器技术的广泛使用与发展,越来越多的企业利用Docker(一个开源的应用容器引擎)建立其应用平台,分析、执行用户提出的任务。容器比传统虚拟机更具有优势,其能够在短时间内建立应用程序,可以在不同机器上进行移植,并且资源开销较小。由于Docker 容器具有便携性、可移植性和资源占用低等特点,用户可以利用Docker 建立共享和自动化的云服务应用工作平台。Docker 通过组件迅速建立应用程序,极大地消除了开发与生产环境之间的差别,因此企业逐步使用Docker 建立其私有云平台软件服务平台。
1 Docker相关概述
1.1 Docker 基本概述
Docker 封装整个软件运行环境,使用户可以将应用程序作为一个平台进行分发或运行。与传统虚拟机相比,Docker 容器主要具备以下优势:Docker容器不需要硬件仿真,可以直接运行在主机的内核,高效利用了系统资源;由于Docker 容器能够运行在主机实际物理内存上,不需要打开操作系统,因此可以在短时间内完成Docker 容器的运行[2];容器本身具有直接运行应用程序的能力,Docker 容器运行在私有云平台和物理内存上,均能够进行跨平台的应用迁移。
1.2 Docker 系统架构
Docker 系统一般采取主从架构模式。Docker守护程序从镜像库中加载所需镜像,建立容器,并且控制容器的开始和终止,同时一直监听Docker客户端通过Docker 应用程序接口发送的请求。Docker 客户端使用一组命令集合以实现用户与Docker 之间的交互,Docker 客户端通过Docker 应用程序接口与Docker 守护程序建立连接,并将通信的结果反馈给用户。Docker 服务端可以同时存在多个Docker 守护程序,一般是通过Docker 應用程序接口交互的Docker 守护进程形成,用于执行用户要求的必要参数信息。
2 Kubernetes相关概述
2.1 Kubernetes 基本概念
Kubernetes 是一种主流的容器管理系统,已经广泛应用在容器部署、管理和扩展等方面[3],其目的主要是管理容器化的应用程序和生命周期,使得用户能够高效调整服务规模,具有良好的可移植性和扩展性。Kubernetes 凭借强大的部署能力为容器分配IP 地址,隐藏底层网络的连接情况,用户不仅可以扩展Kubernetes 应用程序功能,还能在一个应用程序的不同版本间进行切换。此外,Kubernetes 知识框架可以支撑集群开发的资源对象,存储系统和配置集中器负责存储一切有关容器的信息。
Kubernetes 中每个集群都存在至少一个集群管理主节点,一般位于一个独立的物理机上,任何控制命令都会发送给主节点,然后根据命令对整个集群进行执行、调度或者管理,一旦主节点发生故障,用户便无法对集群进行控制。Kubernetes 中存在若干个最小调度单元,每个最小调度单元包含若干个容器,这些最小调度单元使得Kubernetes 具备了创建、协调和管理的功能,使得多个服务模块相互协调运作。
2.2 Kubernetes 系统架构
Kubernetes 是一种分布式主从结构,包括主节点和从节点,其中主节点用于资源调度,从节点用于接收并执行主节点分配的任务[4]。主节点包括应用程序接口服务、存储系统、调度器和集群控制中心,从节点包括最小调度单元、管理核心组件和集群服务对象。
在主节点中,应用程序接口服务负责进行模块之间的交互,也是整个集群的输入,接收用户下达的调度和管理资源命令,并且将指令传递给管理核心组件。集群控制中心在整个生命周期都要对节点进行健康检查,而调度器主要负责分析集群控制中心的资源使用情况。
在从节点中,管理核心组件在接收到主节点的指令后,启动并监听子节点上的最小单元,并且将绑定情况通过应用程序接口服务反馈给主节点,同时集群服务对象也会为集群中指定的最小单元建立访问路径。
3 基于Kubernetes的私有云PaaS服务资源管理调度系统
3.1 系统需求分析
本文旨在为用户设计一个基于Kubernetes 的私有云PaaS 服务资源管理调度系统(Kubernetesbasedcontainer cloud PaaS service resource managementscheduling system, KPRMS),从而降低私有云PaaS服务建立、操作和维护的难度。该系统对工作流引擎、复杂事件处理服务和大数据处理等服务所需的环境和资源进行统一的资源管理调度。
在私有云PaaS 系统中的各种应用,既能够单独提供服务,又能够享受其他应用服务。通过对系统硬件资源的合理使用,KPRMS 不仅可以协调资源需求和依赖之间的关系,还可以提升应用服务的质量。本文充分利用Kubernetes 的优势建立了KPRMS,其功能需求如下:服务注册发现、资源监测、资源预测、资源分配与调度、私有镜像库以及PaaS 服务管理门户。
3.2 系统架构设计
KPRMS 部署架构如图1 所示,用户可以通过网页图形用户界面(website graphical user interface,Web GUI)对PaaS 服务管理门户进行交互,为用户提供统一且便捷的管理接口。整个KPRMS 是通过Kubernetes 而建立的, 其模块的功能如下:Kubernetes 和Docker 可实现对KPRMS 的管理;系统内通过API Server 接口进行通信;资源监测模块负责监测系统计算资源占用情况;资源调度模块对容器进行计算资源的分配;资源预测模块对计算资源使用情况预测并重新分配适当的计算资源;容器性能监控工具cAdvisor 实时监测系统的运行情况。
3.3 系统资源监测
KPRMS 中的资源监测模块采用了分布式主从架构。守护进程可与容器性能监控工具进行通信,通过周期性的访问工作节点来计算资源使用情况,并将访问结果发送到信息收集节点。主机守护程序在接收到信息收集节点发送的消息后,通过运行系统命令来获得工作节点的计算资源使用信息,并将信息反馈给信息收集节点。信息收集节点在主节点上运行,通过从守护进程获得该节点上的资源使用情况,并将获得的信息存储在数据库中,最后与调度器进行通信。前端的数据显示环节是通过开源框架构建的。
3.4 系统资源调度
KPRMS 资源调度模块的应用程序接口可通过解析用户自定义的服务描述文件,将其转换成资源需求信息发送给调度器,调度器根据资源使用情况为每个任务分配一个合适的主节点以及计算资源,并与资源监测模块进行通信,从而获得KPRMS 系统中可用的计算资源。
3.5 系统资源预测
在KPRMS 的资源预测模块中,决策部分接收從资源监测模块发送的计算资源使用信息,并以此作为模型的训练样本,建立模型后对短时间内的计算资源使用情况做出预测。将决策结果发送给配置执行部分,由其将决策结果整合成调度应用程序接口请求,使用横向扩展的方式实现对应用服务的动态计算资源分配。
3.6 系统测试
镜像库是一个能够进行高度扩展的服务器端应用程序,用户通过图形用户界面实现对私有云Docker 镜像的管理,Docker 镜像中心为用户提供了网页端界面、查询、管理和下载镜像等功能。
在测试过程中,KPRMS 通过YAML 文件对应用进行描述,明确应用对于资源的需求情况,设计一个简便的网页应用。前端是一个能够对数据库进行读写的程序,后台是一个MySQL 数据库,在YAML 描述文件中明确了网页程序对数据库的依赖关系。YAML 文件通过门户管理进行上传,KPRMS 在解析完应用间的依赖关系后,通过资源调度模型给所有应用分配合适的部署节点,并依据用户需求为应用分配计算资源。
4 结语与展望
本文设计并实现了一个基于Kubernetes 的私有云PaaS 服务资源管理调度系统,该系统可解决由于私有云PaaS 服务应用之间相互依赖和制约所引发的一系列有关服务质量下滑问题。通过提出并设计该系统的资源监测、资源调度以及资源预测模型,开发了一个PaaS 服务管理门户。当前工作取得了一定的成果,但仍然需要进行更深入的研究,例如,在对容器资源检测时,探讨应用类型和询问周期之间存在的关系;容器在自适应分配资源的调节过程中,在调度开始与部署完成之间存在延时,为了避免由此引发不稳定的服务,需要对系统资源调度策略不断优化。