AICon 上海站|日程100%上线,解锁Al未来! 了解详情
写点什么

通俗易懂图解 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:244455

评论 1 条评论

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

网络攻防学习笔记 Day96

穿过生命散发芬芳

态势感知 网络攻防 8月日更

20位大厂面试官推荐的《Java面试八股文,高级架构师百度云资源

欢喜学安卓

Java 程序员 面试 后端

异或位算法的高效玩法

陈皮的JavaLib

Java 面试 算法 8月日更

404,【大牛系列教学

欢喜学安卓

Java 程序员 面试 后端

C#位运算,面试要掌握这几个关键点

Geek_f90455

Java 程序员 面试 后端

Dubbo如何支持本地调用?InJvm方式解析,阿里官方推荐

Geek_f90455

Java 程序员 面试 后端

深入学习 CSS 中的伪元素 ::before 和 ::after

devpoint

CSS css3 CSS语法 8月日更

【设计模式】适配器模式

Andy阿辉

C# 后端 设计模式 8月日更

ArrayList(Java8,阿里大牛把「服务雪崩」玩到了极致

Geek_f90455

Java 程序员 面试 后端

Vue深入学习2—虚拟DOM和Diff算法

魁首

DOM Vue 3 Diff

C#索引器的实现,黑马程序员Java基础入门

Geek_f90455

Java 程序员 面试 后端

Vue深入学习3—数据响应式原理

魁首

🏆(不要错过!)【CI/CD技术专题】「Jenkins实战系列」(3)Jenkinsfile+DockerFile实现自动部署

码界西柚

Docker Dockerfile jenkins 8月日更

电商秒杀系统架构设计

华仔架构训练营

Linux之lsof命令

入门小站

Linux

15道常考SpringBoot面试题整理,字节跳动Java金三银四解析

欢喜学安卓

Java 程序员 面试 后端

JVM实践--实例解析字节码常量池

JVM 常量池 字节码

架构实战营 - 第四模块作业

李东旭

「架构实战营」

前端之数据结构(二)

Augus

数据结构 8月日更

16条代码规范建议,快看看自己做到没,Java从基础到高级知识点汇总

欢喜学安卓

Java 程序员 面试 后端

apk瘦身;如何缩小体积呢,Java面试笔试题及答案

欢喜学安卓

Java 程序员 面试 后端

Java并发--synchronized原子性的底层机制剖析

JVM 并发 线程安全

数据缓存历险记(三)--老头的LRU很带劲

卢卡多多

redis LRU 8月日更

【前端 · 面试 】HTTP 总结(五)—— GET 和 POST

编程三昧

面试 大前端 HTTP 8月日更 get和post

15-Java枚举类详解【干货笔记,2021年Java高级面试题

欢喜学安卓

Java 程序员 面试 后端

2020年五面蚂蚁,中级Java开发人员要掌握的技术

欢喜学安卓

Java 程序员 面试 后端

架构实战营 模块四 作业

一雄

作业 架构实战营 模块四

2021最新版SpringCloud高频面试题分享,【性能优化实战

欢喜学安卓

Java 程序员 面试 后端

常见的静态负载均衡算法

Albert

算法 8月日更

保持信心

Nydia

Dagger2源码分析(二,深入理解Java虚拟集百度云

Geek_f90455

Java 程序员 面试 后端

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