WatchStor.com — 领先的中文存储网络媒体 | 51CTO旗下网站

新闻资讯 > 混合云 > 正文
2018年开源容器云,你的技术路线选对了吗?
作者: 开源软件研究工作组 2018-01-26 13:34 【51CTO】

2018年开源容器云,你的技术路线选对了吗?

一、背景

近几年,随着容器技术的快速发展和壮大,国内外互联网公司、传统IT公司以及金融行业都积极投入到容器技术的研发和应用中,容器技术的生态圈已经形成。容器技术定义了一套从构建到执行的标准体系,不同于传统的虚拟化技术,它改变了企业日常开发、测试和运维的流程,解决IT、架构及运维等难题,使开发人员能够专注于业务,构建了新一代的云计算生态体系。容器技术让企业降低了成本,加快了业务实施的速度和灵活性,是金融企业云计算平台建设和信息系统架构升级的方向。

无论是在云计算环境中采用容器技术或基于容器技术建设云平台,在大规模的集群中应用容器,往往面临巨大的管理挑战。为满足容器集群在调度、网络、存储、性能和安全等方面的需求,容器编排工具应运而生。目前主流的开源编排工具包括Docker Swarm、Kubernetes和Mesos(编排框架通常为Marathon)等。根据容器编排工具的发展情况和应用现状,以及金融企业在服务化、分布式、容器化等方面的需求,我们首先对Kubernetes和Mesos开展了评测和对比,帮助金融企业选择更加适合自己的容器编排工具。

二、容器编排工具评测模型

容器编排工具具有快速部署、弹性伸缩、轻量、高可用、可移植、资源利用率高等诸多优势,但在引入和应用过程中仍会面临很多问题。一是目前容器技术没有统一的标准,产品多、技术迭代速度快,未来可能面临不确定因素;二是管理容器环境和应用比较复杂,需要多类技术共同支撑;三是在应用过程中还需要考虑在容器间、系统或应用间,内核共享带来的安全、隔离等问题。因此,在引入容器技术时需结合具体场景,选择适合的容器编排工具,为业务应用提供支撑。

针对容器技术应用过程中面临的问题,我们重点围绕金融行业关注的特性以及容器编排工具发展现状,充分考虑了开源软件的特性和金融行业应用需求,基于金融行业开源软件成熟度评测整体模型,建立了容器编排工具评测模型,涵盖整体模型的12大评估属性,具体详见已发布的《金融业开源软件研究评测——容器编排工具评测模型》。

三、开源容器编排工具简介

(一)Kubernetes

2013年,Google宣布启动Kubernetes项目。 2014年,Google正式开源Kubernetes。之后,红帽、微软、IBM、惠普、VMware、Intel等公司相继加入Kubernetes社区。2015年7月,Kubernetes v1.0发布。

Kubernetes(简称K8S)作为开源容器集群管理系统,为容器化的应用提供了应用部署、维护、故障发现和自我修复、服务滚动升级、扩容缩容等一整套功能,利用Kubernetes能方便地管理跨机器运行的容器化应用。围绕容器的特点,K8S设计了强大的容器编排能力,如容器组合、标签选择和服务发现等,能够满足企业开发、测试、部署、运维监控等需求。同时,K8S中许多功能都实现了插件化,可以方便的进行扩展和替换。许多厂商基于开源Kubernetes进行了定制化开发,提供了基于Kubernetes的企业级产品,包括定制开源产品(如Openshift)和商业软件产品等,为企业业务稳定运行提供支撑。

(二)Mesos

Mesos是2009年由UC Berkeley开发的开源集群管理框架,2011年成为Apache的顶级项目。2010年Mesos开始在Twitter应用,目前,管理了超过3万台服务器上的应用部署。

Mesos是Apache下的开源分布式资源管理框架,也被称为分布式系统的内核,它通过数据中心资源共享使资源利用率更高,通过隔离确保应用安全、自动分配、并提升伸缩性。同时,Mesos通过两级调度架构管理多种类型的应用程序,第一级调度由Mesos监控集群的空余资源,并将空余资源按照一定规则分配给各个计算框架;第二级调度由框架(Framework)组成,各个计算框架会根据需要选择接受或者拒绝所分配的资源。目前,Mesos已经广泛使用,提供集群服务、容器编排、大数据服务等基础服务支撑。

Mesos是集群管理器,本身并不具备容器编排调度功能。2014年,基于Mesos的容器编排框架Marathon发布。Marathon是Mesos上负责长任务处理的框架,为开启、监控以及扩展长期运行应用程序设计,用户通过Marathon提交、运行、监控和调度容器应用。Marathon提供负载均衡,横向扩展和可恢复性等基础服务能力,实现容器的编排调度。目前,已被三星、迪士尼、Autodesk等知名厂商应用于生产环境。

四、评测环境

许多企业在开源软件的基础上对容器编排工具Kubernetes、Mesos进行了定制。综合考虑软件的实际使用情况和目前的主流稳定版本,我们选择了下表中的软件版本进行评测,包括基于Kubernetes的开源Openshift和商业软件A,以及开源软件Mesos(容器编排框架Marathon)。

表1 软件版本信息

参考生产环境中业务系统的实际运行环境搭建评测环境,搭建6台物理服务器的验证环境,每台服务器配置如下表。

表2 测试环境信息

五、开源软件许可证开放性

Kubernetes和Mesos均采用Apache License 2.0协议。在开源许可证规定的包括商业用途、分发、修改、专利授权、私用、公开源码、放置许可协议与版权信息、使用网络分发、使用相同协议、声明变更、承担责任、使用商标等方面的使用要求与限制中,Apache 2.0属于较宽松型协议。

用户在使用该协议的开源软件产品时,保留原有许可证和版权信息、注明对代码所做的修改即可。同时,该协议是对商业友好型的许可,能够通过修改代码作为开源或商业产品发布/销售。

Kubernetes:

Mesos:

六、社区活跃程度

Docker自2013年推出以来,正逐渐成为各类企业的通用平台技术。在2015年,Docker逐渐应用到生产环境后,更加高效地管理和编排容器成为了企业的共同需求,因此容器编排工具备受瞩目,产品活跃程度也越来越高。

1、Kubernetes

(1)软件版本发布

通过分析Kubernetes的开源代码,得到近三年的版本发布情况如下。


图1 Kubernetes软件版本、代码变化情况

从版本发布数据可知,Kubernetes自2014年宣布开源,到2016年底发展迅速,代码量增长近10倍。期间Kubernetes功能不断更新,增强了安全机制,以及集群、网络、存储、节点、调度等的管理能力。在2017年,Kubernetes在集群扩展、自动化、API 聚合、存储功能扩展、外部访问控制、自举等方面进行了功能加强和优化,版本迭代速度逐步稳定。

(2)开源社区影响力

通过分析Kubernetes在开源社区的代码贡献者情况以及受关注程度,考察Kubernetes开源社区的活跃程度和影响力。


图2 Kubernetes软件贡献者、提交数变化和贡献者等级分布情况

近三年Kubernetes平均每季度贡献者数量是460,平均每季度提交数量是4714,近三年活跃程度逐年提高。截至目前,在GitHub上关注Kubernetes的开发者人数超过两千人,Star人数已超过三万,在开源社区方面属于热门项目。

2、Mesos

(1)软件版本发布

通过分析Mesos的源代码,得到近三年Mesos版本发布情况如下。


图3 Mesos软件版本、代码变化情况

根据版本发布数据可以看到,Mesos的发布周期和代码增长相对稳定。Mesos自2009年诞生以来,作为软件定义数据中心的操作系统不断完善,在容器化、集群管理、编排、高可用共享配置和服务发现等方面做了许多优化。2017年发布的版本中,主要围绕容器进行了相关改进,包括存储、租户隔离、Framework管理等。由于在众多知名厂商的生产环境中应用,版本迭代速度相对稳定。

(2)开源社区影响力

同样的,我们通过分析Mesos在开源社区的代码贡献者情况以及受关注程度,考察其开源社区的发展情况。


图4 Mesos软件贡献者、提交数变化和贡献者等级分布情况

从贡献者数量看,Mesos近三年平均每季度贡献者数量是94人,平均每季度提交数量是1673,贡献者数量和提交数量相对稳定但有所下滑,并且数量上相差Kubernetes较远。截至目前,GitHub上关注Mesos的开发者人数为418人,Star人数接近3500,相比于Kubernetes关注度较低。

Kubernetes:

Mesos:

七、行业认可度和服务支持情况

行业认可与服务支持反映开源软件在业界的应用情况和能够提供专业化服务的情况。

1、Kubernetes

Kubernetes项目源于Google在集群资源管理(Borg平台)和容器技术(Omega平台)等方面的实践经验和技术积累。自2014年Google开源Kubernetes,微软、红帽、IBM、惠普、VMware、Intel等大企业相继加入,开展技术合作或推进软件栈的兼容,使得Kubernetes得到了快速发展。

Kubernetes的服务商体系比较完善,认证服务商越来越多。2015年7月,Google联合行业合作伙伴一起建立了云原生计算基金会(CNCF, Cloud Native Computing Foundation),2017年9月,CNCF宣布了超过22家Kubernetes认证服务提供商(KCSP),为使用Kubernetes的公司企业提供Kubernetes支持、咨询、专业服务和培训。KCSP成员包括华为、才云科技、IBM、三星、CoreOS、埃森哲、博思艾伦等。

在国内,京东基于Kubernetes建设了JDOS平台实现了业务层的秒级伸缩,网易云基于Kubernetes建设了大规模集群并支撑高并发应用,七牛云基于Kubernetes开展了人工智能方面的实践,其他还有华为、网宿科技、时速云、灵雀云等企业基于Kubernetes开展容器云方面的实践或提供服务。

Kubernetes作为发展最迅猛的五大开源项目之一,采用率在急剧提高。

2、Mesos

在国外,使用Mesos的企业包括Twitter、Apple、Airbnb、eBay、Paypal、Ericsson、Uber、Cisco等。在国内,像国内三大电信运营商、小米、新浪微博、知乎、豆瓣,以及去哪儿、携程、唯品会、爱奇艺等都是Mesos的用户。

Mesos 只专注做资源调度和隔离,其他部分则对接开放的标准,比如在网络方面支持 CNI ,在存储方面支持 Docker Volume。许多企业在应用时都在Mesos的基础上开发了自己的框架,包括VMware,Cisco,华为,苹果等。目前Mesos已经广泛应用在集群管理、容器编排、大数据计算中,实现分布式集群资源利用率的提升。

Kubernetes:

Mesos:

八、容器编排功能

Docker解决了应用运行环境整体打包的问题,确定了分层镜像格式,简化了DevOps流程。容器编排工具解决了应用生命周期管理框架的问题,使得分布式运行更加容易,资源分配更加灵活,管理方式更加便捷。但Kubernetes和Mesos在整体架构实现和应用生命周期管理等方面差异较大。

表3 整体架构对比

表4应用生命周期管理能力对比

1、Kubernetes

(1)系统整体架构

在功能架构方面,Kubernetes采用主节点(Master)、服务节点(Node)和分布式存储(etcd)架构。主节点是集群的控制管理节点,服务节点是集群的工作负载节点,分布式存储保存集群的状态。

在模型设计方面,Kubernetes围绕容器编排设计了Pod、复制控制器(RC)、服务(Service)、标签(Label)等模型抽象,并在此基础上设计了网络模型和存储模型。

在资源调度策略方面,Kubernetes更多围绕容器的编排进行设计,操作的对象为Pod。Kubernetes的调度器(Scheduler)负责收集、统计分析资源使用情况,并根据预选策略(强制性规则)和优选策略(可选规则)筛选出符合要求的节点运行Pod。

(2)应用生命周期管理

在应用管理和应用服务方面,Kubernetes通过Pod实现应用的创建,发布、部署、启动、停止等全生命周期的管理功能。同时,提供服务发现,状态监控,高可用,伸缩(包括弹性伸缩、自动伸缩)和资源约束等方面的能力,实现了对应用更好的管理。

在应用升级方面,Kubernetes提供应用的滚动更新、发布回滚和灰度发布等功能。通过复制控制器控制新旧版本的Pod副本数,从而控制容器实例的数量,实现滚动更新和发布回滚。同时,通过标签与服务的关联,控制服务中旧版本和新版本容器实例数量,实现灰度发布,提供了更多的应用升级功能。

另外,在容器编排方面,Kubernetes还具备流量分配、有状态服务和批处理任务的支持,更加符合实际的业务使用场景的需要。

2、Mesos

(1)系统整体架构

在功能架构方面,Mesos采用主节点(Master)、从节点(Slave)、Framework框架(如Marathon)架构。主节点协调所有集群节点资源,从节点负责运行具体的任务,Marathon框架在集群中调度和运行容器实例。

在模型设计方面,Mesos更多围绕资源的调度进行设计。Mesos针对容器编排通常采用Marathon框架,根据Marathon的应用、应用组、依赖、约束实现容器的编排。在网络和存储方面,Mesos本身不管理网络,但能够提供多种网络方案实现一个容器一个IP,并提供多种选择处理持久化存储。

在容器编排的资源调度中,Mesos使用DRF(Dominant Resource Fairness)算法进行一级资源分配,通过Marathon使用资源进行二级资源调度,实现资源的二级调度。

(2)应用生命周期管理

在应用管理和应用服务方面,Mesos通过Marathon实现应用的创建,发布、部署、启动、停止等功能。Mrarathon基于容器进行了应用、应用组等的定义,并在此基础上提供策略约束、事件总线等功能,具备对应用进行全生命周期管理的能力。

在应用升级方面,Mesos+Marathon能够实现应用的滚动更新和发布回滚。通过在更新过程中配置新旧版本容器实例的比例,实现容器实例的滚动更新。另外,通过强制标志部署实现应用的回滚,能够满足应用发布、升级的需要。

另外,对于流量分配、有状态服务和批处理任务等功能,需要Mesos结合其他框架或进行定制才能提供,在容器编排方面的功能方面不如Kubernetes全面。

Kubernetes:

Mesos:

九、性能和扩展能力

容器编排工具作为编排管理工具,在性能上,关注能够管理的集群节点规模;在扩展能力方面,需具备应用的伸缩能力和资源扩展的能力。

1、Kubernetes

(1)扩展规模

由于测试环境限制,未验证Kubernetes管理节点规模的能力。根据官方数据,Kubernetes目前能够支持5000节点的集群,一般能够满足金融企业的应用需求。

(2)弹性伸缩和自动伸缩

Kubernetes中,能够根据负载的高低、Pod资源的使用情况和配置的策略,通过复制控制器调整Pod的副本数,实现弹性伸缩和自动伸缩,伸缩方式更加灵活。

(3)资源扩展

Kubernetes通过API Server对资源对象的生命周期进行维护,实现资源的管理,包括网络、存储和Pod等,并以RESTful风格的API对外提供接口,应用和集成方面更加方便。

2、Mesos

(1)扩展规模

由于测试环境限制,未验证Mesos管理节点规模的能力。根据官方数据,Mesos的线性扩展能力能够很轻易的扩展至10000多个节点,能够满足金融企业应用需求。

(2)弹性伸缩和自动伸缩

Mesos+Marathon本身不具备弹性伸缩的能力,需要通过运行在节点上的任务不断检测资源的使用情况,通过阈值进行容器实例数量的控制,从而实现弹性伸缩和自动伸缩,企业在选择框架时需考虑伸缩方面的需求。

(3)资源扩展

Mesos中通过从节点(Slave)上运行的代理向主节点(Master)上送可用资源,包括CPU、内存、磁盘和端口等,并通过主节点的分配模块决定将资源分配给某个框架,资源的管理方式更加灵活,但对框架也有更高的要求。

Kubernetes:

Mesos:

十、安全和可靠能力

在安全可靠方面,金融企业更加关注容器编排工具的安全性,包括已暴露的漏洞风险情况、多租户隔离、认证和授权机制。在可靠性方面,需提供服务高可用和使用资源额度限制的能力。

1、Kubernetes

(1)已暴露漏洞

在已暴露漏洞方面,近三年Kubernetes共暴露七个安全漏洞,包括一个高危,五个中危和一个低危漏洞。漏洞主要集中在访问权限控制、远程授权导致的敏感信息泄露、非授权访问等方面。

(2)多租户隔离

Kubernetes对多租户的资源隔离和限制从Container、Pod、Namespace三个层次实现,Container层次主要利用容器本身的支持,比如Docker 对CPU、内存等的支持;Pod方面可以限制系统内创建Pod的资源范围,比如最大或者最小的CPU、内存等;Namespace层次就是对用户级别的资源限额了,包括CPU、内存,还可以限定Pod、RC、service的数量。在多租户隔离方面Kubernetes功能比较全面。

(3)认证和授权

Kubernetes对API的访问提供了认证、授权、以及准入控制确保系统的安全可靠。认证方式主要分为双向认证、Token认证和Base认证等方式,只要其中任意一个方式认证通过即可。在授权方面,通过API Server实现不同的授权策略。在准入控制方面,通过准入控制列表处理,通过后才会处理API请求。在认证和授权方面,Kubernetes的功能比较全面。

(4)服务高可用

作为分布式集群的容器编排工具,Kubernetes支持通过健康检查接口判断服务当前的状态,健康检查的方式支持TCP、HTTP、COMMAND三种。同时,能够根据健康检查的结果,使服务的健康容器实例数量自动恢复至请求实例数。在具体实现上,Kubernetes能够检查容器是否正常运行(基于Liveness Probe)以及应用是否已经就绪(基于Readiness Probe),提供灵活的方式进行检查。

(5)资源限额

为了防止多租户的资源抢占,Kubernetes提供了资源额度限制功能。Kubernetes通过API对象Resource Quota(资源配额)来实现资源限额管理,不仅可以作用于CPU和內存,另外还可以限制比如创建Pod的总数目、Service总数目、RC总数目等,功能比较全面。

2、Mesos

(1)已暴露漏洞

近三年Mesos共暴露两个中危安全漏洞,漏洞主要是访问路径为空或URL解码失败导致的进程崩溃。相较Kubernetes,Mesos近三年暴露的漏洞更少。

(2)多租户隔离

在Mesos中,通过从节点(Slave)隔离资源并执行容器任务,提供进程控制组(cgroups)和Linux容器工具(LXC)解决隔离问题。在多租户隔离方面,Mesos+Marahton提供的功能不如Kubernetes丰富。

(3)认证和授权

Mesos集群中,默认使用SASL框架来进行用户认证,也可以通过自定义的认证模块来修改认证方式。在权限方面,通过角色(Role)实现将框架和资源进行分组,同时为保证角色的使用,提供了ACL和认证/授权。另外,还可以通过给每个角色配置权重,使不同的角色对于资源的分配有不同的优先权。在认证和授权方面,Mesos+Marahton相较Kubernetes更加复杂。

(4)服务高可用

作为分布式集群工具, Marathon同样支持通过健康检查接口判断服务当前的状态。同时,能够根据健康检查的结果,使服务的健康容器实例数量自动恢复至请求实例数。但在具体实现上Marathon通过运行实例数和请求实例数的差异判断状态是否正常,在使用上不如Kubernetes灵活方便。

(5)资源限额

在Marathon中,使用Linux中的cgroup进行CPU和内存资源使用的控制,在能力上不如Kubernetes丰富。

Kubernetes:

Mesos:

十一、可维护性

在可维护性方面,容器编排工具作为管理工具,需为使用平台的对象提供可视化的管理、运维方面的能力,包括集群的管理,监控告警,以及日志审计等方面的能力。

在集群管理方面,主要进行集群资源的统一管理,创建和管理分区并配置分区资源限制,向集群添加/移除主机、存储资源等。在镜像管理方面,需支持通过人工干预或基于容器构建镜像版本,修改、删除平台中已存在的容器镜像。同时,支持公共镜像,支持镜像仓库物理隔离、支持同一镜像名下包含多个版本,支持镜像在不同的镜像仓库的同步和复制,支持镜像备份等功能。

在监控告警方面,应支持集群资源的可视化管理(如应用总数、集群总数、模板总数、镜像总数等),支持集群资源的配额限制,支持集群中容器组的基本信息,节点状态(如容器状态、应用状态、集群状态)的监控。同时,能够对CPU使用、内存使用、磁盘占用、网络流入/流出流量、连接数、系统负载、存活状态等信息进行监控。并且能够根据监控信息,关联自动伸缩策略,服务指标采集能根据服务和容器粒度查询,进行多维度告警去重和短信邮件通知等。

在日志管理方面,应支持日志保存、访问和聚合分析,支持关键词或时间维度综合查询,支持多租户多集群统一日志采集等。

表5可维护性对比

可以看到,Kubernetes和Mesos均能够提供很好的可视化维护和使用的能力。但在具体实现上,Kubernetes和Mesos在集群、镜像、监控告警和日志等方面均采用已有的开源组件进行集成和定制,如镜像仓库开源组件Habor、开源社区中的Registry等,监控告警方案如开源Prometheus、Zabbix或自行定制监控组件等,日志组件如Fluented、ELK等。

Kubernetes:

Mesos:

十二、兼容能力

容器编排工具的兼容性主要指对基础环境支持的能力和与第三方进行对接、集成的能力。

表6 兼容性对比

1、Kubernetes

在基础环境方面,Kubernetes支持公有云、私有云、物理机、以及虚拟机等环境。在集成方面,支持从代码开发、本地构建、单元测试、版本控制、持续构建、部署到测试环境、部署到预生产/UAT环境、部署到生产环境的持续集成。并以可视化的流程,构建开发测试流水线,实现编译、集成、打包、测试和发布的自动化。在具体实现上,CI/CD或可视化流水线,通常通过开源组件例如Jenkins或定制相关组件实现。

2、Mesos

在基础环境方面,Mesos+Marathon同样支持公有云、私有云、物理机、以及虚拟机等环境。同样具备持续构建/持续集成、可视化、流水线等能能力,但在具体实现上,需要进行更多的研发定制和集成。

另外,Mesos还能够使用在数据中心资源管理、大数据资源调度等领域,支持众多框架和异构环境,从而提高集群资源的利用率。

Kubernetes:

Mesos:

十三、易用能力

由于Kubernetes和Mesos+Marathon功能架构和功能实现上的不同,导致了两者在使用方面也有较大的差异。

1、Kubernetes

从容器编排工具的模型设计可以看到,Kubernetes设计了一种抽象模型,进行云平台主机上容器化应用的部署、规划、更新和维护,具备丰富的容器编排功能,提供了很方便的方式进行动态调整部署,但需要一定的学习成本和应用迁移成本。

2、Mesos

Mesos提供了一种插件式的架构,具备良好的架构扩展能力,使用方式更加灵活,但由于许多功能需要借助其他框架实现,如Chronos等,需要企业结合应用情况进行集成和定制,对企业的集成能力和定制化能力要求更高。另一方面,框架的集成和定制,也增加了Mesos使用的复杂程度。

Kubernetes:

Mesos:

十四、总结

根据上述对Kubernetes和Mesos的评测对比,两者都提供了容器集群的管理方案,并且都已经在业界广泛使用,对比总结情况如下图所示。


图5 Kubernetes、Mesos总结对比

Kubernetes和Mesos在容器编排的实现方式有差异,各自定位也有所不同。在容器编排领域,Kubernetes的社区活跃程度更高,也具备比Mesos+Marathon更强的容器编排能力,越来越多的IT服务企业参与其中并提供相关服务。Mesos作为一个成熟的架构,在数据中心级的资源共享方面具备更多优势,在容器编排方案上能够提供基础的管理能力,但应用于企业需进行框架定制、集成和优化。总体来看,开源软件Kubernetes相比Mesos更加成熟。

另外,在本次评测过程中,我们同时评测了基于Kubernetes的开源软件Openshift和商业软件A。开源软件Openshift和商业软件A均基于Kubernetes提供了应用开发、测试、部署、运维等各项核心服务,能够满足企业容器管理、容器编排和DevOps等方面的需求。

Openshift在Kubernetes的基础上进行了PaaS服务的整合,提供了丰富的开发语言、开发框架、数据库和中间件的支持。在模型设计方面,Openshift增加了路由器(Router)、路由(Route)等对象,并提供基于Open vSwitch(OVS)的容器网络方案。在应用管理和维护方面,Openshift提供基于Router的灰度发布、流量分配、节点拓扑关系、运行状态监控等功能,帮助用户提升开发、测试、部署、运维的自动化程度。

商业软件A在开源版本的基础上,增加了负载均衡管理、应用模板管理、资源监控与日志管理,以及构建了源代码管理、持续构建、持续集成与交付流水线,为应用提供自动化运维管理,提高研发效率和运维效率。此外,商业软件A还能够结合企业实际情况提供细粒度的权限控制及资源管理,更方便的流程管理与应用的迁移。

总体来看,Openshift在功能上更加丰富,商业软件A能够提供更多的个性化服务。


标签:混合云 

LecVideo