基于容器技术的高校云数据中心设计与实现

2021-03-12 05:25郭雯郑霁王军王辉
中国教育信息化·高教职教 2021年2期
关键词:容器

郭雯 郑霁 王军 王辉

摘   要:容器技術在互联网时代得到了越来越广泛的应用,高校云数据中心作为承载学校众多信息系统运行的重要载体,需要全面了解并合理使用容器技术,以提高云平台运行效率,为业务系统运行提供更加强有力的支撑。文章全面分析高校云数据中心建设需求,构建CaaS(Container as a Service)平台为容器化应用提供全方位部署、运行、管理的支持。同时开放平台PaaS(Platform as a Service)功能,结合DevOps理念构建开发、部署、测试一体化流程。实验证明基于容器技术的高校云数据中心可以更好地满足业务系统快速部署、升级迭代、弹性伸缩等各方面的需求。

关键词:云数据中心;容器;CaaS;开发测试一体化

中图分类号:TP311;TP393 文献标志码:A 文章编号:1673-8454(2021)03-0092-05

一、引言

随着云计算技术的飞速发展,众多高校利用虚拟化等技术将基础硬件资源池化,建设私有云平台,为校内的各业务系统提供虚拟机服务,在基础设施层面有力地支撑了学校的信息化建设。但是这种IaaS(Infrastructure as a Service)的方式仅仅解决了硬件资源的快速供给与高效利用问题,业务系统软件层面的部署仍然需要手动进行,从云平台管理员提供虚拟机并配置操作系统,到业务系统工程师安装相关软件并调试,系统部署时间长,重复工作量大。同时互联网时代的应用面临用户需求频繁变化和用户规模快速增长的问题,因此对业务快速升级迭代、动态弹性扩展等方面提出了更高的要求。[1]虚拟机的业务系统在升级、扩容等方面的灵活性不足,升级速度慢且缺乏弹性等问题给整个运维工作带来巨大挑战。

以Docker为代表的容器技术适应了互联网时代应用的特点。[2]Docker作为一种轻量级的虚拟化技术,启动快、体量小,可以将应用软件、依赖包和所需环境打包成镜像,发布到任何一台安装有Docker引擎的计算机上运行,极大程度地解决了业务系统内部的软件依赖问题。很多科研人员研究如何将Docker技术应用于云平台上,以实现资源的合理利用以及应用的快速构建、持续交付、灵活扩展、便捷运维等。何震苇等[1]提出了基于Docker技术的互联网应用集群自动部署方案,以简化复杂互联网业务平台的部署过程;杨清波等[3]分析了基于容器的调控云平台的业务需求,并给出了基于Docker的调控云平台的设计、实现及测试;张琦[4]构建了一套银行系统内部的容器管理平台,以支撑容器化应用运行管理,并实现DevOps开发测试一体化流程;文献[5]-[7]研究了基于Docker技术的PaaS平台构建;彭勇等[8]设计了一个基于Docker技术的云平台系统;应毅等[9]尝试在高校实验室等环境中应用Docker技术,但总体而言,高校领域的相关研究仍处于探索阶段。

二、高校云数据中心建设需求分析

在IT技术飞速发展的大背景下,高校的信息化建设如火如荼。云平台作为承载各大业务系统运行的基础架构,它的价值最终是要通过业务系统来体现的,因此云平台的建设要牢牢把握“以业务系统为中心”这一基本原则,以满足业务系统在各个阶段的需求为目标。

1.业务系统快速部署的需求

高校云数据中心的首要任务是承载业务系统的运行。目前,高校业务系统建设呈复杂化趋势,单个系统所需的虚机数量从过去的1至2台上升到现在的2至8台,部分业务系统,以合肥工业大学信息中心数据治理平台为例,需要的虚拟机数目达到50台。复杂的业务系统意味着更加复杂的软件依赖关系与组件依赖关系,从虚拟机级别开始部署业务系统,往往要耗费大量的时间安装、调试、测试,不符合应用快捷交付的需求。容器技术很好地解决了业务系统对软件运行环境的依赖问题,同时可以很好地描述业务系统不同组件之间的依赖关系,支持业务系统一键式部署,可以预见不久的将来会有越来越多的业务系统选择容器的方式发布。因此高校的云平台必须开始着手打造高效的、高可用的容器资源池,做好全面支持容器化应用的准备。

2.业务系统弹性伸缩的需求

互联网时代的应用往往面临着突发流量的问题,高校内的业务系统也不例外,学生选课、视频点播等都有可能造成业务流量的瞬时激增,为业务系统带来极大的压力。目前常见的解决方案是在负载均衡设备后挂载多台用于分担业务流量的APP虚拟服务器。这样做的缺点是,当平时业务量小时,造成资源的闲置与浪费;当业务量持续增加超过负荷时,需要人工增加虚拟机并添加到负载均衡系统中,操作复杂且滞后,无法满足处理瞬时激增流量的需求。容器技术区别于虚拟机技术的一大特点是前者实现的是进程级别的隔离,容器不需要模拟一套自己单独的虚拟硬件和操作系统,因此容器具有体量小启动快的特点。高校云平台可以充分利用容器的这个特点,实现业务系统服务器规模的按需扩展与缩减。

3.业务系统便捷运维的需求

业务系统在运行过程中经常面临排错、升级更新等操作。现有的基于虚拟机的云平台在处理这些需求时往往显得比较吃力,例如生产环境中报的错难以在开发测试环境中重现、升级操作常常需要停机来进行、新版本软件出现问题很难回滚到上一版本等。容器技术的使用可以最大限度减少开发环境、测试环境与生产环境之间的差异,同时支持灰度更新和回滚等操作,为业务系统的运维提供便捷。

4.业务系统开发测试一体化的需求

随着信息化建设的推进,高校业务系统的建设也越来越复杂,很多时候单纯购买的软件已无法满足需求,很多业务系统,如教务系统、数据治理平台等,都需要结合学校的现状进行个性化定制开发。这会是一个持续交付的过程,即部分软件功能先行上线试运行,后续会不断有新的模块或功能加入进来,整个过程持续几个月、一年甚至几年。DevOps方法是目前软件工程领域的热点,与以往的瀑布模型或敏捷模型不同,该方法重视开发人员、测试人员与运维人员之间的紧密沟通合作,通过流程化的部署、测试、反馈等来实现快速的迭代发布。[10]高校云数据中心可结合DevOps理念,进一步发掘平台PaaS功能,提供一套应用快速开发、测试、部署、运维管理、持续开发、持续集成的支撑环境。

三、基于容器的高校云数据中心设计

鉴于容器技术在业务系统开发、部署、运行等方面带来的诸多益处,容器技术在高校云数据中心的应用已是势在必行。基于容器技术的高校云数据中心设计应遵循高可用和易扩展的原则,即平台核心节点要采用集群架构部署,一个实例宕机整个集群仍会正常运行;同时平台可以轻松地以“搭积木”的方式扩充软硬件等资源。此外容器作为当前最为火爆的开源项目,大量相关的技术及产品层出不穷。因此平台建设者在设计之初要做充分的调研,选择合适的主流技术作为自己的建设方案。

1.容器关键技术

Docker作为主流的容器技术近年来已经得到了充分的验证与应用。同时容器的快速发展对容器的集群化管理提出了更高的要求。一方面,业务系统的体量越来越大,需要集群化的环境来支持其正常的运行和管理。另一方面,集群化的环境可以更好地满足高可用等基础需求。Docker Swarm、Mesos、Kubernetes等都是目前常见的容器集群管理框架。其中,Kubernetes是Google在2014年开源的一个容器集群管理系统,简称K8S。K8S提供高可用高冗余的集群化管理模式,同时提供了容器编排、资源调度、弹性伸缩、部署管理、服务发现等一系列功能。K8S是目前运用最广泛、主流的容器集群管理工具,也是本次云平台设计中采用的技术方案。

2.数据中心建设思路

高校可以结合自身的特点和现有架构,按照循序渐进的原则,分阶段将容器技术应用于自己的云数据中心。第一步是要搭建一个高可用的容器集群运行平台。这种方式可以以最低的代价将容器先用起来,积累运维经验。CaaS(Container as a Service)以容器为交付物,可方便地部署、运行容器化应用。随着越来越多的应用以容器的方式开发和部署,这种CaaS方式的容器集群运行环境将发挥重要作用。第二步考虑开放平台PaaS功能,即将平台相关的功能作为一种服务,交付给最终用户使用。PaaS作为IaaS和SaaS(Service as a Service)中间层面的一个概念,发展远没有另外两者普及。容器技术的出现为PaaS的发展提供了重大机遇,容器與微服务架构和DevOps的高度契合使基于Docker容器技术的PaaS平台成为可能。Paas平台能力的开放与提升是一个逐步的过程,高校数据中心可结合自身运维平台的特点,将持续集成服务作为目前打造的一个重点。

3.CaaS平台设计

将容器技术应用于云数据中心的第一步是要打造CaaS(Container as a Service)平台,其核心是一个高可用的容器资源池。容器资源池的底层硬件资源,可以部署在物理服务器或云平台上,建议部署在云平台上,因为这样可以充分利用云平台自身的高可用等特性。CaaS平台主要由容器资源池、私有镜像仓库、可视化管理平台和管理层几部分组成,整体架构如图1所示。

(1)容器资源池

容器资源池的技术层面采用“Docker + Kubernetes”组合。其中,Docker引擎负责单机环境下容器环境的建立,Kubernetes通过集群管理技术对集群中的Docker主机资源进行统一管理和容器的编排调度。

K8S包括控制节点(Master Node)和工作节点(Worker Node)两种关键组件。Master Node是容器调度的核心,所有发往容器集群的请求,如容器的创建、状态的更改等,都经过Master Node的统一协调,集群状态信息保存至数据库,具体操作指令发送至Worker Node执行。每个Worker Node都安装有Docker引擎,并结合K8S自身的容器管理机制实现对容器主机的管理。

容器资源池作为基础架构平台的核心,通过分布式集群来实现高可用性,关键节点,如控制节点、数据库节点等都会起多个实例,一个实例出问题不会影响整个集群的运行;同时可以通过负载均衡技术实现流量在集群内不同实例之间的均匀分担。当容器业务量逐渐增加,CaaS平台会面临需要扩容的情况。此时平台管理员只需要向容器资源池增加Docker主机节点,即Worker Node节点,并纳入Kubernetes环境统一管理。

(2)私有镜像仓库

私有镜像仓库用于存放各业务系统的容器镜像及一些基础容器镜像,是高校云数据中心不可或缺的一部分。私有镜像仓库位于校园网或者云数据中心内部环境中,私密性更好,安全性更强,访问效率也更高。这里我们采用的是Harbor镜像仓库,这是VMware开源提供的一个企业级镜像仓库。Habor在Docker 私有仓库Registry的基础上进行了企业级扩展,提供了用户管理界面、基于角色的访问控制等,能满足高校云数据中心需求。

(3)可视化容器管理组件

Docker和Kubernetes大多通过命令行操作,技术门槛较高,容易造成误操作,而且排错非常困难。通过安装可视化容器管理组件,如Dashboard,云平台管理员可以通过网页的形式来进行容器相关的基本操作,如容器的创建、启动、关闭,容器网络的配置,容器存储资源的划分,容器资源的限制,权限的分配以及一些简单的容器运行状况监控等等,从而大大降低了管理难度,提高了管理效率。

(4)监控与日志组件

监控和日志组件是基础资源平台的重要组成部分。监控组件的部署使管理员可以方便地跟踪集群、容器乃至业务运行情况,如主机节点资源利用率、容器健康状况、容器业务流量、业务系统容器副本数等各项指标;而日志的收集便于进行故障定位,并为平台的各项统计分析提供基础数据。常见的监控与日志组件包括Prometheus + Grafana、Filebeat + ELK 等。

4.持续集成服务功能设计

基于容器技术的CaaS平台为容器化应用提供了基础运行环境,在此平台的基础上,以服务的形式开放更多的平台功能,如数据库服务、微服务治理框架、持续集成服务等,构成一个基础的PaaS平台,如图2所示。

基于CICD(Continuous Integration,Continuous Deployment,Continuous Delivery)的DevOps方法可以快速响应应用的各种需求变化,已成为互联网时代应用开发和发布的最佳实践。结合之前提到的业务系统开发测试一体化的需求,CICD服务在高校云数据中心会有着广泛的使用场景。可以通过部署持续集成服务器,并将其与代码仓库、镜像仓库、容器资源池等组件做相关集成,来实现读取代码、往镜像仓库推送或读取镜像、部署镜像至容器资源池等诸多操作,从而方便地协调业务系统开发测试相关流程。

四、测试与验证

本次测试环境为合肥工业大学私有云平台上的5台虚拟机,用途与配置如表1所示。

其中前3台虚拟机组成一个基本的“Docker + Kubernetes”容器集群环境,第4台为私有镜像仓库,第5台为开发测试一体化功能提供服务。

1.CaaS平台功能验证

在容器环境下,业务系统通过一系列yaml文件来描述各组件的部署方式以及相互之间的依赖关系,这种通过配置文件部署的方式简单易行,将部署时间由原来的若干天缩短为几小时,而且部署完成后基本无须调试,可以直接运行,从而实现了项目的快速交付。为应用系统提供商节约了大量的人力成本,也减轻了云平台管理员的工作量。

同时,在容器环境下,业务系统的运维、快速交付等也变得更加便捷。表2记录了业务系统在容器环境与虚拟机环境下各种运维项目的对比。

当业务系统负载发生变化时,可通过手动和自动两种方式调整业务系统中容器数目。手动方式是通过kubectl scale 命令调整 replicas 参数值;本次测试中我们通过调用Kubernetes HPA (Horizontal Pod Autoscaling)组件的方式动态调整,配置信息如图3所示。

其中最大副本数为10,最小副本数为1,当平均cpu使用率超过60%时开始扩容,反之,當cpu使用率小于60%时开始缩容。我们通过Apache ab压测工具向Web应用发送HTTP请求,图4记录了业务并发量变化时容器副本数的变化。

实验结果显示容器的数量可随着业务量的变化而自动调整,从而达到良好的弹性伸缩的目的。

2.持续集成服务功能验证

为了构建持续集成服务环境,我们在容器资源池上建立一套准生产的测试环境、一套生产环境,应用在两套环境中的部署完全一致;两套环境共享容器镜像仓库;同时部署一台Jenkins服务器。Jenkins的Pipeline是目前持续集成方案的一个最佳实践。Jenkins与底层的kubernetes做了集成,从而保证Jenkins服务器可以在测试或生产环境中部署应用。

CICD服务流程(见图5)如下:

(1)对于在云平台上开发的应用,Jenkins服务器从代码库获取代码并自动编译;对于在云平台部署的应用,Jenkins服务器从固定位置获取编译好的代码;

(2)Jenkins通过命令将代码打包成为镜像,并将镜像上传至镜像仓库;

(3)准生产环境获取最新的镜像,测试人员进行相关测试;

(4)测试通过,生产环境获取最新的镜像,业务最终上线。

这种流水线的方式,最大限度实现了自动化,缩短应用从发布到上线的时间,实现了快速迭代、持续交付,大大提高了数据中心运维的效率。

五、结束语

本文分析了容器技术应用于高校云数据中心的必要性,并结合主流的Docker、Kubernetes技术设计了基于容器技术的CaaS平台架构和开发测试一体化架构,实现了对平台上运行的业务系统快速交付、弹性伸缩、便捷运维等的支持,最后通过实验证明了设计方案的实用性和高效性。

参考文献:

[1]何震苇,严丽云,李慧云等.基于开源PaaS技术的互联网业务平台自动部署方案[J].电信科学,2015,31(10):179-186.

[2]陆钢,杨新章,何震苇等.电信运营商对容器技术的探索和思考[J].电信科学,2016,32(8):159-163.

[3]杨清波,陈振宇,刘东等.基于容器的调控云PaaS平台的设计与实现[J].电网技术,2020(6):2030-2037.

[4]张琦.基于Docker的CaaS管理平台架构研究与设计[J].计算机应用与软件,2018(11):33-41,54.

[5]师德清.基于Docker的PaaS架构设计研究[J].信息与电脑(理论版),2017(8):35-36.

[6]王亚玲,李春阳,崔蔚等.基于Docker的PaaS平台建设[J].计算机系统应用,2016,25(3):72-77.

[7]张羿,胡永华,黄丁.基于Docker的电网轻量级PaaS平台构建方案[J].信息与电脑(理论版),2017(11):75-78.

[8]彭勇,谢剑,童遥等.一种基于Docker的数据中心云平台实现方法及系统[J].中兴通讯技术,2017,23(2):60-62.

[9]应毅,刘亚军,俞琰.利用Docker容器技术构建大数据实验室[J].实验室研究与探索,2018,37(2):264-268.

[10]董昕,郭勇,王杰.基于DevOps能力模型的持续集成方法[J].计算机工程与设计,2018,39(7):1930-1937.

(编辑:王天鹏)

猜你喜欢
容器
Different Containers不同的容器
人心像一个容器
难以置信的事情
怎样量出4升水
液体对容器底及容器对桌面的压力和压强
直干蓝桉容器育苗基质的选择
氦容器的加工制造及安装