@levinzhang
2018-08-05T16:49:48.000000Z
字数 3067
阅读 610
Kubernetes有自己的各种模型和术语,导致很多初学者在刚刚接触Kubernetes时,理解起来有很多的困难和障碍。本文将其类比为主题公园,配合生动形象的图片,通俗易懂地阐述了Kubernetes的基础理念和各个组成部分。
本文最初发表于Daniel Lebrero 的个人站点,经原作者授权由InfoQ中文站翻译并分享。
Kubernetes(后文简称为k8s)有自己的一套抽象机制和术语,但是借助一些想象力,可以将这些抽象与我们更加熟悉的概念联系起来。
我本来希望将其类比为香肠工厂,但令人遗憾的是,k8s要比香肠更复杂,所以我只好将其类比为主题公园。
如下的内容都是基于谷歌Kubernetes引擎的,在其他的供应商中或者如果你自行运行k8s的话,有些概念可能会略有差异。
我们假设你是Kubenelius Fizzbuzz,一位刚刚毕业的MBA,擅长打包各种东西,你信心满满地要实现自己的想法:KubePark主题公园。
为了启动KubePark这个工程,你需要为其规划有趣的游乐设施。于是,你决定每个吸引游客的景点都只需要填写一个如下图所示的模板(k8s deployment)即可。
这张图片表明KubePark有三个1909旋转木马。
1909旋转木马是由两部分组成的:一个经典的旋转木马再加上一个棉花糖摊位。每个组成部分(k8s container)将会通过一个大箱子由无人机实现交付,一旦开箱就能立即组装好并运行起来。
每个景点都会使用栅栏包围起来,将其与其他景点隔离,这样某个景点的问题就不会传播到其他景点之中。但是景点各个组成部分则是不可分割的整体(k8s pod),所以不会有障碍物或防火墙阻碍组件之间的交流和移动,避免破坏游客的体验(在k8s中,如果你想要共享文件的话,还是需要一点配置的)。
具有栅栏就意味着我们需要为游客规划入口(k8s containerPort)。在1909旋转木马中,将会首先经过一个棉花糖的摊位:在体验旋转木马的时候,如果还有一个蓬松的棉花糖,那将会带来更有趣的体验。
模板还会指定大小(k8s内存)和电力(k8sCPU)的需求(k8s resources),并将1909旋转木马标记(k8s labels)为旋转木马(carousel)、适宜儿童(kid friendly)和经典(classic)的景点。稍后我们将会看到如何使用这些信息。
在模板背后,有些东西我们在图片上没有标注出来,你还需要为每个组成部分编写维护指令(k8s probes)。你的员工会定期按照这些指令判断是否有某些组成部分需要替换。如果需要替换的话,维护人员会将有问题的组成部分直接化为灰烬,无人机将会运来另外一个新的大箱子作为替换。所以,不要花费力气试图修复它们,我们只需要替换整个棉花糖摊点或旋转木马就可以。在替换期间,景点会对游客关闭,即便景点中某些组成部分对用户可用也会如此:1909旋转木马的体验包括必备的棉花糖和旋转木马,二者是不可分割的。
有趣的游乐设施规划完成之后,接下来就该开工建设这个公园了。
你需要与土地的拥有者签订一个租赁合同(k8s node pool):
这个包含了两个地块(k8s nodes),每个地块有其大小(k8s memory)和发电机(k8s CPU)。需要注意该协议并不是针对两个特定的地块的,而是多个具备该特征的地块,土地拥有者要负责寻找这些地块。借助现代的运输机制,这些地块并不一定要相邻。
土地拥有者还需要保护对地块的访问,这是通过在每个地块周围安装带刺的铁丝网来实现的。
你还可以勾选“free disaster insurance”(k8s auto repair))复选框:如果某个地块不可用的话,土地拥有者会将其替换为具有完全相同特质的另外一个地块。土地拥有者要负责查找并确定地块是否可用,并进行替换。
最后,协议提供的地块是带有标签的(同样是k8s label),这里的标签是“plains”和“Mediterranean weather”,即平整的地区并且是地中海气候。稍后我们将会看到如何使用该信息。
你的工作已经非常辛苦了,所以你会将公园建造的具体工作委托给一位控制人员。该员工会确保你在计划中规划的景点数量和类型始终都能无误地运转。
出乎意料的是,慷慨的土地拥有者还为你提供了控制交通管制塔(k8s cluster master),以便于让控制人员容身并且还会负责控制塔所需的维护和改善工作。这样我们要关心的事情就又少了一件!
现在有了控制塔,再加上建造游乐设施的计划,你的员工就可以决定在哪个地块上构建每个景点了,需要确保地块上有足够的空间和电力满足景点的运转所需(k8s resource quality of service)。
每个景点始终都能得到所需的最少电力(k8s CPU),并且拥有的电力量不会超过规定的最大值(否则的话,将会造成短路并烧坏线路),如果地块上还有空闲电力的话,它能够得到额外的电力(超过最小值,但是不会大于最大值)。如果没有空闲的话,该景点的运行会变得更加缓慢。
康茄舞会(Conga Dancing Party Line)有一个最小和最大的规模(k8s memory)。它始终能保证达到指定的最小值,但是如果大于最大值的话,它就会关闭。我们大家都知道,太长的康茄舞通常都会以骚乱收场。如果地块有空闲的话,它会得到额外的空间(超过最小值),但是如果没有空间的话,超过最小空间的某个景点将会关闭。交通管制塔会决定要将哪个景点关闭,它可能是康茄舞会景点,也有可能是其他的。
现在有了足够的空间和电力,团队在创建你规划的景点方面已经没有任何问题了。主题公园已经准备就绪了。
为了帮助游客到达每个景点,你发现最简单的方式就是使用带不同颜色的路标(k8s nodePort服务),如下所示:
图片来源:来自Cmglee的伦敦维多利亚车站地面线
在这里,我们想要使用蓝色标线将游客导引至带有“classic”标签的景点,绿色标线将用户导引至带有“roller coaster”标签的景点。按照你的需要,可以进行具体化或泛化,如果必要的话,还可以将多个标签组合起来。
路标不仅仅是给游客用的,你的内部员工也可以使用它,你还可以创建仅仅对内部员工可见的路径(k8s clusterIP服务),例如到员工食堂的路径。
由于地块都被带刺的铁丝网围着,所以你需要想办法让游客进入公园。有种方案是在铁丝网上打个洞,带颜色的路径一直延伸到这个洞上(k8s loadBalancer服务),但是这意味你要以某种方式保护每个带颜色的路径。
所以,作为替代方案,你会选择带有准入的大门(k8s ingress)。土地的拥有者提供一些标准的大门,所以你的员工无需维护它们,它们也不会使用地块上的空间和电力。土地的拥有者还会负责构建从大门到地块的立交桥。未来,你可能还会需要更加专业化的准入大门(k8s Traefik)。
现在,你可以给准入大门的员工一些指令:
一切就绪之后,你的公园就可以运行起来了:
如你所愿!
关于Kubernetes的扩展性、污染(Taints)和亲密关系(affinities)以及 StatefulSets、持久化卷(Persistent Volumes)和无头服务(Headless Service)的内容可以阅读后续文章的详细介绍。