红帽白皮书新鲜出炉!点击获取,让你的云战略更胜一筹! 了解详情
写点什么

通俗易懂图解 Kubernetes

  • 2018-08-21
  • 本文字数:2743 字

    阅读完需:约 9 分钟

本文最初发表于 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”,即平整的地区并且是地中海气候。稍后我们将会看到如何使用该信息。

建造 KubePark

你的工作已经非常辛苦了,所以你会将公园建造的具体工作委托给一位控制人员。该员工会确保你在计划中规划的景点数量和类型始终都能无误地运转。

出乎意料的是,慷慨的土地拥有者还为你提供了控制交通管制塔(k8s cluster master ),以便于让控制人员容身并且还会负责控制塔所需的维护和改善工作。这样我们要关心的事情就又少了一件!

现在有了控制塔,再加上建造游乐设施的计划,你的员工就可以决定在哪个地块上构建每个景点了,需要确保地块上有足够的空间和电力满足景点的运转所需(k8s resource quality of service )。

每个景点始终都能得到所需的最少电力(k8s CPU),并且拥有的电力量不会超过规定的最大值(否则的话,将会造成短路并烧坏线路),如果地块上还有空闲电力的话,它能够得到额外的电力(超过最小值,但是不会大于最大值)。如果没有空闲的话,该景点的运行会变得更加缓慢。

康茄舞会(Conga Dancing Party Line)有一个最小和最大的规模(k8s memory)。它始终能保证达到指定的最小值,但是如果大于最大值的话,它就会关闭。我们大家都知道,太长的康茄舞通常都会以骚乱收场。如果地块有空闲的话,它会得到额外的空间(超过最小值),但是如果没有空间的话,超过最小空间的某个景点将会关闭。交通管制塔会决定要将哪个景点关闭,它可能是康茄舞会景点,也有可能是其他的。

现在有了足够的空间和电力,团队在创建你规划的景点方面已经没有任何问题了。主题公园已经准备就绪了。

KubePark 开业

为了帮助游客到达每个景点,你发现最简单的方式就是使用带不同颜色的路标(k8s nodePort 服务),如下所示:

图片来源:来自 Cmglee 伦敦维多利亚车站地面线

在这里,我们想要使用蓝色标线将游客导引至带有“classic”标签的景点,绿色标线将用户导引至带有“roller coaster”标签的景点。按照你的需要,可以进行具体化或泛化,如果必要的话,还可以将多个标签组合起来。

路标不仅仅是给游客用的,你的内部员工也可以使用它,你还可以创建仅仅对内部员工可见的路径(k8s clusterIP 服务),例如到员工食堂的路径。

由于地块都被带刺的铁丝网围着,所以你需要想办法让游客进入公园。有种方案是在铁丝网上打个洞,带颜色的路径一直延伸到这个洞上(k8s loadBalancer 服务),但是这意味你要以某种方式保护每个带颜色的路径。

所以,作为替代方案,你会选择带有准入的大门(k8s ingress )。土地的拥有者提供一些标准的大门,所以你的员工无需维护它们,它们也不会使用地块上的空间和电力。土地的拥有者还会负责构建从大门到地块的立交桥。未来,你可能还会需要更加专业化的准入大门(k8s Traefik )。

现在,你可以给准入大门的员工一些指令:

  1. 带有六岁以下儿童的游客要使用红色标线;
  2. 带有青少年的游客要使用绿色标线;
  3. ……

启动并让它运转起来

一切就绪之后,你的公园就可以运行起来了:

到此为止吗?

如你所愿!

关于 Kubernetes 的扩展性、污染(Taints)和亲密关系(affinities)以及 StatefulSets、持久化卷(Persistent Volumes)和无头服务(Headless Service)的内容可以阅读后续文章的详细介绍。

感谢张婵对本文的审校。

2018-08-21 18:244035

评论 1 条评论

发布
暂无评论
发现更多内容

架构师训练营——第12周学习总结

jiangnanage

MapReduce

极客李

JVM中unsafe.cpp源码

Darren

c++ 源码 JVM unsafe

Java创建对象的方法有哪些?

古月木易

Java

架构师训练营——第12周作业

jiangnanage

架构师训练营 第十二周 总结

CR

「架构师训练营」第 12 周作业 - 大数据

森林

SpringBoot 缓存之 @Cacheable 详细介绍

hepingfly

Java spring 缓存 springboot

「架构师训练营」第 12 周作业 - 总结

森林

Java创建对象的方法有哪些?

奈学教育

Java

Docker 网络模式详解及容器间网络通信

哈喽沃德先生

Docker 容器 微服务

week12 小结

Geek_196d0f

第12周学习总结

刘卓

架构师0期Week12总结

Nan Jiang

第12周 大数据

陆不得

架构师训练营 - 命题作业 第 12周

铁血杰克

极客大学

CPU中的程序是怎么运行起来的(预告篇)

良知犹存

cpu

JDK8 Unsafe.java 源码

Darren

源码 并发 CAS 代码注释 unsafe

手机没网了,却还能支付,这是什么原理?

楼下小黑哥

支付宝 微信支付 支付

vivo商城前端架构升级-总览篇

vivo互联网技术

node.js Vue 大前端 架构设计

面经手册 · 第9篇《队列是什么?什么是双端队列、延迟对列、阻塞队列,全是知识盲区!》

小傅哥

数据结构 小傅哥 队列 ArrayDeque

拥抱K8S系列-02-服务器部署应用和docker部署应用区别(nginx篇)

张无忌

nginx Docker 运维

拥抱K8S系列-01-CentOS7安装docker

张无忌

Docker centos 运维

一条龙!CI / CD 、打造小团队前端工程化服务

久违

Vue 大前端 jenkins React

架构师0期Week12作业

Nan Jiang

oeasy教您玩转linux010202软件包管理apt

o

架构师训练营第 12 周作业

在野

java安全编码指南之:Mutability可变性

程序那些事

Java java安全编码 编码指南 可变性

实战案例丨使用云连接CC和数据复制服务DRS实现跨区域RDS迁移和数据同步

华为云开发者联盟

迁移 灾备 数据复制 云连接 数据同步

第12周作业

刘卓

甲方日常6

句子

工作 随笔杂谈 日常

通俗易懂图解Kubernetes_DevOps & 平台工程_Daniel Lebrero_InfoQ精选文章