kubernetes k8s container ReplicaSet Deployment Rolling Update Kubectl Create Service

For K8S Beginner EP 1:容器(Container),是什麼?

容器(Container),實現作業系統層虛擬化的技術

容器,英文稱為Container,顧名思義就是一個裝載應用程式並滿足其執行需求的環境,可以說是一沙一世界的概念。

說的專業一些,容器,在作業系統層級共用CPU、記憶體、網路、儲存空間…等資源,以稱作”作業系統層虛擬化”的技術,讓容器滿足應用程式執行的需求,舉個例子,應用程式可以透過容器所提供的CPU資源做運算,再透過容器所提供的網路將運算結果傳輸出去,當然,也可以儲存在容器所提供的儲存空間內,而上述所提到的這些硬體資源,都是來自於作業系統虛擬化後所分享出來的,而這些資源的多寡,也都可以透過技術手段來管理及限制。

執行容器(Container)最受歡迎的工具是Docker:官方網站

容器(Container)與虛擬機(VM)的不同

在開始導入容器技術的時候,為了垂直溝通的順利,會將容器(Container)與虛擬機(VM)做類比,因為虛擬機(VM)已經非常成熟,大家也都很熟悉,可以降低溝通成本,但其實這樣的做法只是貪圖一時之快,容器(Container)與虛擬機(VM)有著巨大的不同:

不同之處容器 (Container)虛擬機 (VM)
虛擬層級作業系統層級硬體層級 註1
系統支援作業系統硬體 (主要是CPU)
作業系統共用獨立
硬體資源透過作業系統共用1. Hypervision分享給虛擬機(VM)
2. 硬體直接提供虛擬化後使用
資源負載輕量接近實體機 註2
初始化速度極快 (秒級)僅較實體機快 (分鐘級)
部署相容性 註3統一標準,可以快速部署在幾乎任何的容器引擎每個產品有自己的標準,須透過轉檔才能相容

註1:虛擬機(VM)又分為全/半虛擬化,博大精深,在此不特別說明。
註2:虛擬機(VM)是模擬一個獨立的實體機環境,若不計Hypervisor層的資源使用,基本上一台虛擬機(VM)的資源負載會等同相同規格的實體機。
註3:容器(Container)為編譯好的image;虛擬機(VM)為虛擬機的檔案。

乍看之下,怎麼好像容器(Container)的好處大於虛擬機(VM)很多,但在此要特別提醒,容器(Container)與虛擬機(VM)的應用場景不盡相同,上表只是羅列技術上的差異,並不是要表達容器(Container)比虛擬機(VM)優秀,這點非常重要!

容器(Container)的特性與好處

隔離性

如上述說明,透過作業系統虛擬化技術,容器中擁有滿足應用程式執行的所有資源,單一個容器就像是一個小世界,自給自足,與外界隔離。

可攜性

容器可以在幾乎所有主流的作業系統環境中執行,也因為「隔離性」,不用再去煩惱作業系統或SDK相容性等問題,這些環境變數都在容器中被包含了進去;且,不論雲端、地端或PC上都是同一套標準,容器執行環境也可以自由選擇。

輕量且啟動速度快

同常而言,容器的底層經過去蕪存菁的簡化過程,在資源使用上非常精實,也因為如此,啟動一個容器的步驟也少了許多,所以啟動速度也較一般虛擬機要快上非常多。

單一關注點

對於開發者而言,不再需要擔心作業系統、SDK、組件間的相容性問題;專注在應用程式邏輯與選用關聯的組件即可。

什麼時候使用容器(Container)

從Web服務、AI到各種應用都非常適合採用容器技術來實現,所以很難去界定容器適合什麼時候使用;但,依據個人經驗,卻有幾個明確的情境非常不適合容器環境,例如:正式環境的資料庫系統、整合特殊硬體的情境,除此之外,一般而言,容器可以是現代化軟體開發最優先的選擇!

Kubernetes與容器(Container)的關係

在虛擬機(VM)的環境,通常採用如VMWare、Proxmox這類的軟體來管理虛擬機(VM);在容器(Container)的世界,Google發表名為Kubernetes的管理工具,簡稱K8S,透過Kubernetes來創建、部署、監控、管理、移轉、消滅容器,所以,了解Kubernetes是非常重要的事情!

Let’s Start to Learn Kubernetes

接下來,這個系列,將一步步分享Kubernetes的知識,讓初學者快速逃離新手村!

~ END ~


,

Related posts

Latest posts