面向容器的集群资源管理系统研究

    李英华

    

    摘要:在云计算日益火爆的今天,云计算领域诞生了一个新兴技术,使得整个计算机行业为之振奋。这就是Docker——一个全新的“容器”。Docker作为轻量级容器能够为云计算3种模型(SaaS,PaaS,IaaS)之一的PaaS的构建提供可靠的支持。文章以Docker为基础平台,以Google开源的Kubernetes为平台,Harbor为镜像仓库,Etcd为全局索引系统,falcon-agent为监控构建完整的集群资源管理系统,提供大型集群环境部署及管理方案。

    关键词:云计算;容器;虚拟化;集群

    1研究背景及意义

    现行的大规模网络集群都由巨量的服务器组成,多数计算型资源的服务器,的计算能力无法得到充分利用。例如LXC,KVM等虚拟化技术虽然对资源进行隔离,但LXC,KVM技术依赖于物理CPU,及内存,是硬件级别,无法进行快速的部署、启动和迁移。而Docker相当于操作系统之上的程序,利用操作系统containerzation技术,可以在KVM虚拟机上运行,容器占用系统资源很低,极大地提高了资源利用率。当今,面向互联网的服务,一旦各种资源达到瓶颈,最简单的方法就是提高服务器的数量。但是,需要大规模的部署系统及应用,且峰值过后,又需要迁移过量的机器。而Docker通过将多种依赖组件及服务打包成镜像的方式,能够实现快速的部署和实现,且一台主机可以同时运行多个实例,峰值过后,还可快速的销毁,极大地提高了大型服务的伸缩能力。云计算技术使互联网服务必须由巨量的服务所支撑。不同的服务有着不同的功能就如同不同的零件组装成机器,而Docker容器就像一个集装箱,把所需要的服务及环境都封装在里面,想用的时候随时可以拿走并使用,提供了一个快速启动,快速部署,版本控制的方法。Docker与云计算平台的结合产生了良好的化学反应。

    2系统综述

    集群资源管理系统实现资源的统一管理和使用,同时监视集群的资源负载情况,为上层业务系统提供灵活、快速、动态的多种资源服务,提供统一的系统资源管理基础构架。整个系统由资源实体层、资源服务层、资源管理层等组成。

    面向容器的集群资源管理系统,管理计算资源,为不同服务提供资源及环境。其整体系统架构如图1所示。

    按照系统各组件之间的关联关系,完整的系统需要的组件可分为以下部分:(1)Docker组件Kubernetes集群使用Docker作为基础容器组件,容器启动net=none网络,通过assginer和pipwork配置容器的网络。Docker在LXC之上融#AUFs分層镜像管理机制,抛弃传统虚拟机试图模拟完整机器的思路,以应用为单元进行“集装封箱”,是“轻量级”的虚拟化技术。Docker Engine可以自动化部署应用到可移植的容器中。Docker容器可以封装任何有效负载,几乎可以在任何服务器之间进行一致性运行。开发者构建的应用只需一次构建即可多平台运行。运营人员只需配置他们的服务,即可运行所有应用。(2)Kubernetes组件Kubernetes Cluste中创建的每一个集群都对应一套Kubernetes环境。一套完整的Kubernetes集群包含一台Kubernetes master和若干台Kubernetes node。为了确保Kubernetes集群正常运转,每一台集群内主机上首先需要配置好Docker组件,此外,整套集群需单独部署如下组件:etcd:为Kubernetes集群配置提供存储服务,记录所有组件的信息和更新状态;另外,assginer也依赖于etcd,在提供的安装脚本中,Kubernetes和assginer共用同一套etcd集群。(3)监控组件。容器资源管理的监控系统是在小米开源的open-falcon基础上进行修改实现的。一套完整的监控系统需要如下组件:agent:采集信息并上报组件,需要在集群中所有node节点部署。

    3系统具体功能实现

    Kubenetes通过scheduler通过Apiserver查询资源充足的机器分配Pod,过程如下:通过客户端提出需求,可以通过Apiserver的Restful API,也可以使用kubectl命令行工具。支持的数据类型包括JsON和YAML。具体步骤为:(1)Apiserver获取资源申请请求,并存储到etcd;(2)调度器通过Apiserver查询请求。尝试为Pod分配主机;(3)过滤主机:调度器根据请求需要的资源过滤资源剩余不足的节点;(4)进一步评估剩余机器,寻找负载最低的机器;(5)选择主机:将选择的结果存储到etcd中;(6)对应机器根据kubelet查询的结果执行创建Pod操作。

    Docker容器申请流程及说明:通常在生产环境中,往往需要对大规模需求进行快速的响应部署。通常情况下都是以rc为对象创建一一对应的实例。通过yaml文件描述需求具体情况及资源分配。通过yaml文件将Ip池导入etcd,具体命令操作为:Assigner import import.yaml$ETCDPATH。然后再资源上线:通过kubectl命令行操作,具体命令如下:Kubectl creme-fxx.yaml。

    通过commiter对稳定的Docker容器进行版本固化:commiter是一款由go语言开发的,基于Kubernetes集群的系统镜像资源和IP资源的管理系统。该系统的功能实现需要assigner和Kubernetes的配合。Commiter为用户提供可配置的镜像仓库地址、Apiserver地址、ftp地址;以组件为单位,将组件内所有的业务容器打包成镜像,镜像命名规则为:registory/app-component-ip:tag,其中tag为当天日期;将键值对<镜像名:容器IP>写入ETCD中/commiter/ips目录下,其中镜像名不包含仓库信息,即:app-component-ip:tag;将镜像上传到镜像仓库;对该组件内每个业务容器,增加对应Kubernetes Pod标签,标签内容为IP=containerip;根据组件rc模板文件,为该组件内每个业务容器生成一个单独的pod_rc控制文件,该pod_rc命名规则为:appre-component-ipyaml,其中该pod_rc控制文件中镜像名为该pod中业务容器利用commiter打包生成的镜像名;将生成的pod_rc文件上传到ftp对应/app/component目录下;针对生成的pod_rc,调用Kubernetes,执行create操作,完成pod_rc对该组件控制rc的接管(组件内所有的pod_rc全部执行完才算完全接管)。

    容器IP配置的说明:(1)编写import.yaml文件将ip池导入etcd按指定目录存储;(2)创建pod容器成功后通过assigner查询etcd中对应IP池提取未被占用的IP;(3)通过pipework为指定容器分配IP。

    4结语

    随着移动互联网的迅速发展,海量的数据使得企业级应用承受了巨大的压力。云计算,大数据的作用越来越大。也催生了虚拟机及容器技术。例如Docker。又由此催生了一系列管理容器的服务,例如Kubernets。

    现在许多企业都在加大对容器技术的使用力度。对于大型集群而言,容器技术,可以提升资源利用率。提高资源分配效率及弹性伸缩能力。结合镜像的使用方式,可实现服务的快速部署及启动。京东在双11部署了15万+的容器,使业务效率提升了N个等级。阿里云也正在推进容器化。

相关文章!
  • 融合正向建模与反求计算的车用

    崔庆佳 周兵 吴晓建 李宁 曾凡沂<br />
    摘 要:针对减振器调试过程中工程师凭借经验调试耗时耗力等局限性,引入反求的思想,开展了

  • 基于MATLAB 的信号时域采样及

    唐敏敏 张静摘要:频率混叠是数字信号处理中特有的现象,发生频率混叠后,信号会分析出错误的结果。而采样过程中,由于频率不够高,采样出

  • 卫星天线过顶盲区时机分析

    晁宁+罗晓英+杨新龙<br />
    摘 要: 分析直角坐标框架结构平台和极坐标框架平台结构星载天线在各自盲区状态区域附近的发散问题。通过建