编者按:Matt Butcher是Deis的平台架构师,热爱哲学,咖啡和精雕细琢的代码。有一天女儿走进书房问他什么是Kubernetes,因而就有了这本插画版的Kubernetes指南,讲述了勇敢的Phippy(一个PHP应用),在Kubernetes的冒险故事,满满的父爱有木有!web
(视频版建议在wifi环境下打开,土豪请随意)后端
Hope You Enjoy The Story~网络
有一天,女儿走进书房问我:『亲爱的爸爸,什么是Kubernetes呢?』架构
我回答她:『Kubernetes是一个开源的Docker容器编排系统,它能够调度计算集群的节点,动态管理上面的做业,保证它们按用户指望的状态运行。经过使用「labels」和「pods」的概念,Kubernetes将应用按逻辑单元进行分组,方便管理和服务发现。』负载均衡
女儿更疑惑了……因而就有了这个故事ide
好久好久之前,有一个叫Phippy的PHP应用,她很单纯,只有一个页面。她住在一个托管服务里,周围还有不少可怕的应用,她都不认识,也不想去认识,可是他们却要共享这里的环境。因此,她一直都希能有一个属于本身的环境:一个能够称做home的webserver。ui
每一个应用的运行都要依赖一个环境,对于一个PHP应用来讲,这个环境包括了一个webserver,一个可读的文件系统和PHP的engine。spa
有一天,一只可爱的鲸鱼拜访了Phippy,他建议Phippy住在容器里。Phippy遵从了鲸鱼的建议搬家了,虽然这个容器看起来很好,可是……怎么说呢,就像是漂浮在海上的一个小房间同样,仍是没有家的感受。视频
不过容器却是为应用提供了隔离的环境,在这个环境里应用就能运行起来。可是这些相互隔离的容器须要管理,也须要跟外面的世界沟通。共享的文件系统,网络,调度,负载均衡和资源分配都是挑战。server
『抱歉……孩子……』鲸鱼耸耸肩,一摇尾消失在了海平面下……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过上了幸福的生活。
原文连接:https://deis.com/blog/2016/kubernetes-illustrated-guide/