《Kubernetes:谷歌级容器集群管理的选择》
今天,我们将继续为大家带来由才云科技(Caicloud)CEO 张鑫及才云科技(Caicloud)解决方案架构师王章贵共同撰写的技术文章。相信对于需要在 Kubernetes、Swarm、Mesos 之间做出选择的用户可以提供一些参考建议。
Kubernetes 是一个“含着金钥匙出世”的容器编排工具,Google 的15年全球超大量型生产基础设施服务 Borg 的结晶。从 Cgroups 到 Libconatiner 再到 Kubernetes,Google 一直是容器领域的“领路人”。Google 这些年借助容器与容器编排技术在性能、资源利用和整体效率方面取得了震撼寰宇的现象级收益。
在过去15年间,Google 利用 Kubernetes 架构和设计思想成功将其所有应用(搜索、地图、视频、金融、社交、人工智能)运行在超过100万台服务器、跨超过80个数据中心,每周运行20亿个容器。
Mesos 起初由来自几位伯克利大学的 Google 实习生在2009提出并研发,2011年成为 Apache 孵化项目。
Docker Swarm 由初创公司 Docker 2014年年底开源的 Docker 容器管理工具,Docker 公司原名为 Dotcloud,因 Docker 项目开源后名噪一时,公司更名为 Docker,并将原有的服务出售给一家德国公司。
从历史可以看出,Kubernetes 是唯一具有超过10年大规模容器生产使用的技术经验和积淀的开源项目。
Kubernetes 作为新一代集群管里系统,采用了非常优雅的软件工程设计,通过模块化、微服务的方式,实现模块化设计,使得用户可以根据自己的使用场景,通过灵活插拔的方式,采用自定义的网络、存储、调度、监控、日志等模块。
此外,Kubernetes 项目和社区秉承着开源、开放的心态,可以支持多种容器、网络、存储实施方案,这与 Docker Swarm 的自闭性形成了鲜明的对比和优势。
从功能点上来讲,Docker Swarm 最为简单,只实现了容器的基本编排功能,例如调度、编排、跨主机通信等。
此外,Mesos 注重资源调度,而 Kubernetes 则更是面向分布式应用、微服务治理、和大规模集群管理(其中融入了谷歌独有的“集群管理不仅仅是资源调度和编排”的理念)。举例来说,Kubernetes 提供了如下在大规模生产系统所需的核心功能,而这些功能在 Swarm 和 Mesos 中缺失:
1. 架构设计
1.1 Kubernetes
Google 设计 Kubernetes 基于两个非常重要的经验:一是 Google 多年来运行大型分布式系统的经验,二是支撑快速更新、敏捷迭代的云原生应用的经验。前者保证了 Kubernetes 平台本身的稳定性和扩展性,后者保证了 Kubernetes 平台对其使用者(运维人员/开发人员)的有效性。
Kubernetes 在内部组件结构上分为:
Pod
Service
Kube Proxy
Etcd
API Server
Scheduler
Controller Manager
1.2 Docker Swarm
Docker Swarm 基于 Docker 提供的原生集群能力,将一组 Docker 引擎变成一个虚拟的 Docker 引擎。Swarm 使用标准的 Docker API, 使用正常的 Docker 命令来运行 Docker 容器,也会选择一个适合的节点来运行容器
Docker Swarm 在内部组件结构上分为:
Swarm Manager
Swarm Agent
1.3 Apache Mesos
Apache Mesos 是一个大规模集群的开源管理平台,集群量级可以从几百台到几千台,Mesos 能支持不同类型的任务框架,比如计划任务、长时间运行的任务等等,即 Mesos 的架构设计是解决高可用和弹性等问题,架构图如下:
Apache Mesos 在内部组件结构上分为:
Mesos Master
Mesos Agent Node
Zookeeper
Frameworks
Mesos 可有多个 Framework 同时运行在同一个 Mesos 管理的资源上,用户提交任务其实是与 Framework 交互并不是 Mesos,从上面的架构图中可以看出,Mesos 需要与 Marathon 一同实现容器编排工具的功能,Marathon 做为 Scheduler,通过向 Zookeeper 获取到真实 Mesos Master 信息,并向 Mesos Master 提交任务,当 Marathon 与 Mesos Master 同是 Ready 的状态,才能开始编排容器。
Marathon 被设计用于启动、监控长时运行的应用,包括云原生应用,客户端通过 Marathon Rest API 与 Marathon 交互。
2. 功能列表
结论
Kubernetes 与 Mesos+Maratho 和 Docker Swarm 三类开源项目在容器编排需要的功能点上看,Mesos+Marathon 与 Docker Swarm 在很多功能支持程度不如 Kubernetes,需用户做出妥协。