天天看點

小女孩也能看懂的插畫版 Kubernetes 指南

有!

<a target="_blank"></a>

小女孩也能看懂的插畫版 Kubernetes 指南

有一天,女兒走進書房問我:『親愛的爸爸,什麼是 kubernetes 呢?』

小女孩也能看懂的插畫版 Kubernetes 指南

我回答她:『kubernetes 是一個開源的 docker 容器編排系統,它可以排程計算叢集的節點,動态管理上面的作業,保證它們按使用者期望的狀态運作。通過使用「labels」和「pods」的概念,kubernetes 将應用按邏輯單元進行分組,友善管理和服務發現。』

女兒更疑惑了……于是就有了這個故事。

小女孩也能看懂的插畫版 Kubernetes 指南

很久很久以前,有一個叫 phippy 的 php 應用,她很單純,隻有一個頁面。她住在一個托管服務裡,周圍還有很多可怕的應用,她都不認識,也不想去認識,但是他們卻要共享這裡的環境。是以,她一直都希能有一個屬于自己的環境:一個可以稱作 home 的 webserver。

小女孩也能看懂的插畫版 Kubernetes 指南

每個應用的運作都要依賴一個環境,對于一個 php 應用來說,這個環境包括了一個 webserver,一個可讀的檔案系統和 php 的 engine。

小女孩也能看懂的插畫版 Kubernetes 指南

有一天,一隻可愛的鲸魚拜訪了 phippy,他建議 phippy 住在容器裡。phippy 聽從了鲸魚的建議搬家了,雖然這個容器看起來很好,但是……怎麼說呢,就像是漂浮在海上的一個小房間一樣,還是沒有家的感覺。

小女孩也能看懂的插畫版 Kubernetes 指南

不過容器倒是為應用提供了隔離的環境,在這個環境裡應用就能運作起來。但是這些互相隔離的容器需要管理,也需要跟外面的世界溝通。共享的檔案系統,網絡,排程,負載均衡和資源配置設定都是挑戰。

小女孩也能看懂的插畫版 Kubernetes 指南

『抱歉……孩子……』鲸魚聳聳肩,一搖尾消失在了海平面下…… phippy 還沒有來得及失望,就看到遠方駛來一艘巨輪,掌舵的老船長非常威風。這艘船乍一看就是大了點,等到船走近了,phippy 才發現船體兩邊挂滿了皮筏。

老船長用充滿智慧的語氣對 phippy 說:『你好,我是 kube 船長』。

小女孩也能看懂的插畫版 Kubernetes 指南

『kubernetes』是希臘語中的船長,後來的『cybernetic』和『gubernatorial』這兩個詞就是從 kubernetes 衍生來的。kubernetes 項目由 google 發起,旨在為生産環境中成千上萬的容器,建構一個健壯的平台。

小女孩也能看懂的插畫版 Kubernetes 指南

『您好,我是 phippy。』

『很高興認識你。』船長邊說,邊在 phippy 身上放了一個 name tag。

小女孩也能看懂的插畫版 Kubernetes 指南

kubernetes 使用 label 作為『nametag』來區分事物,還可以根據 label 來查詢。label 是開放式的:可以根據角色,穩定性或其它重要的特性來指定。

小女孩也能看懂的插畫版 Kubernetes 指南

kube 船長建議 phippy 可以把她的容器搬到船上的 pod 裡,phippy 很高興地接受了這個提議,把容器搬到了 kube 的大船上。phippy 感覺自己終于有家了。

小女孩也能看懂的插畫版 Kubernetes 指南

在 kubernetes 中,pod 代表着一個運作着的工作單元。通常,每個 pod 中隻有一個容器,但有些情況下,如果幾個容器是緊耦合的,這幾個容器就會運作在同一個 pod 中。kubernetes 承擔了 pod 與外界環境通信的工作。

小女孩也能看懂的插畫版 Kubernetes 指南

phippy 對這一切都感到很新奇,同時她也有很多與衆不同的關注點:『如果我想要複制自己該怎麼做呢?按需的……任意次數的可以嗎?』

『很簡單。』船長說道,接着就給 phippy 介紹起了 replication controller。

小女孩也能看懂的插畫版 Kubernetes 指南

replication controller 提供了一種管理任意數量 pod 的方式。一個 replication controller 包含了一個 pod 模闆,這個模闆可以被不限次數地複制。通過 replication controller,kubernetes 可以管理 pod 的生命周期,包括擴/縮容,滾動部署和監控等功能。

小女孩也能看懂的插畫版 Kubernetes 指南

phippy 就這樣在船上和自己的副本愉快地生活了好多天。但是每天隻能面對自己的副本,這樣的生活也太孤單了。

kube 船長慷慨地笑道:『我有好東西給你。』

說着,kube 船長就在 phippy 的 replication controller 和船上其它地方之間建了一個隧道:『就算你們四處移動,這個隧道也會一直待在這裡,它可以幫你找到其它 pod,其它 pod 也可以找到你。』

小女孩也能看懂的插畫版 Kubernetes 指南

service 可以和 kubernetes 環境中其它部分(包括其它 pod 和 replication controller)進行通信,告訴它們你的應用提供什麼服務。pod 可以四處移動,但是 service 的 ip 位址和端口号是不變的。而且其它應用可以通過 kubernetes 的服務發現找到你的 service。

小女孩也能看懂的插畫版 Kubernetes 指南

有了 service,phippy 終于敢去船上其它地方去玩了,她很快就有了新朋友 goldie。有一天,goldie 送了 phippy 一件禮物,沒想到 phippy 隻看了一眼就哭了。

『你怎麼哭了?』goldie 問道。

『我太喜歡這個禮物了,可惜沒地兒放……』phippy 都開始抽泣了。goldie 一聽原來是這麼回事,馬上就告訴 phippy:『為什麼不放在一個 volume 裡呢?』

小女孩也能看懂的插畫版 Kubernetes 指南

volume 代表了一塊容器可以通路和存儲資訊的空間,對于應用來說,volume 是一個本地的檔案系統。實際上,除了本地存儲,ceph、gluster、elastic block storage 和很多其它後端存儲都可以作為 volume。

小女孩也能看懂的插畫版 Kubernetes 指南

phippy 漸漸地愛上了船上的生活,她很享受和新朋友的相處(goldie 的每個 pod 副本也都很 nice)。但是回想起以前的生活,她又在想是不是可以有一點點私人空間呢?

kube 船長很了解:『看起來你需要 namespace。』

小女孩也能看懂的插畫版 Kubernetes 指南

namespace 是 kubernetes 内的分組機制。service,pod,replication controller 和 volume 可以很容易地和 namespace 配合工作,但是 namespace 為叢集中的元件間提供了一定程度的隔離。

小女孩也能看懂的插畫版 Kubernetes 指南

于是,在 kube 船長的船上,phippy 和她的朋友們開始了海上的曆險,最重要的是,phippy 找到了自己的家。

從此,phippy 過上了幸福的生活。

原文釋出時間為:2016-07-01

本文來自雲栖社群合作夥伴“linux中國”