你女兒也能看懂的插畫版 Kubernetes 指南

deis發表於2016-07-03

編者按:Matt Butcher 是 Deis 的平臺架構師,熱愛哲學,咖啡和精雕細琢的程式碼。有一天女兒走進書房問他什麼是 Kubernetes,於是就有了這本插畫版的 Kubernetes 指南,講述了勇敢的 Phippy(一個 PHP 應用),在 Kubernetes 的冒險故事,滿滿的父愛有木有!

某一天

你女兒也能看懂的插畫版 Kubernetes 指南

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

你女兒也能看懂的插畫版 Kubernetes 指南

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

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

給孩子的插畫版 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 與外界環境通訊的工作。

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 過上了幸福的生活。

視訊版

相關文章