EN

新闻中心

LOONGSON NEWS

栏目导航

优秀的龙芯Docker虚拟机解决方案

发布时间:2019-05-23    已阅读:

云平台是近几年流行的服务器部署架构,现在的大型数据中心往往会安装几千台甚至上万台服务器,传统的操作系统和网络管理软件已经难以满足管理效率要求。云平台是专门面向海量服务器的管理系统,有虚拟机(KVM)和容器两种类型。Docker属于后者,是一种轻量级的开源容器引擎,“容器”(Container)的含义是指开发者可以将应用程序以及依赖的库文件进行打包,封装到一个镜像中,这个镜像可以在网络上发布,用户把镜像传输到要运行应用程序的服务器上,在Docker引擎上以容器的方式运行,每一个容器是一个自成一体的应用实例。容器在底层使用沙箱机制,每一个容器拥有独立的文件系统,各个容器之间在逻辑上隔离,容器之间的访问受到严格的安全限制,从而保证容器内运行的应用和数据的安全。

龙芯电脑完善支持Docker,具备了建立大规模集群节点的管理能力,适合做为公有云或者私有云的基础架构。

一、为什么要有容器技术

云平台的兴起时间在2000年以后,到2010年成为IT领域的热门术语。云平台兴起的原因主要是两点:第一是服务器数量成倍增长,第二是软件平台的复杂性和差异化日益严重,尤其体现在Linux操作系统的碎片化。网络上的文章一般强调前者,其实服务器数量上的增长只是表面现象,后者才是导致云平台产生的最主要原因。

1. Linux操作系统的碎片化

Linux操作系统的碎片化是指Linux衍生出几百种各不相同的变体,每一种变体又分成多种版本,这种差异化会严重导致浪费开发资源、加重运营负担。Linux天生是一个在开源社区上自由生长的操作系统,每个人都可以从源代码制作一个发行版(Distribution),从而形成了Debian、Fedora、Ubuntu、CentOS等为数众多的变体,据统计这样的发行版总共有几百个,常用的也有十多个。这些发行版不像企业主导开发的软件一样有较强的秩序约束,各个发行版之间存在一定的互不兼容,在软件包格式、基础软件版本、升级机制等方面都会有差别。整体上看,Linux生态呈现出严重的发散状态,这种碎片化的特性是开源软件的通病,在未来还会更加严重。

设想有一个软件公司,基于Linux开发和维护着多个软件项目。由于硬件、软件不断在升级进步,新开发的项目一般倾向于选用当时最新版本的操作系统。随着时间的积累,项目的数量逐年增长,而老的项目还需要维护,必然导致这些项目使用的操作系统各不相同。经过一定年份,软件公司会面对很多种操作系统,软件分别运行在不同版本的基础软件上,尤其是JDK、中间件、数据库等等。由于各操作系统之间不兼容,基础软件也不保证向下兼容,应用程序一旦开发完毕、代码冻结,只有在开发时确定的操作系统版本上才能保证功能正常。这种“操作系统—基础软件—应用程序”的搭配会形成组合爆炸的趋势。

2. 最原始的部署方式:独立服务器

在没有云平台之前,服务器采用原始的“独立部署”方式,每一台服务器安装一种操作系统,在上面部署一套基础软件、应用程序。只要有一种“操作系统—基础软件—应用程序”的搭配,就需要购买和部署一台服务器,如图 1所示。

图 1 基于独立服务器的部署方式

对于三个软件项目,需要三台服务器分别运行一个项目,每一个项目使用不同版本的操作系统、JDK、中间件、数据库。这种部署方式的弊端在于资源严重浪费,购买服务器的原因只是为了解决软件版本的需求,对于大型企业,经常运行成百上千个业务系统,需要投入的硬件数量是巨大的。由于现在服务器的硬件性能非常高,一个项目往往占不满服务器的计算资源,存在极大浪费,管理成本、用电消耗、机房面积都不堪重负。

3. 云平台的第一阶段:KVM虚拟机

虚拟机(Virtual Machine)是针对上述部署方式的不足,为了提高服务器硬件使用效率而提出一种改进方法。虚拟机的宗旨是把不同的操作系统、基础软件、应用程序部署到相同机器上,也就是在一台物理机上安装多个不同的操作系统,并且可以同时运行,每一个操作系统中则可以安装不同版本的基础软件,这样就实现了在一台物理机上部署不同的软件项目。虚拟机技术的典型代表有IBM OS/360(1964年)、VMware(1999年)、KVM(2006年)、VirtualBox(2007年)等。图 2是基于虚拟机的部署方式。

图 2 虚拟机的部署方式

通过使用虚拟机的方式,可以将三个软件项目运行在一台服务器上,每一个虚拟机都是一套独立的操作系统和基础软件环境。只要服务器的计算性能可以承受三个软件同时运行的压力,就可以有效减少机器数量、提高资源利用率。大部分有能力的软件公司都转型到虚拟机这种部署方式。

虚拟机为实现云平台提供了基础,云平台是实现海量服务器和应用软件的集中管控和运行服务的架构,早期的云平台都是建立在虚拟机技术上。

虚拟机的方式已经可以解决操作系统碎片化的问题,但是还是存在一定的不足,主要是启动时间慢。由于每一个虚拟机里面运行的都是完整的操作系统,这意味着每次部署一个新的应用软件,都需要创建一个新的虚拟机、启动一个完整的虚拟操作系统,这个时间一般在几分钟。感觉上几分钟可能并不是太长,但是对于生产环境上的业务系统,几分钟的时间很可能会影响很多订单收入。下一步的发展方向集中解决“怎样减少启动时间”这个问题,容器技术就是沿着这个思路产生的。

二、云平台的进化:容器技术

容器(Container)技术的本质是在一个服务器上只运行一个操作系统,每次部署一个新的软件不用重新启动操作系统,只剩下软件本身的启动时间。容器技术和虚拟机的区别如图3:

图3 虚拟机与容器的对比

虚拟机和容器的区别如下:

1. 从架构角度看,每一个虚拟机中启动的是完整的操作系统,各个虚拟机可以使用不同的Linux内核,即图10- 3中左侧的“Guest OS”的含义。而每一个容器只是一个文件系统(即应用程序 + 依赖的库文件),所有容器都使用相同的Linux内核,也就是图10- 3中右侧的“Host OS”。

 ⇨ 提示:什么是内核?
     Linux操作系统由几千个软件包组成,其中有一个最重要的软件,承担了操作系统最核心的功能,即课本上所讲的进程管理、内存管理、文件管理、外设管理功能,这个软件包就叫做内核。除了内核之外的其它软件总称为“文件系统”,像日常使用的所有命令行工具(ls、cd、mkdir等)都属于文件系统中的软件,另外还有图形桌面环境、Web服务器、办公软件也都属于文件系统。
     按照严格的操作系统定义,只有内核实现了操作系统本身的核心功能,其它所有的软件都是属于“应用软件”。所以,图中的Host OS、Guest OS实际上都是指Linux内核。
 

2. 从运行角度看,每一次虚拟机的启动过程都包括内核(Guest OS)加上应用程序的启动时间,因此往往要有几分钟;而每一个容器的启动过程不包含内核的启动时间,只有应用程序的启动时间,所以最短只需要几秒钟就可以启动一个容器。

3. 从资源角度看,容器不需要重新分配内核资源,从而比虚拟机节省了CPU和内存。一台主流的服务器运行的虚拟机数量一般不超过几十个,而运行容器则很容易突破上千个。在这个意义上,容器又被称为“轻量级虚拟机”(Light-weighted Virtual Machine)。

使用容器部署应用程序的架构如图4所示。

图4 容器的部署方式

在一台服务器上,只需要安装一个本地操作系统(例如CentOS 7),启动多个容器,在一个容器内安装任意版本的基础软件和应用软件。容器为应用程序提供隔离机制,每个容器中的应用程序只能访问本容器内部的文件系统,即使一个容器的应用程序把文件写出错误,其它容器不受任何影响。

容器的轻量级优点适应了云平台的发展需求,主流云平台在近几年都开始对容器技术进行支持。

三、容器是否能取代KVM

由于上述优点,容器技术从产生到现在一直很火爆,大有全面取代虚拟机的势头。在Linux领域中,虚拟机技术的代表软件是KVM,容器技术的代表软件是Docker。

图5 Docker形象标识

既然容器有诸多优点,是否以KVM为代表的虚拟机技术会在将来消亡?有以下两个原因会使KVM继续保持一定的生命力:

1. 如果要部署使用不同内核的应用程序,只能使用虚拟机。由于容器在结构上不包含内核,所有容器只能共享使用相同的本地内核,这已经能满足大多数场合,但是如果应用程序依赖于不同的内核版本,那么只能使用虚拟机技术。还有一种典型场景是用于开发内核,假设一个程序员对标准Linux内核进行了修改,例如添加了新功能或者修正了一个Bug,想快速的运行调试新内核,那么无疑是不能使用容器技术的,只能使用虚拟机技术。

2. 已经使用虚拟机的云平台,还需要继续维护。如果云平台已经运行了大量的应用系统,改造成容器技术需要较大工作量,从企业利益出发有可能会考虑以虚拟机方式长久的运行下去,而对于新部署的应用系统则放到容器平台上。

鉴于上述原因,KVM虚拟机和Docker容器都是实现云平台的基础技术,Docker更具有天生优势,从商业份额上看,Docker的占用率呈现出逐年增长的趋势。

四、容器相比KVM的优势

从技术原理上,Docker天生具有“轻量”的优势,因此更容易发挥服务器物理主的性能。图 6是对Docker和KVM进行的比较,可以看到Docker在各方面的性能上全面超越KVM。

图 6 Docker全面优于KVM

现在的很多的云平台,例如阿里云、华为云,都是同时提供虚拟机、容器两种选择,用户根据自己的需要租用适合的平台。

龙芯从几年前开始就完善支持Docker方案,KVM也已经在2019年4月正式发布。用户可以针对应用场景选择Docker或者KVM中的一种,两者都可以完善的支撑公有云或者私有云平台。在绝大多数云平台中,Docker已经足够取代KVM。

 

参考资料

[1] 《龙芯应用开发标准教程》第10章“奔向云端:Docker虚拟机”,2018年12月,人民邮电出版社
[2] Docker官网,https://www.docker.com
[3] 阿里云容器服务平台,https://www.aliyun.com/product/containerservice
[4] Docker与KVM之间的区别,https://blog.csdn.net/wzyzzu/article/details/67644316