Matt Butcher是Deis的平台架构师,热爱哲学,咖啡和精雕细琢的代码。有一天女儿走进书房问他什么是Kubernetes,于是就有了这本插画版的Kubernetes指南,讲述了勇敢的Phippy(一个PHP应用),在Kubernetes的冒险故事!

Hope You Enjoy The Story~

有一天,女儿走进书房问我:『亲爱的爸爸,什么是Kubernetes呢?』

我回答她:『Kubernetes是一个开源的Docker容器编排系统,它可以调度计算集群的节点,动态管理上面的作业,保证它们按用户期望的状态运行。通过使用「labels」和「pods」的概念,Kubernetes将应用按逻辑单元进行分组,方便管理和服务发现。』

女儿更疑惑了……于是就有了这个故事

很久很久以前,有一个叫Phippy的PHP应用,她很单纯,只有一个页面。她住在一个托管服务里,周围还有很多可怕的应用,她都不认识,也不想去认识,但是他们却要共享这里的环境。所以,她一直都希能有一个属于自己的环境:一个可以称作home的webserver。

每个应用的运行都要依赖一个环境,对于一个PHP应用来说,这个环境包括了一个webserver,一个可读的文件系统和PHP的engine。

有一天,一只可爱的鲸鱼拜访了Phippy,他建议Phippy住在容器里。Phippy听从了鲸鱼的建议搬家了,虽然这个容器看起来很好,但是……怎么说呢,就像是漂浮在海上的一个小房间一样,还是没有家的感觉。

不过容器倒是为应用提供了隔离的环境,在这个环境里应用就能运行起来。但是这些相互隔离的容器需要管理,也需要跟外面的世界沟通。共享的文件系统,网络,调度,负载均衡和资源分配都是挑战。

『抱歉……孩子……』鲸鱼耸耸肩,一摇尾消失在了海平面下……Phippy还没有来得及失望,就看到远方驶来一艘巨轮,掌舵的老船长非常威风。这艘船乍一看就是大了点,等到船走近了,Phippy才发现船体两边挂满了皮筏。

老船长用充满智慧的语气对Phippy说:『你好,我是Kube船长』。

『Kubernetes』是希腊语中的船长,后来的『Cybernetic』和『Gubernatorial』这两个词就是从Kubernetes衍生来的。Kubernetes项目由Google发起,旨在为生产环境中成千上万的容器,构建一个健壮的平台。

『您好,我是Phippy。』

『很高兴认识你。』船长边说,边在Phippy身上放了一个name tag。

Kubernetes使用label作为『nametag』来区分事物,还可以根据label来查询。label是开放式的:可以根据角色,稳定性或其它重要的特性来指定。

Kube船长建议Phippy可以把她的容器搬到船上的pod里,Phippy很高兴地接受了这个提议,把容器搬到了Kube的大船上。Phippy感觉自己终于有家了。

在Kubernetes中,pod代表着一个运行着的工作单元。通常,每个pod中只有一个容器,但有些情况下,如果几个容器是紧耦合的,这几个容器就会运行在同一个pod中。Kubernetes承担了pod与外界环境通信的工作。

Phippy对这一切都感到很新奇,同时她也有很多与众不同的关注点:『如果我想要复制自己该怎么做呢?按需的……任意次数的可以吗?』

『很简单。』船长说道,接着就给Phippy介绍起了replication controller。

Replication controller提供了一种管理任意数量pod的方式。一个replication controller包含了一个pod模板,这个模板可以被不限次数地复制。通过replication controller,Kubernetes可以管理pod的生命周期,包括扩/缩容,滚动部署和监控等功能。

Phippy就这样在船上和自己的副本愉快地生活了好多天。但是每天只能面对自己的副本,这样的生活也太孤单了。

Kube船长慷慨地笑道:『我有好东西给你。』

说着,Kube船长就在Phippy的replication controller和船上其它地方之间建了一个隧道:『就算你们四处移动,这个隧道也会一直待在这里,它可以帮你找到其它pod,其它pod也可以找到你。』

service可以和Kubernetes环境中其它部分(包括其它pod和replication controller)进行通信,告诉它们你的应用提供什么服务。Pod可以四处移动,但是service的IP地址和端口号是不便、变的。而且其它应用可以通过Kubernetes的服务发现找到你的service。

有了service,Phippy终于敢去船上其它地方去玩了,她很快就有了新朋友Goldie。有一天,Goldie送了Phippy一件礼物,没想到Phippy只看了一眼就哭了。

『你怎么哭了?』Goldie问道。

『我太喜欢这个礼物了,可惜没地儿放……』Phippy都开始抽泣了。Goldie一听原来是这么回事,马上就告诉Phippy:『为什么不放在一个volume里呢?』

Volume代表了一块容器可以访问和存储信息的空间,对于应用来说,volume是一个本地的文件系统。实际上,除了本地存储,Ceph、Gluster、Elastic Block Storage和很多其它后端存储都可以作为volume。

Phippy渐渐地爱上了船上的生活,她很享受和新朋友的相处(Goldie的每个pod副本也都很nice)。但是回想起以前的生活,她又在想是不是可以有一点点私人空间呢?

Kube船长很理解:『看起来你需要namespace。』

Namespace是Kubernetes内的分组机制。Service,pod,replication controller和volume可以很容易地和namespace配合工作,但是namespace为集群中的组件间提供了一定程度的隔离。

于是,在Kube船长的船上,Phippy和她的朋友们开始了海上的历险,最重要的是,Phippy找到了自己的家。

从此,Phippy过上了幸福的生活。

接下来给大家送上一个大福利,添加关注“马哥教育”微信公众号,回复发送关键词“大礼包”免费领取2020最新资料大礼包,其中包含:

1、20本经典必备Linux+Python电子书

2、2020版学习路线图Linux+Python

3、近3年10家一线互联网面试真题

4、38张IT工程师高薪技能图谱

5、2020版Linux必会核心技能课程

扫码添加下方微信,还可以在线免费试听行业大牛经验分享

想要看更多精彩文章内容,可戳后方链接:http://www.magedu.com/xwzx/linuxxx 纯干货!

你闺女也能看懂的插画版 Kubernetes 指南的更多相关文章

  1. 插画版Kubernetes指南

    原文地址:https://www.cnblogs.com/kouryoushine/articles/8007648.html 是根据一个视频翻译过来的,比较形象 编者按:Matt Butcher 是 ...

  2. 写在最前面 - 《看懂每一行代码 - kubernetes》

    我要写什么 <看懂每一行代码 - kubernetes>会包含k8s整个项目的源码解析,考虑到门槛问题,在开始分析k8s之前我会通过一些更低难度的golang开源项目讲解来帮助大家提升go ...

  3. 新手也能看懂的 SpringBoot 异步编程指南

    本文已经收录自 springboot-guide : https://github.com/Snailclimb/springboot-guide (Spring Boot 核心知识点整理. 基于 S ...

  4. [转]看懂UML类图

    这里不会将UML的各种元素都提到,我只想讲讲类图中各个类之间的关系: 能看懂类图中各个类之间的线条.箭头代表什么意思后,也就足够应对 日常的工作和交流: 同时,我们应该能将类图所表达的含义和最终的代码 ...

  5. 看懂Oracle执行计划

    最近一直在跟Oracle打交道,从最初的一脸懵逼到现在的略有所知,也来总结一下自己最近所学,不定时更新ing- 一:什么是Oracle执行计划? 执行计划是一条查询语句在Oracle中的执行过程或访问 ...

  6. 一张图看懂ANSYS17.0 流体 新功能与改进

    一张图看懂ANSYS17.0 流体 新功能与改进   提交 我的留言 加载中 已留言   一张图看懂ANSYS17.0 流体 新功能与改进 原创2016-02-03ANSYS模拟在线模拟在线 模拟在线 ...

  7. 怎样看懂Oracle的执行计划

    怎样看懂Oracle的执行计划 一.什么是执行计划 An explain plan is a representation of the access path that is taken when ...

  8. 看懂SqlServer查询计划【转】

    原文链接:http://www.cnblogs.com/fish-li/archive/2011/06/06/2073626.html 开始 SQL Server 查找记录的方法 SQL Server ...

  9. 看懂UML类图

    这里不会将UML的各种元素都提到,我只想讲讲类图中各个类之间的关系: 能看懂类图中各个类之间的线条.箭头代表什么意思后,也就足够应对 日常的工作和交流: 同时,我们应该能将类图所表达的含义和最终的代码 ...

随机推荐

  1. Javascript数组迭代精髓,拿去花

    数组迭代 数组迭代是处理各数组的利器,编写代码时常常会用到,为我们提供了大大的便利.如果还不知道,真的别告诉别人你知道js哈哈. 以下迭代方法均不会改变原数组,带*为必选对象. 1.arr.forEa ...

  2. linux 上设置mysql开机自启

    此方式是通过安装包安装的,如果是yum安装的rpm包,可参考yum安装MySQL8.0 三个月之前安装的mysql,记得是设置了开机自启,但是今天再次进入的时候发现,无法登录,报错如下 原因是mysq ...

  3. vue element安装

    element-ui插件 安装 >: cnpm i element-ui -S main.js配置 import ElementUI from 'element-ui'; import 'ele ...

  4. Redis五种数据类型应用场景

    目录 1.1 回顾 2.1 应用场景 2.1.1 String 2.1.2 Hash 2.1.3 List 2.1.4 Zet 2.1.5 zset 3.1 小结 1.1 回顾 Redis的五种数据类 ...

  5. 重学ASP.NET Core 中的标记帮助程序

    标记帮助程序是什么 标记帮助程序使服务器端代码可以在 Razor 文件中参与创建和呈现 HTML 元素. 例如,内置的 ImageTagHelper 可以将版本号追加到图片名称.  每当图片发生变化时 ...

  6. Python之浅谈多态和封装

    目录 组合 什么是组合 为什么使用组合 多态和多态性 多态 什么是多态? 多态性 好处 多态性 什么是多态性 封装 封装是什么意思? 隐藏 如何用代码实现隐藏 python 实际上是可以访问隐藏属性的 ...

  7. Pytorch迁移学习实现驾驶场景分类

    Pytorch迁移学习实现驾驶场景分类 源代码:https://github.com/Dalaska/scene_clf 1.安装 pytorch 直接用官网上的方法能装上但下载很慢.通过换源安装发现 ...

  8. 恕我直言你可能真的不会java第12篇-如何使用Stream API对Map类型元素排序

    在这篇文章中,您将学习如何使用Java对Map进行排序.前几日有位朋友面试遇到了这个问题,看似很简单的问题,但是如果不仔细研究一下也是很容易让人懵圈的面试题.所以我决定写这样一篇文章.在Java中,有 ...

  9. web页面弹出遮罩层,通过js或css禁止蒙层底部页面跟随滚动

    场景概述 弹窗是一种常见的交互方式,而蒙层是弹窗必不可少的元素,用于隔断页面与弹窗区块,暂时阻断页面的交互.但是,在蒙层元素中滑动的时候,滑到内容的尽头时,再继续滑动,蒙层底部的页面会开始滚动,显然这 ...

  10. Traffic Real Time Query System 圆方树+LCA

    题目描述 City C is really a nightmare of all drivers for its traffic jams. To solve the traffic problem, ...