基于Docker容器的云资源监控设计与实现

2021-11-03 09:23江苏自动化研究所李南华
电子世界 2021年18期
关键词:网络拓扑镜像应用程序

江苏自动化研究所 李南华

随着信息技术的发展,越来越多的企业开始采用云计算的形式来替代传统的硬件设备。云计算技术利用虚拟化技术将大量软硬件资源整合在一起,形成可利用的资源池,通过创建虚拟机的形式为外部提供计算服务,这种做法不仅节省了企业采购及后期软硬件维护成本,同时也提高了各类硬件资源的利用率。面对轻则几个机柜,重则整个机房的硬件设备来说,如何高效的实现对整个资源的监控、运维、管理,成为使用云计算必须解决的问题。

本文在分析Docker容器的相关技术基础上,基于OpenStack Ceilometer相关接口设计并实现了一种基于Docker的云资源监控系统,以满足对云平台运维管理的需求。

1 Docker简介

1.1 Docker

Docker首次被提出于2013年,是一种基于LXC的轻量级虚拟化技术,遵循Apache2.0协议。其主要目标是“Bulid,Shop and Run Any App,Any-where”。使用Docker容器技术,可以对应用进行高效、敏捷且自动化的部署,同时结合操作系统以namespaces,cgroups为代表的内核技术,保证了Docker容器的安全与资源隔离。Docker采用传统的C/S架构模式,主要包含客户端(Docker Client)和服务端(Docker Daemon)两部分。用户通过Docker Client与Docker Daemon建立TCP/REST通信,并将用户请求发送给DockerDaemon,Docker后端采用松耦合架构,不同组件之间相互组合,完成用户请求。具体架构如图1所示。

图1 Docker架构

1.2 Docker与传统虚拟机的比较

Docker与虚拟机的目的都是隔离应用程序及其关联性,构建一个依赖性较低,不受系统环境及硬件限制的容纳单元,保证用户能够更加充分、高效地使用计算资源。如图2所示,Docker容器与虚拟机的核心差异在于架构。从图中可以看出,虚拟机比Docker多了一层用户操作系统(Guest OS),通过对底层计算、IO、网络等硬件资源进行虚拟化,实现虚拟机操作系统的运行,因此,虚拟机需要运行在一个完整的宿主操作系统上,无法独立运行。Docker技术不同,其直接在本地硬件资源的基础上,通过共享主机系统的内核,链接整个软件供应链,封装应用所需的环境,以最简单的方式提供高性能的服务。通过分析虚拟机与Docker容器的架构,Docker容器技术具有以下优势。

图2 虚拟机与Docker架构

(1)效率高,资源利用率高

Docker不需要对物理资源进行虚拟化,直接在宿主系统的基础上进行内核构建并共享底层操作系统,从而实现Docker容器的秒级快速启动。由于没有中间层的资源开销,相比传统虚拟机,在相同规模的硬件下,Docker可以运行更多的实例,这大大提高了资源的利用率。

(2)易用性

Docker的运行以镜像为基础,只需要根据要求制作镜像,即可在不同云环境甚至裸机上运行,搭配高效率的启停,可以加快项目的研制周期,从而快速交付。

(3)模块性与可扩展性

用户可以按照功能的不同将应用程序进行拆分,然后将各个功能进行模块化,并使用容器进行封装,最后通过对接各个容器来创建完整的应用程序,从而实现应用程序的解耦。这种应用程序分拆封装的方法,有利于后续对应用进行拓展或者更新时,用户无需对整套应用程序进行变更修改,只需修改对应的模块即可完成整套程序的升级、迭代,降低工作量与工作难度。

2 docker容器资源监控设计

2.1 设计思路

本设计选择主流开源云计算平台OpenStack作为资源监控对象,OpenStack本身自带的监控系统——Ceilometer组件可以监控各类资源的状态,但其功能还不够全面;一方面Ceilometer只关注资源监控数据的采集,没有对监控数据进行存储及分析,另一方面,当采集的数据量过于集中时,Ceilometer可能出现性能大幅下降甚至出现服务不可用的情况。因此,设计思路是利用Celilometer的既有接口,将相应的监控信息进行汇总并二次封装,从而实现资源的监控。整个监控软件系统架构图如图3所示。

图3 监控软件系统架构图

从图3可以看出,整套监控系统主要用到了两个容器,一个是数据库容器,另一个则是监控采集分析容器,两个容器均运行在控制节点上。两个控制节点均部署一套监控系统,根据云平台主控节点运行,备节点上的监控系统处于待机状态。

(1)数据库容器

数据库容器主要是用于web管理界面登陆、资源监控、日志等数据信息的存储,容器中主要部署了mysql数据库应用以及用到的sql文件。

(2)监控采集分析容器

监控采集分析容器主要是用于数据的采集、汇总、展示等操作,容器中包含采集脚本clients、web服务web_server、socket服务socket_server三部分。其中,client脚本是将原生Openstack中的监控信息进行整合封装;socket_server负责数据信息的传递工作;web_server负责提供web客户端登陆的相关服务。

2.2 实现过程

本次实验是将监控程序部署在自制的容器内,通过容器间的协同工作,实现对openstack云平台资源的监控目的。具体实验过程如下。

2.2.1 容器镜像制作

通过编写Dockfile的形式将要制作容器所需要的资源进行封装,具体命令如下所示,镜像做好之后,一方面可以将其上传到docker镜像仓库,后续需要通过网络进行拉取,另一种方式是通过docker save命令将其存下来,后续的部署中可以无需联网而直接进行使用,本文采用了第二种方式。

docker build -t docker-monitor .

docker build -t project_publish .

2.2.2 容器部署

(1)容器网络创建(图4)

图4 容器网络创建

docker network create monitor_net

(2)mysql镜像导入(图5)

图5 mysql容器导入

docker load

(3)code镜像导入(图6)

图6 code镜像导入

docker load < project_publish.v2.tar

(4)启动mysql数据库服务容器并更新数据库(图7)

图7 mysql数据库容器创建

docker run-d-p 33060:3306-e MYSQL_ROOT_PASSWORD=123456--name=monitor_mysql--restart=always-v=/home/mysql:/mysql--network=monitor_net monitor_mysql:V4.1.1

(5)启动 web服务和 socket 服务容器(图8)

图8 web服务及socket容器创建

docker run-d-e “container=docker”--privileged=true-p 8011:8011-p 8012:8012-p 6000:6000/udp --name=project_monitor--restart=always-v /home/code:/code--network=jari_net project_publish:v2/usr/sbin/init

2.2.3 资源监控

(1)登陆界面

从web服务容器启动参数可以看出,web登陆端口为8011,因此打开浏览器,登陆10.10.10.2:8011,进入页面。如图9所示。

图9 监控系统登陆界面图

(2)资源概览

相较于原生OpenStack资源监控,此处将CPU、内存、存储使用情况以及节点数量这些需要多个界面查看的内容进行整合,如图10所示。该资源概览页面集中展示了当前云平台的资源概览,包含集群CPU、内存、存储的使用情况,虚拟机数量、计算节点运行情况以及网络带宽等。

图10 资源概览图

(3)虚拟机资源利用率

对于运维管理人员来说,每个虚拟机的资源使用情况是监控的重点,通过该信息,管理员可以清楚的看出哪个虚拟机的资源利用率过高,从而对其进行拓展或扩容操作。如图11所示。

图11 虚拟机资源利用率监控图

(4)网络拓扑

对于网络拓扑来说,OpenStack自带的网络拓扑无法直观的查看当前的网络配置情况,因此本实验在获取到每个虚拟机网络的基础上进行整合,形成网络新的网络拓扑,如图12所示。

图12 网络拓扑图

3 试验总结

本文通过将Openstack云平台原生Ceilometer接口信息进行信息整合封装,形成有利于用户调用的资源监控信息,然后通过Docker容器部署的方式,实现一整套云平台资源监控系统。该系统可以直观的实时监控云平台的集群资源使用量、物理节点状态、虚拟机的数量及运行状态、网络拓扑等。实验表明,该种方式下的资源监控可以解决原生云平台监控信息只有接口没有界面的问题,同时提高运维人员监控运维的效率。

猜你喜欢
网络拓扑镜像应用程序
基于通联关系的通信网络拓扑发现方法
镜像
删除Win10中自带的应用程序
能量高效的无线传感器网络拓扑控制
谷歌禁止加密货币应用程序
镜像
劳斯莱斯古斯特与魅影网络拓扑图
基于多任务异步处理的电力系统序网络拓扑分析
镜像
三星电子将开设应用程序下载商店