史上最易懂的 Kubernetes 兒童插圖指南

  • 2019 年 11 月 23 日
  • 筆記

來源:juejin.im/post/5d1b2a656fb9a07edc0b7058

獻給所有試圖向孩子們解釋軟體工程的家長。

很久很久以前,有一個叫 Phippy 的應用程式。她是一個簡單的應用程式,由 PHP 編寫且只有一個頁面。她住在一個需要和其他可怕的應用程式分享環境的主機中,她不認識這些應用程式並且不願意和他們來往。她希望她能擁有一個屬於自己的環境:只有她自己和她可以稱之為家的 Web 伺服器。

每個應用程式都有個運行所依賴的環境。對於 PHP 應用程式來說,這個環境可能包括 Web 伺服器,一個可讀文件系統和 PHP 引擎本身。

有一天,一隻善良的鯨魚出現了。他建議小 Phippy 住在容器里,這樣可能會更快樂。所以應用程式 Phippy 遷移到了容器中。這個容器很棒,但是……它有點像一個漂浮在大海中央的豪華起居室。

容器提供了一個獨立的環境,應用程式可以在這個環境中運行。但是這些孤立的容器常常需要被管理並與外面的世界連接。對於孤立的容器而言,共享文件系統、網路通訊、調度、負載均衡和分發都是要面對的挑戰。

鯨魚聳了聳肩。「對不起,孩子。」他說著,消失在海面下。就在 Phippy 甚至開始絕望時,一位駕駛著巨輪的船長出現在海平線上。這艘船由幾十個綁在一起的木筏組成,但從外面來看,它就像一艘巨輪。

「你好呀,這位 PHP 應用程式朋友。我是 Kube 船長。」睿智的老船長說。

「Kubernetes」 在希臘語中是船長的意思。我們可以從這個單詞中得到 CyberneticGubernatorial 這兩個片語。Kubernetes 項目專註於構建一個健壯的平台,用於在生產環境中運行數千個容器。

「我是 Phippy。」小應用程式說。

「很高興認識你。」船長一邊說,一邊在她身上貼上了一張標有姓名的標籤。

Kubernetes 使用標籤作為「名牌」來標識事物。它可以根據這些標籤進行查詢。標籤是開放性的:你可以用他們來表示角色、穩定性或其他重要的屬性。

船長建議應用程式把她的容器搬到船上的一個船艙中。Phippy 很高興地把她的容器搬到 Kube 船長巨輪的船艙內。Phippy 覺得這裡像家一樣。

在 Kubernetes 中,Pod 代表一個可運行的工作單元。通常,你會在 Pod 中運行一個容器。但是對於一些容器緊密耦合的情況,你可以選擇在同一個 Pod 中運行多個容器。Kubernetes 負責將你的 Pod 和網路以及 Kubernetes 的其餘環境相連。

Phippy 有一些不同尋常的興趣,她很喜歡遺傳學和綿羊。所以她問船長:「如果我想克隆我自己,是否可以根據需求克隆任意次數呢?」

「這很容易。」船長說。船長把 Phippy 介紹給了 Replication Controller。

Replication Controller 提供一種管理任意數量 Pod 的方法。一個 Replication Controller 包含一個 Pod 模板,該模板可以被複制任意次數。通過 Replication Controller,Kubernetes 將管理 Pod 的生命周期,包括伸縮、滾動更新和監控。

無數個日夜,小應用程式在她的船艙中與她的複製品相處十分愉快。但與自己為伍並沒有所說的那麼好……即使你擁有 N 個自己的克隆體。

Kube 船長慈祥地笑了笑:「我正好有一樣東西。」

他剛開口,在 Phippy 的 Replication Controller 和船的其他部分之間打開了一條隧道。Kube 船長笑著說:「即使你的複製品來了又去,這條隧道始終會留在這裡,你可以通過它發現其他 Pod,其他 Pod 也可以發現你!」

服務告知 Kubernetes 環境的其餘部分(包括其他 Pod 和 Replication Controller)你的應用程式包含了哪些服務,當 Pod 來來往往,服務的 IP 地址和埠始終保持不變。其他應用程式可以通過 Kurbenetes 服務發現找到你的服務。

多虧了這些服務,Phippy 開始探索船的其他部分。不久之後,Phippy 遇到了 Goldie。他們成了最好的朋友。有一天,Goldie 做了一件不同尋常的事。她送給 Phippy 一件禮物。Phippy 看了禮物一眼,悲傷的淚水奪眶而出。

「你為什麼這麼傷心呢?」Goldie 問道。

「我喜歡這個禮物,但我沒有地方可以放它!」Phippy 抽噎道。

但 Goldie 知道該怎麼做。「為什麼不把它放入卷中呢?」

卷表示容器可以訪問和存儲資訊的位置。對於應用程式,卷顯示為本地文件系統的一部分。但卷可以由本地存儲、Ceph、Gluster、持久性塊存儲,以及其他存儲後端支援。

Phippy 喜歡在 Kube 船長的船上生活,她很享受來自新朋友的陪伴(Goldie 的每個克隆人都同樣令人愉悅)。但是,當她回想起在可怕的主機度過的日子,她想知道她是否也可以擁有一點自己的隱私。

「這聽起來像是你所需要的,」Kube 船長說,「這是一個命名空間。」

命名空間是 Kubernetes 內部的分組機制。服務、Pod、Replication Controller 和卷可以在命名空間內部輕鬆協作,但命名空間提供了與集群其他部分一定程度的隔離。

Phippy 與她的新朋友一起乘坐 Kube 船長的巨輪航行於大海之上。她經歷了許多偉大的冒險,但最重要的是,Phippy 找到了自己的家。

所以 Phippy 從此過上了幸福的生活。