![](http://www.ctiforum.com/uploadfile/2019/0723/20190723103030467.jpg)
复杂性会要了Kubernetes的命吗?
Kubernetes不会是因自身重量而崩溃的第一个大型开源项目,但支持者称Kubernetes的情况不一样。
Kubernetes目前可能是开源人士的宠儿,但此前的Hadoop同样一度备受推崇。Hadoop最终寿终正寝,就因为用起来特别难。虽说Kubernetes取得了长足进步,但正如第一资本公司(Capital One)的Bernard Golden所说,“运作起来仍然不是件轻松愉快的事儿”。这么说已很委婉了,有人毫不客气地称Kubernetes“体验让人讨厌得要命”。
Kubernetes正迎来类似Hadoop的结局吗?
可能不是。Hadoop日益变得更复杂,但Kubernetes变得越来越容易。虽然Kubernetes本身可能永远不会“很容易”,但其复杂性与Hadoop的复杂性大不一样,这为Kubernetes在未来几年仍是一种行业标准铺平了道路。
Hadoop,越来越复杂
不妨先来说说Hadoop。Apache Hadoop在大致相当于“MapReduce”时异常复杂。不过随着时间的推移,Hadoop在不断演变;虽然这种演变带来了功能更强大的选择,但那些选择数量激增。它们也未必很容易协同运行。正如Tom Barber所说:“Hadoop实际上做什么? MapReduce被Spark取代,Spark又被其他东西取代,依次类推。当然你可以插入很多组件,但它依然很笨拙。”
为何笨拙?VMware的Jared Rosoff精辟地分析了这个问题:“Hadoop的复杂性来自这个事实,即典型的Hadoop环境基本上由几十个独立而复杂的系统组成,这些系统有着不同的生命周期和管理模型。”Flume、Chukwa、Hive、Pig和ZooKeeper等等。这些名字听起来不错,但让它们协同运行起来如同噩梦。Host Analytics的首席执行官Dave Kellogg认为,Hadoop是“一整套复杂的解决方案”,所有这种复杂性来源于用户。
然而,与Kubernetes最不一样的是用于扩展Hadoop的模型。正如Rosoff特别指出,“Hadoop并没有考虑人们会如何扩展它,结果出现的生态系统包括不相兼容的扩展件。”他继续说,与之相反,“Kubernetes做得很好的一点是,精心设计了扩展Kubernetes的方式。容器运行时接口(CRI)/容器存储接口(CSI)/容器网络接口(CNI),这些operator确保随着更多的供应商加入进来,它们在以合理有序的方式加入。”换句话说,不像Hadoop及其不兼容的扩展件,“Kubernetes在拥有众多operator后仍然是Kubernetes。”
Kubernetes,可控的复杂性
这倒不是说Kubernetes很简单。作为Kubernetes的开发者之一,Heptio(VMware)的Joe Beda完全有资格宣称“Kubernetes是个复杂的系统。”他继续说,这种复杂性多少必不可少,因为“它做了很多事,带来了新的抽象。”每个人一直都需要所有这些抽象(和花哨的附加功能)吗?并非如此。“我确信许多使用Kubernetes的人使用较简单的技术也能应付过去。”
Beda强调,不过对于那些需要Kubernetes的人来说,Kubernetes未必比人们已经熟悉的其他系统来得复杂。可能一个是“新的”复杂系统,另一个是“旧而舒适”的复杂系统:
作为工程师,我们往往低估我们自己带来的复杂性,高估我们需要学习的复杂性。如果你使用Jenkins、Bash、Puppet/Chef/Salt/Ansible、AWS和Terraform等创建一套复杂的部署系统,最终会得到你感到舒适的独特的复杂性系统。它有机地生长,因此不觉得复杂。
但是请外人帮助开发这样一个有机生长的系统很困难。他们可能知道一些工具,但你把它们组合起来的方式却是独一无二的。窃以为,这就是Kubernetes增值的地方。Kubernetes提供了解决一组常见问题的一组抽象。随着人们围绕那些问题加深理解、增强技能,他们在更多的情况下会更有成效。仍面临陡峭的学习曲线!但是这种技能组合现在很宝贵,在诸多环境、项目和工作之间可以移植。
明白要点了吗?与存在于你可能在X公司构建的某个部署系统中的复杂性不同,你在Kubernetes方面遇到的复杂性可以跟随你从一个公司到另一个公司。这么一来,它的复杂性变得比其他这些系统低得多,因为知识可以移植。换句话说,“学习一次,到处适用。”
学习一次,到处适用
反过来,这种学习比Hadoop要容易得多。与Hadoop不同,Kubernetes是一个更容易熟悉起来的系统,这一方面是由于它可以运行的场景。正如Gareth Rushgrove所写,“你可以在本地运行Kubernetes,比其他类似的例子(Docker Desktop、Kind和MicroK8s)要容易得多。降低准入门槛使人们更容易熟悉起来,这降低了感知的复杂性。”
正如云原生计算基金会的首席技术官Chris Aniszczyk强调的那样,这点也有所帮助:虽然“分布式系统本质上很复杂,但Kubernetes的优势在于,全球各大云提供商和多家供应商都提供Kubernetes合规/认证的托管版本(无分支),帮助大多数用户应对大规模管理的复杂性。”尽管如此,Tamal Saha表示,可能重要的问题是“从Kubernetes试图解决的问题来看,Kubernetes是否很复杂。”对他来说,答案是否定的。
“Kubernetes会沦为Hadoop吗?”这个问题的答案也是否定的。Kubernetes已经过了那个阶段。是的,正如一位评论人士所说,Kubernetes是“一种复杂的编排工具,并不适用于所有使用场景。就像我们行业的众多工具一样,学习、使用和理解也需要花时间。‘几小时’是不够的。”这是解决复杂问题的复杂工具。正如Beda所说,但存在“有意的复杂性和偶发的复杂性”。Hadoop饱受后者之苦,而Kubernetes面临的是前者。
由于诸如此类的原因,我们会看到Kubernetes继续作为容器编排领域的行业标准而蓬勃发展。