其實 K8s 這一詞在我前一份工作是已經聽了非常多遍,但是聽歸聽,實際上換到這間公司等專案等等套進去的時候,好像才真覺得有這麼一回事的樣子,因此再來趁這個連假重新翻一下文件,再來溫習一下這項技術的概念,同時也一併將Container / Docker /Kubernetes 的三角關係稍稍做簡單的釐清。
大家好,我是 Jade Chang
先前任職於科技外商,主要負責對於 Developers 的開發經驗體驗,過去 5-6 年出沒於技術社群以及大專院校。嘗試過直播節目、技術黑客松、帶狀節目系列以及線上短期活動等行銷策略,半年前轉職到台灣在地的軟體開發商,從事行銷與專案經理,也合夥新創了一間數位公司,超展開職涯要開始囉!!!
Kubernetes 提供單一控制平台與 API 來控制多個 Docker 的執行方式和位置,而 Docker 創建統一性的規則來標準化數個 Container 使其可以將程式執行環境帶著走,而 Container 則是採取共用 Host OS 的作法取代過往傳統的 VM。
讓我們一層一層的概念說明,先從最底層的 VM 開始提起。
虛擬機器是虛擬環境,當中的所有環境都跟一般在使用真的電腦,換言之,就是在電腦內建立一部電腦,將基礎硬體虛擬化,以讓多個作業系統 (OS) 個體可在硬體上執行且每台虛擬機器都是互相分離互不相干,體驗就如同在主機作業系統一樣,每個虛擬機器都會提供自身的虛擬硬體,包括 CPU、記憶體、硬碟,大家常用虛擬機器來減少實體機器的花費以及針對需要來開啟各種已經搭配好相關環境的虛擬機器,目前各家雲端平台都有提供各種環境的選擇讓開發人員自行依照需要做選擇。
(圖片來源: Microsoft Learn)
VM 雖然提供在相同伺服器上執行不同作業系統的能力,但也因為 VM 都包含自己執行時所需要的 OS 、應用程式等等,因此相較檔案變的比較大,因此 Container 產生,將最底層的主機 OS 虛擬化,只要 OS 相同就可以多個 Container 一起共用一個 OS,導致檔案變的相對較輕量,從數分鐘建立 VM 到數秒可以開啟一個 Container。
可以從下面這張圖明顯的知道 Container 與 VM 之間的差別。
(圖片來源: What is a container)
是一項建置於 Container 之上的技術,透過 Container 將任何小程式打包成可獨立執行的映像檔,發布到任何可執行 Docker 的平臺上執行,如此一來,應用程式等於是可以透過 Docker映象檔或甚至只需要 Dockerfile,就能將程式執行環境帶著走,Docker 公司也釋出 API,可以用來控制所有的 Container 相關指令,將 Container 標準化。
(圖片來源: 【Day 1】Docker 基本概念)
Docker 總使將容器技術提供標準,但隨著應用程式發展到跨多個伺服器部署的多個容器,操作方式也變得更加複雜。為了管理這樣的複雜性,因而產生了 Kubernetes ,可用於控制這些容器的執行方式和位置。Kubernetes 將 Container 分組成 Pod 並在一個 Cluster 中執行,將可使用的計算資源依照 Container 的需求來做動態協調並安排執行。同時也提供 API 控制這些容器的執行方式和位置。
從下圖可以看到 K8s 會透過 Master Node 來控制各個 Node,並由 Node 來管理 Pod,由 Pod 來管理 Container,以上一包稱為一個 Cluster。
(圖片來源: Kubernetes 基礎教學(一)原理介紹)
歡迎訂閱我 Medium 或是透過 Facebook 一起來交流