這篇分享希望能讓你了解
什麼Container、與Kubernetes和Docker是什麼關係,以及Kubernetes中又包含了哪些
組件?
1.Container – 容器化技術介紹
2.淺談Container / Docker / Kubernetes 三者關係
3.Kubernetes的四種組成元件
Container – 容器化技術介紹
Container在中文被稱為集裝箱或貨櫃,能夠裝載許多物品並便於運送,而這個概念延伸到資訊科技領域中被稱為容器,引申為將應用服務(Application)與其相依的資源封裝成輕量化的映像檔,使開發、維運團隊可輕易攜帶與搬遷。
註:相依性資源(Dependency):官方是以bins/libs稱之,也就是二進位執行檔
(binaries)與函數庫(libraries),它們可能是MySQL、Nodejs、.Net Framework、
程式庫、DLL、編譯器等運行App所需要的執行環境,相依性資源大抵上可以說是我們前面
提到的解決方案堆疊(solution stack)或軟體棧(software stack)。
現今在DevOps 與敏捷式開發的做法中,越來越廣泛地運用於AI與微服務應用的開發上。
在虛擬架構中,為了增加硬體資源的利用率,在硬體層上建立一層虛擬化平台,並於平台中建立與運行多個虛擬機器(VM),彼此分離獨立並共享硬體資源。雖然透過虛擬化的作法可以大幅節省實體機器的數量與有效利用硬體資源,但由於虛擬機器是以作業系統(OS)為中心,每個虛擬機器都需要一個Guest OS的配置,因此會造成幾種問題:
- 佔據系統資源
每個虛擬機器都需要使用底層硬體資源建立Guest OS,佔據記憶體與硬碟空間,並且還需要透過Hypervisor進行虛擬機器與底層資源的溝通
- 啟動時間漫長
由於每個虛擬機器都需要安裝Guest OS,使得映像檔需涵蓋OS相關內容而過於肥大,因此建立和啟動時都會花費大量時間
- 機器搬遷瓶頸
搬遷時需要考慮OS的版本與規格,增加搬遷困難度
因此相對傳統虛擬機器,容器化的目標是要改善虛擬機器因Guest OS所導致的問題,所以容器以應用程式為中心,透過Container Manager將應用程式所需要的環境(Environment)、執行檔(binaries)、函數庫(libraries)等相依資源進行打包封裝,並共用Host OS資源,如此一來省去Guest OS與Hypervisor的負擔,在啟動時間上就可以更加快速。
Container v.s Virtual Machines
但早在1982年就出現的容器化技術,為何在近十年才開始受到企業關注呢?原因在於早期容器化做法的門檻較高,且並無統一標準,直到2013年dotCloud這家公司釋出一套可將容器標準化的平台Docker,並受到各大科技巨頭的支持後,使Docker成為目前主流的容器標準。
淺談Container / Docker / Kubernetes 三者關係
在剛開始接觸容器化時,常看到有人講Container、有人講Docker,容易被專有名詞搞混,到底兩者有什麼差別? 而Kubernetes又是什麼,要如何理解這三個之間的關係,今天就來跟大家說明一下。
Container
容器化(Containerization)是一種連同硬體作業系統與運行服務做虛擬化的技術,讓運作在平台上的容器(Container)共享一個Host OS的資源,而容器是容器化技術具體化的一個實例(Instance),就像虛擬化技術所實踐出來的實例稱做為虛擬機一樣。
容器化側重在應用程式的開發、攜帶,封裝應用程式的相依資源與運行環境,強調輕量、快速與彈性;虛擬化則側重於硬體設備的整併與資源運用,強調資源利用率與高可用性。
雖然容器化虛擬化在運作邏輯和側重重心完全不同,但我們還是可以藉由虛擬化的概念來理解容器化中的各個角色。
Docker
Docker是由dotCloud所發佈的一個容器標準化的開源平台,並以Docker為名成立新公司推廣,如同虛擬化需要有虛擬層一樣,在Hypervisor上運作虛擬機器,容器化也需要有一個平台可以運行容器與資源分配,稱為Docker Engine。
Docker可以將應用程式與其相依資源封裝成Docker映像檔,使其可被重複利用或移植於其他環境,同時提供Dockerfile記錄建立容器的每一步驟,只要有Docker Engine,就可以將Docker映像檔或Dockerfile轉換成容器。
Kubernetes
Kubernetes是一個可以自動化部署與管理容器的工具,是由Google設計並開源系統。就像你可以透過VMware vCenter去部署與管理虛擬機器一樣,可以藉由Kubernetes達到大量容器的部署與調動,目前市面上包含SUSE的Rancher、Red Hat的OpenShift,以及VMware的Tanzu都是依循Kubernetes所開發出來的容器管理產品,而除了Kubernetes之外,也有其他的管理工具,包含Docker自家推出的Docker Swarm,以及Apache的Mesos。
Kubernetes的四種組成元件
Kubernetes需要知道的四個基本的原件:Cluster 、Master Node、Worker Node、Pod
Resource by tkssharma.com
- Cluster
叢集(Cluster)是大家較為熟悉的概念,一個叢集裡可以包含很多的節點(Nodes),例如你可以將三台伺服器組成一個叢集,在叢集裡可以做到資源共享、負載平衡與高可用性等等。
- Master Node
Master Node就像疫情指揮中心一樣,是一個負責發號施令與管理其他Worker Node的角色。
- Worker Node
Worker Node就像底下的執行單位一樣,負責處理各種大小事。
- Pod
Kubernetes最小運作單位,被包含在Worker Node之中,一個Pod對應一個應用服務,而Pod裡面包含一個或多個容器,這些容器共享資源與網路,並彼此透過localhost的Port進行溝通,由於Pod的資源有限,所以通常建議一個Pod只存在一個容器。
每一個Pod都會有一個yaml設定檔,類似於身分證的概念,設定檔裡包含要部署在這個Pod的容器資訊。