今天我们来聊聊,但不从技术细节角度,聊为什么容器、Kubernetes是值得使用和整合到你的项目堆栈中的。我们的目标是给你们提供一个关于应该如何思考你的底层构架以及将它可视化问题,从这个角度来谈我们的话题:Kubernetes为什么重要?
Kubernetes旨在作为你容器的管理层。然而,它的重点是无缝提供给你的应用程序真实实在的需要,满足你的应用程序所依赖的需要。举个例子,这些应用所需就是由Kubernetes提供的:访问与供应商无关的数据卷、负载均衡、冗余控制、弹性扩容、滚动更新以及配置密钥管理。
有了例如上述的性能和特点,再加上由Docker和容器本身运行时提供的打包件,管理应用程序的实践(不是servers)才开始通过使用Kubernetes展开。
Kubernetes的开始起源于谷歌,它在谷歌系统中有自己的起源:Borg和Omega。许多基于这些系统的设计和安装的相同概念,已经作为一个新的表现形式渗入Kubernetes,这个表现形式包括现今的标准,合并了很多谷歌在过去十年里吸取到的实践经验教训。
Kubernetes不是像很多人开场白讲得那样,是Borg或者Omega的“开源”版本;而是一个谷歌花了很多力气来为你的工作和服务创建的新管理工具。Kubernetes在谷歌是利用许多年的架构和实践经验开始的,但是因为它是开源项目,而且已经证明它可以真正简化开发、操作和管理职责,所以自从它的初始公开版本在2014年6月提交后,就积累了越来越多的代码提交贡献。
这是Kubernetes自从2015年以来收到的代码提交数量的一个截图:
这些图简短地描述了一个真实的、合作的Kubernetes技术社区。
就像我们之前提到过的,有很多人以个人名义或者是公司名义加入到Kubernentes。然而,真正的问题是,你有没有像最初开始的那样,按照谷歌的方式来运行你的应用程序和服务呢?
我们现在了解到的是,Kubernetes不仅仅只是一个容器管理系统,它也从内部查看了谷歌为实践每一个服务和产品:从Gmail、搜索、地图到GCE(服务产品清单还在持续增长),是如何运行他们的基础设施的。
因此,Kubernetes也是运行谷歌的一种方式,所以本质上来说,你注册就是为了能够访问一组指定的设计原则,这组原则会让你的应用程序有效运作,像谷歌那样轻松建立和管理您的应用程序。这并不是说,底层系统例如OpenStack或者AWS处理IaaS资源,就不能用了,而是说这些系统都尽可能做到最好,而Kubernetes就是为带来你的应用程序所需要的一切而生。最终,融合Kubernetes会创建一个良好组件的结合。
所以,如果你正在为你的项目考虑Kubernetes,那么你必须信任项目所呈现的基础和范式,从Pod开始,然后剩下的concepts自然会跟过来。这将给用户非凡的组合功能和灵活性,Kubernetes本身的视野在重新定义你的应用程序是如何构建的上体现了辅助作用。
就像最近的关于Borg、Omega和Kubernetes的那篇论文里提到的细节(论文戳这里:Borg, Omega和Kubernetes:谷歌十几年来从这三个容器管理系统中得到的经验教训),Kubernetes帮助建立成套工具来辅助管理和缩放你的应用程序。
以下是Kubernetes如何让改进应用程序开发的方法:
原因是Kubrnetes是pod的常见使用模式实例,或者说是一个组件,是一个复杂应用程序中可以编写,运行以及被一个小团队全权负责管理功能的组件
甚至其它的Kubernetes旨在提高你的应用程序的组件,是建立在例如像ReplicationsSets,部署,服务之类的概念之上,因此,合并巩固所有的应用程序需求,业务政策以及团队,就变得简单,可以无缝衔接。你可以探测不同的Kubernetes的概念,不仅仅跟Pod互相作用,而且允许你为你的应用在《用户指南词汇表》里创建新功能。
Kubernetes也会通过吸引大量不同的任务角色来给你的公司构架提供帮助。
为了帮助大家理解Kubernetes大框架是如何运作,我们来展示的一些图,可以帮助大家更好的理解这个项目。
就像James Burker说的:
只有你知道自己去过哪里,你才会知道你想去往哪里
基于这个话,我们要考虑Kubernetes的鼻祖就是Borg以及它和Borg的极大渊源。从这句话出发,我们可以考虑该如何有组织的思考集群。
让我们先来看一些从Borg的论文里读到的情况,这不仅可以让我们一窥Borg是如何配置的,还可以让我们知道同样的模型是如何应用到Kubernetes上面的。
这里我们可以看到我们的首要云架构从上面看是怎么样的。
(跨数据中心的Borg部署)
如果我们进一步放大,我们可以检测到每个在数据中心的建设包括了至少一个Borg集群,它被分成了约10000个机器:
(图:Borg系统里的一个集群)
再进一步观察这个“细胞”,我们可以一睹控制台的组件和工人/Nodes的不同,以及Kubernetes Pods和Borg里十分相像,对于任何应用程序后者在整个过程中的服务,是唯一的原子单元。
(图:Borg系统里面一个数据中心里的一个cell,即Borg系统里一个集群)
可能就像你现在注意到的那样,这里有很多平行的Borg组件,还有现在存在于Kubernetes之中的,特别是1:1相对应的集群和Pods——这些相似点会让你在思考联合Kubernetes配置的时候更快想明白。
虽然Kubernetes目前还不能像Borg那样每个集群规模达到10000个节点,但是它最近已经优化到可以允许集群支持最多1000个Nodes和30000个pods,而且99%的API可以在1秒内呼叫回应,还有99%的Pods(已经有先拉下来的镜像)在5秒内开启——巨额收益代表规模增长10倍,据报道称根据谷歌的内部人士称,实际是增长将近14倍。
Kubernetes当然是为“黄金时间段”准备的,不仅是因为许多公司都在生产过程中使用,而且还单纯因为它的性能和规模。
我们希望你能够有更好的理解在现今的软件发展时代“Kubernents为什么重要”的原因,也希望你能够更好理解如何组织以及构架你的集群来使之整合。
去接受Kubernetes的规范,可能一开始看起来像是消防水龙带但本质上是深思熟虑之后的设计原则,这原则不仅为软件开发展示适当的方法考虑,还为每一个从ops到管理系统的不论重要还是辅助的应用程序组件都考虑到了。