K8s VS Docker Swarm VS Apache Mesos
在容器编排领域中,Kubernetes、Docker Swarm和Apache Mesos都有一席之地。
本文将尝试对Kubernetes、Docker Swarm和Apache
Mesos进行高层次的描述和对比,从而发现它们之间的一些显著的异同点。
容器编排引擎
虽然定义各不相同,但Kubernetes、Docker和Swarm都归类为容器编排引擎(COEs)的DevOps基础设施管理工具。COEs在资源池和运行在这些资源池上的应用容器之间提供了一个抽象层。
除了容器,COEs解决的主要问题是如何将云或数据中心中的多个离散资源组合成一个池,并将各种应用部署到这个池上。这些应用涵盖了从简单的三层网络架构到大规模的数据摄取和处理,以及介于两者之间的所有处理操作。
这些工具中的每一个都提供了不同的功能集,并且在其成熟度、学习曲线和易用性方面各不相同。它们可以共享的一些高级功能有:
容器调度,包括执行诸如启动和停止容器等功能;在池化资源中分配容器;恢复失败的容器;将容器从失败的主机重新平衡到健康的主机,以及通过容器手动或自动地扩展应用程序。
应用程序和容器或协调系统本身的高可用性。
健康检查,用于确定容器或应用的健康状况。
服务发现,用于确定分布式计算架构中各种服务在网络上的位置。
负载均衡请求,无论是集群内部产生的请求,还是外部客户端的请求。
将各种类型(网络、本地)的存储附加到集群中的容器上。
Kubernetes容器编排能力
Kubernetes(又称
“k8s”)最早发布于2014年6月,用Go语言编写。从古希腊语翻译过来,Kubernetes这个词的意思是
“舵手”。该项目来自谷歌并由其开源,集合了谷歌大规模运行容器的经验。
在功能方面,是本文所研究的三个方案中集成度最高的一个。Kubernetes的应用非常广泛,它背后有一个庞大的社区。谷歌将Kubernetes用于自己的容器即服务(CaaS)产品平台,称为谷歌容器引擎(GKE)。还有一些其他平台支持Kubernetes,包括红帽OpenShift和微软Azure。
Docker是目前Kubernetes支持的最普遍的容器引擎,但也支持CoreOS rkt(读作
“火箭”)。
Kubernetes使用基于YAML的部署模型。
除了在主机上调度容器外,Kubernetes还提供了许多其他功能。
主要功能包括内置的自动伸缩、负载均衡、卷管理和密钥管理。此外,还有一个Web
UI来帮助管理和排除集群的故障。由于包含了这些功能,Kubernetes比Swarm或Mesos需要更少的第三方软件。
Kubernetes与Swarm和Mesos的区别还在于
“pod”的概念,在Kubernetes的术语中,pod是一组容器,它们被安排在一起组成一个
“服务”。
虽然可以将Kubernetes主控配置为高可用性集群,但这并不像单节点主控安装那样得到很好的支持,是Kubernetes的高级用例。
Kubernetes的学习曲线有些陡峭,可能比Swarm需要花费更多精力来配置。部分由于其更紧密的功能集成,Kubernetes有时被认为比其他两个编排引擎更
“自以为是
Swarm容器编排能力
Docker
Swarm是Docker的原生容器编排引擎。最初发布于2015年11月,也是用Go编写的。Swarmkit是1.12版本起包含的Swarm的Docker原生版本,是想要使用Swarm的Docker的推荐版本。
Swarm与Docker
API紧密集成,使其非常适合与Docker一起使用。适用于单主机docker集群的相同基元也可用于Swarm。这可以简化容器基础架构的管理,因为不需要配置单独的编排引擎,也不需要重新学习Docker概念来使用Swarm。
与Kubernetes一样,Swarm也有一个基于YAML的部署模型,使用Docker
Compose。其他值得注意的功能包括集群的自动愈合、使用DNS的叠加网络、通过使用多个主站的高可用性,以及使用证书颁发机构颁发的TLS来保证网络安全。
截至目前,Swarm还不支持本地自动扩展或外部负载平衡。必须手动或通过第三方解决方案进行扩展。沿着同样的思路,Swarm包含了入口负载均衡,但外部负载均衡将通过使用第三方负载均衡器(如AWS
ELB)来完成。
另外值得注意的是,Swarm缺乏一个Web界面。
Mesos容器编排能力
Apache Mesos
1.0版本是在2016年7月发布的,但它的根源可以一直追溯到2009年,最初是由加州大学伯克利分校的博士生开发的。与Swarm和Kubernetes不同,Mesos是用C++编写的。
Mesos与这里提到的前两者有些不同,它更多的是采取分布式的方式来管理数据中心和云资源。Mesos可以有多个主站,这些主站使用Zookeeper来跟踪主站之间的集群状态,形成一个高可用性的集群。
其他容器管理框架可以运行在Mesos之上,包括Kubernetes、Apache
Aurora、Chronos和Mesosphere Marathon。此外,分布式数据中心操作系统Mesosphere
DC/OS也是基于Apache Mesos的。
这意味着Mesos采用了更加模块化的方式来管理容器,让用户在应用的类型和运行规模上有更大的灵活性。
Mesos可以扩展到数万个节点,Twitter、Airbnb、Yelp和eBay等公司都在使用它。苹果甚至有自己基于Mesos的专有框架,名为Jarvis,用于支持Siri。
值得一提的是,Mesos中的一些功能是支持多种类型的容器引擎,包括Docker和自己的
“Containerizer”,以及一个Web UI,并能够在多种操作系统上运行,包括Linux、OS
X,甚至Windows。
由于其复杂性和灵活性,Mesos的学习曲线比Docker
Swarm更陡峭。但是,同样的灵活性和复杂性也是让Twitter和Airbnb等公司使用Mesos来管理其大规模应用。
根据你的需求选择合适的COE
正如你所看到的,集群管理和相关工具的主题可以迅速深化。每种方案都有自己的优势和弱点,对自己的用例有一个扎实的了解将决定哪种方案最适合你的应用实施。
说到这里,如果你只是想启动和运行并测试使用一个编排引擎,那么Docker
Swarm可能是一个不错的选择。当你准备好进一步深入研究这个主题,或者可能部署一些倾向于工业级的东西时,可以看看Kubernetes。如果灵活性和大规模是你的目标,那么可以考虑Apache
Mesos。
原创文章,作者:奋斗,如若转载,请注明出处:https://blog.ytso.com/notes/294481.html