DevOps Kubernetes、Swarm、Mesos 最新版本功能比较

laofo · 发布于 2016年8月23日 · 196 次阅读
4

Kubernetes,Docker Swarm,Mesos作为时下流行切靠谱的容器框架受到了广大开源爱好者和企业的关注和支持。面对用户需求不断的升级和自身产品不断的改进更新,其功能愈发趋于完善,迭代版本也不断的发布。

新版本概述

Kubernetes作为来自 Google 云平台的开源容器集群管理系统,已经更新到了1.3版本。其基于 Docker 构建一个容器的调度服务。该系统可以自动在一个容器集群中选择一个工作容器供使用,其核心概念是 Container Pod。

新发布的Docker引擎1.1.2包含Swarm模式,在这种模式下对一组Docker引擎进行本机管理,这组引擎称为一个Swarm。内置编排系统,称为SwarmKit。使用DockerCLI可以创建一个Swarm集群,给这个集群部署应用服务,并对集群行为进行管理。

前不久刚刚发布的Mesos1.0.0首先是改进了与docker的集成方式,弃用了docker daemon;其次,新版本大力推进解决了借口规范化问题,新的HTTP API式的开发者能够更容易的开发Mesos框架;最后为了更好的满足企业用户的多租户,安全,审计等需求,新版本提供了更细粒度的授权验证机制。

高可用共享配置和服务发现方面

Kubernetes继续采用熟悉的etcd Active-Standby模式;Docker Swarm支持consul,etcd和ZooKeeper;Mesos则继续选择经典ZooKeeper。

值得注意的是,现在Mesos仅用ZooKeeper进行Leader的选举,并没有用它进行数据的共享。在Mesos中有一个Replicated Log模块,负责进行多个master之间的数据共享,同步等。

为了使Mesos的高可用不依赖第三发的集群,社区正在考虑用Replicated log替代第三方集群进行Leader选举。参考MESOS-3574项目。这种设计可以理解为大集群+小集群,小集群也就是ZooKeeper/etcd/consul集群,它们为大集群服务,比如提供Leader的选举,为大集群提供配置数据的存储和服务发现等功能。在一个复杂的系统中,这个小集群可以为系统的多个服务组建同时提供服务。

容器化技术方面

Kubernetes除支持主流Docker容器(需单独安装Docker组件)以外也支持CoreOS rkt等容器技术;

Docker Swarm原生支持Docker,安装Docker后开启Swarm模式即可使用;

Mesos上,Docker Containerize的力度降低,Mesos Containerize的研发和功能完善显著提升,Mesos 1.0.0的agent无需安装docker程序也可以运行docker容器,或者说,mesos可以自己解析docker镜像来启动容器。

(虽然在docker1.11之后,containerd的引入已经解决了docker daemon重启带来的容器重启问题,但是宿主机的init系统仍然无法直接跟踪进程的生命周期。)另外,Mesos Containerize 对AppC和OCI也有支持。

集群管理,编排和使用和分散设计方面

Kubernetes继续通过经典特色的Pods(协作容器集合),RC,Services,Labels,Proxy等各种组件来管理组建容器集群。

(增加了pods-per-core参数,运行在kubelet节点上每核CPU上最大的POD数量,如果配置了这个参数,那么这个kubelet节点上运行的POD数量不能超过这个参数值,这个参数可以设置成0,表示取消最大的POD数量限制。)

Docker Swarm新增了编排功能,其集群管理与Docker引擎相结合,使用Docker引擎CLI便可创建一个Docker引擎的Swarm,在这个集群中进行应用服务的部署。对于Swarm集群的创建和管理,无需其他额外的编排软件。

Mesos使用Apache下开源分布式资源管理框架,一级调度由Mesos master(AS)管理各slave节点,下发task。二级调度由Framework组件组成,分为调度器(Scheduler),执行器(Executor),另外,Docker Swarm使用Docker引擎,其不是在部署时处理节点角色之间的差异化内容,而是在运行时处理特殊化内容。通过使用Docker引擎可以部署管理节点和工作节点。这就意味着你可从一个单一的磁盘映像上创建一个完整的Swarm集群。

面向服务的组件模式方面

Kubernetes可以在应用模版配置中指定副本数量,服务要求(IO优先,性能优先等),资源使用区间,标签(Labels等)来匹配特定要求达到预期状态;

Docker Swarm利用Docker引擎运用描述性方式,让用户在应用堆栈上定义各种服务的理想状态。例如描述一个应用:包含一个配有信息排队服务的Web前段服务和一个数据库后端;

Mesos则通过Exector结合Isolator(CGroups,GPU,Memory,Disk等)在process(容器)启动前,启动后,销毁后等各种时间点调整资源使用。

共收到 2 条回复
4
laofo · #1 · 2016年8月23日

Kubernetes、Docker Swarm、Mesos作为时下流行的容器框架受到了广大开源爱好者和企业的关注。面对用户需求不断的升级和自身产品不断的改进更新,其功能愈发趋于完善,迭代版本也不断的发布。因为篇幅过长,分上下两篇推送,本文为下篇。

  1. 弹性缩放和理想状态的调整

Kubernetes通过RC设定Pods数量,其管理器可以自动保持和维持以确保服务的高可用性。Kubernetes Master会时刻检查集群状态,对与既定规则不符的pod进行调整。如,既定当前3份pods一簇运行当前服务,其中一个pod因为某些原因失败或停止,kubernetes管理器会尝试指定的其它worker节点上新规重启pod。针对实时使用的资源大小也会监控,调整并分配最佳数量(在预定上下限内)。

Docker Swarm对于每项服务,你都可以明确想要运行的任务数,当你增加或减少任务数时,Swarm管理器可自动增加或删除任务,以保持理想状态。其管理节点持续对集群状态进行监控,并对实际状态和你明确的理想状态之间的差异进行调整。例如,当你创建一个服务来运行一个容器的10个副本,托管其中两个副本的工作机崩溃时,管理器将创建两个新的副本,代替之前崩溃的两个。另外,管理器会将新的副本分配给正在运行且可用的工作机。

Mesos通过Marathon管控。Mesos master给slave节点分配任务,如果需要调整,它就会通知marathon。Mesos slave负责运行容器,并且报告当前节点的资源使用情况。

  1. 网络方面

Kubernetes官方支持Flannel、Calico、Romana、Contiv等众多组网方案。保证每一个pod都拥有一个扁平化,共享网络空间的IP,通过该IP,pod就可以跨网络和其它物理机或pod进行通信。一个pod一个IP创建了一个干净,反向兼容的模型。在该模型中,从端口分配、网络、域名解析、服务发现、负载均衡、应用配置和迁移等角度,pod都能被看成虚拟机和物理机;

Docker Swarm使用多主机网络,保证可以针对用户的服务指定一个覆盖网。Swarm管理器初始化或更新应用时,它会自动将地址分配给覆盖网上的容器;

Mesos在1.0.0保证了对容器网格标准CNI的支持,CNI标准是多家网络厂商参与制定的容器网络标准,Mesos兼容了CNI标准,相当于间接的支持了VxLAN、DC/OS overlay、Calico、Weave、Flannel等多种网络技术。这是继容器IP功能后,Mesos的又一重要的网络功能。

  1. 服务发现和负载均衡

Kubernetes通过Services定义了由容器所发布的可被发现的服务/端口,以及外部代理通信。服务会映射端口到外部可访问的端口,而所映射的端口是跨多个节点的Pod内运行的容器的端口。也可利用nginx-ingress等外部负载均衡器。其服务内部均衡使用kube-proxy。

Docker Swarm管理节点给Swarm集群上的每项服务分配一个唯一的DNS名称以及负载均衡的运行容器。可通过嵌入Swarm的DNS服务器对集群上运行的各个容器进行查询。

Mesos则使用Mesos-DNS。Mesos上的应用和服务可以通过DNS的方式来发现对方。Mesos-DNS的特点是轻量、无状态,易于部署和维护。

  1. 安全方面

Kubernetes引入了RBAC(基于Role的访问管理控制)功能,该实现源于OpenShift项目。(该RBAC系统建立于Kubernetes资源之上,可以让角色、权限和关系动态作用于first-class的API交互,将之前Kubernetes版本的authZ设施中的静态平面文件放置于其后面。该RBAC功能被添加进了Kubernetes 1.3中,简化了针对不同企业群体、团队或者会计制度的关于多租户环境中的创建情况。)

Docker Swarm通过各个节点强制TLS相互授权和加密,从而确保自身与其他所有节点之间的通讯安全。可选择使用自签的根证书或自定义根CA证书。

Mesos在1.0.0中通过提供更细粒度的授权验证机制对此作出了响应。首先,在1.0.0中,Mesos的所有敏感数据入口都是经过SSL/TLS加密的;其次,Mesos管理员现在可以通过配置ACLs来限制用户只能在WebUI/API看到自己的任务了,而这就是企业用户的must-have要求;最后,Mesos也提供了完善的authorizer接口,企业用户可以通过该接口添加自己特有的安全策略。

  1. 滚动升级方面

三者都保持相同的功能,即升级时,可以将新老版本服务共存,逐步减少老版本数量增加新版本数量,直至全部更新。如果出错,可以回退到升级前的既定版本。

  1. GPU支持

三者都对NVIDA GPU有一定程度的支持,可是在调度的时候将NVIDA GPU作为资源进行调度。

  1. 社区优势和合作方面

Kubernets基于Google数十年运行大规模容器的经验,RedHat多年部署和管理企业中的开源软件的经验,CoreOS的敏捷开发经验和很多其他组织和社区成员的优势。亦有全球级大技术公司的支持,比如微软、华为等。

Docker Swarm属于Docker自身设计,研发和维护;

Mesos作为老牌技术也有着广泛的支持团队,如IBM,Microsoft,Nvidia。其中,IBM已经成为紧随Mesosphere之后的第二大Mesos代码贡献厂商,未来IBM会在Mesos的optimistic offers,资源分配优化和兼容POWER平台方面投入力量。同时,Mesos也推出了Mesos运行在Micrisoft上的试验功能。

  1. 其他

Kubernetes在v1.3中增加了vsphere_volume卷管理。通过结构体VSphereConfig可以看出来,kubernetes的vsphere卷管理插件可以直接连接到VMware vCenter上。如果kubernetes是部署在vsphere上面的虚拟机里面,那么可以通过给虚拟机挂载硬盘的方式来给kubernetes添加卷。

Mesos近期内在做的有关容器的开发。第一个是Nested Container,当我们跑容器的时候,可以在容器里面将它分割成更小的容器。当大容器里面可以管理一定资源boundary的时候,重新再贴上更小的容器,这个对于跑CI/CD、Jenkins在Mesos上时很有用,每一个Jenkins都可以有自己的一个资源上限,它要跑十个CI job,Mesos就把已经有的资源给它们,但是它们确保不会跑出Mesos给的资源上限。

VM support就是Mesos可以不跑容器,直接跑VM,对于比较传统的一些IT企业来说,他们还没有办法从OpenStack或者从VM里面直接跳到容器里面,所以这是非常重要的一个功能。

96
nearness · #2 · 2016年9月06日

最近正在做docker方面的预研,分析很全很到位。感谢

需要 登录 后方可回复, 如果你还没有账号请点击这里 注册