今天,我们来了解一下 Kubernetes,了解为什么它是管理容器化应用程序的极佳选择。Kubernetes 的作用及其架构在这里我们不再赘述。接下来,我们将 Kubernetes 与其它容器管理工具进行对比。


关键


大规模管理容器并构建分布式应用程序基础结构需要构建一个庞大、复杂的基础设施。同时需要一个持续集成管道和一组物理服务器。您需要自动化系统管理,用于测试和验证容器镜像、启动和管理容器,执行滚动更新、回滚、网络自发现以及在短暂环境中管理持久服务的机制。

 

Kubernetes 是管理几个任务的重要组成部分(如下图所示)。它跟踪集群的状态,创建、管理网络规则,控制容器运行的节点,并监视容器。Kubernetes 有 API server,scheduler 和 controller 等功能。这就是它被称为“生产集群管理工具”的原因,因为 Kubernetes 好比是一个躁狂的管弦乐队的指挥,管理着乐队中进进出出的队员。



Docker Swarm


Docker Swarm 是 Docker 公司基于 SwarmKit 开发的解决方案,其中嵌入了 Docker Engine。在一个分布式应用程序环境中,计算元素必须分布的。Swarm 允许你在本地聚集 Docker 引擎。有了单个引擎,应用程序可以扩展得更快、更有效率。Swarm 能够扩容到50000个容器,1000个节点,同时当容器添加到集群的时候一点都不影响性能。


再加上,Swarm 的角色相当于 Docker API。任意可以操作 Docker Daemon 的工具都可以运用 Docker Swarm 在很多主机上进行扩容。这些包括了像 Flynn、Compose、Jenkins 和 Drone 之类的主机。


Swarm 也可以在后端运行 Mesos 或者 Kubernetes 的时候,被用来作为前端 Docker 客户端。Swarm 在它的核心内部是一个简单的系统:每个主机运行一个 Swarm 代理与管理员。管理员处理容器的操作和调度。你可以在高可用状态下运行,它使用的是 Consul,ZooKeeper 或者 etcd 来发送容错 events 到后端系统。


Docker Swarm 的一个优点就是,你可以用 Docker 命令来实施 Docker 网络、插件和数据卷。Swarm 管理员为 leader 选举创建一些 master 和特定的规定。这些条例实施在初级 master 故障的 event 里。Swarm 调度器以各种各样的过滤包为特色,也包括紧密性和节点标签。过滤包能够附加容器到底层节点,资源得到更好的利用,性能得到提升。

 

Apache Mesos


Apache Mesos 是一个数据中心调度程序,它通过使用诸如 Marathon 之类的框架来运行容器。Apache Mesos 也是一个集群管理工具,它着重于资源隔离,以及分布式网络或者在框架上分享应用程序,它的构想和开发源于加州大学伯克利分校。


作为一个开源系统,它具有给管理员分享资源、提升集群利用率的功能。目前使用 Apache Mesos 的公司包括:Apple,Airbnb 和 Twitter。


Apache Mesos 对于像 CPU,Disk 和 RAM 之类的计算元件来说是一个抽象层。它运行在每台机器上,其中一台机器被设计来作为 master 来运行其它机器。任意 Linux 程序都可以运行在 Mesos 上面。Mesos 的一个优点就是应对故障,它会提供额外的安全层。


Mesos 可以处理成千上万的主机,支持各种各样主机上的工作负载。在一个 Mesos 配置上,你可能会发现 Docker 和 Hadoop 并排运行。几年前,当系统支持 Twitter 的快速扩张的时候 Mesos 做到了可视化。


Mesos 使用代理节点系统来运行任务。代理发送一张可得资源清单到 master。在任意时刻,都会有成千上万的代理节点在进行操作。同样,master 也会分布任务到代理上。

 

Nomad


来自 Vagrant 和 Consul 的制造商 HashiCorp 的 Nomad 则主要用于调度定义在 Jobs 中的任务。它包括一个 Docker 驱动程序,可以将运行容器定义为任务。


Rancher 是一个与容器管理无关的系统,为管理应用程序提供了一个单一的界面。它支持 Mesos、Swarm、Kubernetes、原生系统,以及 Cattle。


Mesos 类似于 Kubernetes 


从管理容器的角度来说,Kubernetes 和其他群集系统没有任何区别。中央管理器公开 API,调度程序将工作负载放置在一组节点上,并且集群的状态存储在持久层中。如果将 Kubernetes 与 Mesos 进行比较,就会看到很多相似之处。Kubernetes 中,持久化层是用 etcd 代替,而 Mesos 则是通过 Zookeeper 来实现的。


其实还可以考虑像 OpenStack 和 CloudStack 这样的系统。想想他们的头节点上运行什么,在他们的工作节点上运行什么。他们如何保持状态?他们如何处理网络?如果你熟悉这些系统,Kubernetes 看起来就不一样了。


Kubernetes


Kubernetes 由谷歌开发,能够在许多不同的主机上管理容器化应用程序。它提供工具用于部署、弹性扩容和维护应用程序。Kubernetes 的开发者致力于保持其一直处于可访问、轻量级状态,并且易于使用。它可以在很多云环境中使用,包括私有云,公有云,多云端和混合云。Kubernetes 可以在fly上进行自我修复,它以自动复制,自动再启动,自动定位为特色。它可以被不断扩展,它的特点是 hookable,可插拔和模块化。它目前处于开源状态,谷歌在2014年首次宣布开发它,第一版在2015夏天的时候发布。除了最近几年的收获,Kubernetes 本身也是基于谷歌内部十多年使用容器技术的经验。

 

不同容器编排工具对比


Kubernetes 是一个全径且全面的容器管理平台,有动态调度、升级、自动伸缩和持续健康监测的功能。相较而言,Docker Swarm 只是从单个容器引擎提供一个集群系统的视角。


Mesos 和 Kubernetes 比较相似,因为他们都是被开发来解决在集群化环境中运行应用程序的问题。但 Mesos 在运行集群方面不如 Kubernetes,它重点放在调度功能上。Mesos 并不是为容器而生的,在容器流行之前就已经被开发出来,它的一些地方被修改来支持容器。

 

编排工具满足日益增长的需求


现今的企业需要能够满足他们需求,并且不会出现故障的冗余系统。另外,大数据和数据挖掘需要很多资源来过滤海量信息。除非这些公司适应和修改他们的登录信息系统的方式,不然他们面对更快、更灵活的竞争对手会很快失去阵地。在现在这个高速网络规模的时代,修复单个机器不是一个有效的解决方法。分布式系统允许你快速调度出故障的机器到垃圾箱,并且重新分配资源到健康集群的节点上。这就是管理Docker和其它容器集群重要性。


Kubernetes 使用容器组 pod,并且在同时被调度和部署。调度的基础配置是 pods,因为相比于系统,单个容器会被当成是基础单元。大部分的 pods 最多有5个容器,这就组成了一个 service。Pods 会按照需求在现实生活中创建和删除,或许修改。 


Kubernetes 是一系列宽松的、可以在很多不同的工作负载下操作的松散耦合原语。它很大程度上依赖于 Kubernetes API 的可扩展性。API 在内部使用,同样的,在外部被容器和拓展版本运行在系统中。目前,已经应用 Kubernetes 的项目和企业包括:Wikimedia Foundation 从本土设置转移到 Kubernetes;eBay 在 OpenStack 上运行 Kuberenetes 和容器;Viacom 用 Kubernetes 创建了一个先进的容器化基础设施。


真正使 Kubernetes 区别于别的容器管理工具的是,它的 fault-tolerance、self-discovery 和 scaling 功能,这些功能纯粹都是由 API 驱动的。


后续我们将讲解 Google 的 Borg 如何开启现代数据中心(btw,Kubernete 的起源就是 Google Borg)。


本文由“K8S 技术公社”编辑翻译,如若转载,请联系本公众号,查看原文,请点击“阅读原文”。







相关问题推荐