docker中pod是什么意思

docker中pod是組合的多容器運行單元的意思;pod是kubernetes里的一個基礎單元,可以看做是容器的擴展或者增強型的容器,把多個進程打包在一個“Name Space”里的時候,就構成了一個pod,pod里面不同進程的應用包裝仍然是獨立的。

docker中pod是什么意思

本教程操作環境:linux7.3系統、docker19.03版、Dell G3電腦。

docker中pod是什么意思

Pod是一種組合的多容器運行單元,也是Kubernetes里的一個基礎單元。你可以把它看作是一種容器的擴展或者增強型的容器。Pod里面包括一個主容器和數個輔助容器,它們共同完成一個特定的功能。把多個進程(容器也是一種隔離的進程)打包在一個Name Space里的時候,就構成了一個Pod。Pod里面不同進程的應用包裝仍然是獨立的(每個容器都會有自己的鏡像)。

Pod的意義在于,它可以既保持主容器和輔助容器的的密切關系,又保持主容器的獨立性。由于主容器和輔助容器的生命周期相同,可以同時被創建和銷毀,因此把它們放在一個Pod中,可以使他們的交互更加高效。

而另一方面,主容器需要完成一些主要的工作,而另一些工作可能是有共性的,就可以單獨打包由輔助容器來運行。

擴展知識

容器是什么?

要給容器下一個準確的定義,是一件不容易的事情,因為每個人看待容器的視角有所不同。在劉俊輝看來,容器既是一種計算單元的提供方式;又是一種應用的包裝形式。

– 容器是一種計算單元

作為一種計算單元,容器與線程、進程、虛擬機、物理機一樣(如下圖所示)。在連續尺度上,越往左隔離性、安全性和開銷越低,越往右則越高。而容器則恰恰是介于進程和虛擬機之間的一種計算單元。
docker中pod是什么意思
但并非所有的應用都適合選擇容器,開發者可以根據自己應用的特點和需求選擇最適合的計算單元。例如,你的應用是高性能、互信的,且處于同一個管理區域,那么用線程或者進程就可以滿足;但如果你的應用是多租戶的,并且和其他應用運行在同一個空間,那么你就需要考慮如何將這些應用安全地隔離開,使得數據不會被泄露或性能受到影響。那么這時,容器也許就是一個不錯的選擇了。

因為容器是一個「高度隔離的進程」,它在一般進程的隔離基礎上又增加了新的隔離機制,這些隔離機制是使用Linux的內核提供的,它包括一些命名空間(Name Spaces)和CGroup。命名空間可以分為網絡、存儲和計算三大類。其中,最為重要的是網絡命名空間。它保證了容器的網絡是獨立于其他容器網絡的。每個容器自己看到的文件系統和其他容器的是不共享的,每個容器只能看到自己的進程ID,而進程編號也是連續的。

而說到容器與虛擬機最大的區別,劉俊輝認為,相對于虛擬機,容器最大的特征是它沒有自己獨立的操作系統,而是共享其宿主機上的一個操作系統;而虛擬機則運行在「一臺獨立的服務器上」。因此,容器相比于虛擬機的成本會小,但隔離性卻有所欠缺。

– 容器是一種應用的包裝形式

有過應用開發經驗的人都知道,應用并不是一個單一的可執行文件,一個稍微復雜一點的應用包括多個部分,包括:代碼、可執行文件、配置依賴、外部依賴(動態鏈接庫)等。

所以在應用發行包裝的時候,需要考慮目標操作系統的版本、系統架構以及它所依賴的模塊等因素。否則應用安裝時會改動系統的不同部分。

而容器作為一個應用的包裝,它最大的特點就是實現了應用的獨立和便攜,容器本身包含了應用所有的依賴,這使得它可以再任意的基礎設施上運行,不會因為系統版本、架構的問題,而導致各種意外。

02Docker是什么?

簡單來說,Docker可以看作是一個非常成功的容器管理平臺。Docker最重要的部分就是它的運行管理環境(如下圖所示)。
docker中pod是什么意思
正如上面所說,容器是一個計算單元,那么Docker的運行環境就是用來創建、管理和銷毀這些計算單元的。在創建和管理這些計算單元的時候,需要用到計算單元的包裝(也就是它的軟件發行包),這些包裝以容器鏡像的方式存放在它的運行環境中,所有的容器計算單元都是通過這些鏡像來創建的。

但鏡像本身會有版本的發布、升級等需求,這就涉及到Docker的另一個重要組成部分DockerHub了。DockerHub有點像蘋果的App Store,它是一個非常大的「容器市場」,所有常用的軟件都可以在DockerHub上找到。

最后一個Docker的重要模塊,就是用戶界面和管理工具,它們用來向容器的運行環境發布命令或查看狀態。只需要用一個Docker的命令加上一些參數,就可以實現創建、刪除、查看容器的運行情況等操作。

接下來我們就來看看Docker的實際操作情況,我們會以運行一個Hello World的容器為例,講講Docker的使用情況。其實,只需要安裝好Docker就可以嘗試運行這個Hello World的容器了。

通過下面代碼,我們來看看Docker做了些什么:
docker中pod是什么意思
首先我們看到Docker在本地要去找Hello World最新版本的鏡像,它發現本地并沒有這個鏡像后去DockerHub上把這個鏡像給下載了下來。然后,這個鏡像就被運行了,之后Docker后臺就創建了這樣一個容器。

Docker的出現,讓容器應用管理變得非常輕松,運行容器只需要一個命令就可以實現。而從DockerHub上下載鏡像、創建各種各樣的隔離環境、創建容器與外部的網絡通信環境都可以由Docker來完成??梢哉fDocker可以管理容器的整個生命周期。

03容器vs.虛擬機,伐木工的斧與鋸

作為對容器的總結,我們可以把容器最大的特點歸納為輕量級和完全獨立部署。這兩大特點與云原生的彈性無限擴展和按需使用的定位十分吻合,也正因為如此,容器成為了云原生的基石。

雖然容器和虛擬機都是計算單元,但從虛擬機到容器,并不能看做是一個簡單的性能提升或架構的改變,而是一種應用理念的改變。

舉個例子,從前伐木工人看書的時候會用斧子,后來大家覺得用斧子太費力氣,有個高人就介紹了另一個砍樹的工具「鋸子」。但如果伐木工人拿著鋸子去砍樹的話,會發現還沒有斧子好用。但事實是,斧子和鋸子是兩種使用的理念。

而說回容器和虛擬機理念的不同,我們可以通過下面的圖表來進一步感受。
docker中pod是什么意思
容器的典型應用可以分為兩類,一類是微服務,一類是devops。

微服務是指系統的不同單元或功能運行不同的容器,每一個服務的容器數量可以根據自己的負載進行調整。比如,一個大系統包含用戶登錄、貨品展示、貨品交互等功能,但這個系統的各個部分并不是同時線性增加的,有些部分可能忙一些,有些部分的容量可能還有富余。
docker中pod是什么意思
DevOps是指開發者、測試、生產過程流水線化。因為容器的「自包含」特性,當它作為標準的流通物品,可以使開發環境、測試環境和生產環境的應用包裝完全一致,這樣就減少了應用由于依賴關系配置錯誤等導致的意外,從而使得開發、測試、生產的整個流水線變得更高效。
docker中pod是什么意思

04 Pod,一種增強型容器

Pod是一種組合的多容器運行單元,也是Kubernetes里的一個基礎單元。你可以把它看作是一種容器的擴展或者增強型的容器。Pod里面包括一個主容器和數個輔助容器,它們共同完成一個特定的功能。把多個進程(容器也是一種隔離的進程)打包在一個Name Space里的時候,就構成了一個Pod。Pod里面不同進程的應用包裝仍然是獨立的(每個容器都會有自己的鏡像)。

Pod的意義在于,它可以既保持主容器和輔助容器的的密切關系,又保持主容器的獨立性。由于主容器和輔助容器的生命周期相同,可以同時被創建和銷毀,因此把它們放在一個Pod中,可以使他們的交互更加高效。

而另一方面,主容器需要完成一些主要的工作,而另一些工作可能是有共性的,就可以單獨打包由輔助容器來運行。

非常推薦大家去一個叫Katacoda的網站,它上面有大量免費的在線實驗,包括Docker及Docker Image等動手操作項目,而且現在是完全免費的。大家不妨去這里動手實操起來。

當一個容器平臺運行多個租戶應用的時候,很容易發生「側向攻擊」,即進程利用系統的漏洞來進行權限提升,例如把自己的權限升級成管理員,從而獲得對系統上運行的其他進程或容器的操作權限。目前這類漏洞通常會導致惡意的使用計算資源用來「挖礦」。

針對這一問題,目前有兩種解決方案,一種是「限制系統調用」;一種是「獨立內核」。

限制系統調用,指的是通過限制應用的系統調用,來降低應用的能力,從而避免對其他應用的危害。目前,Google的Givsor和IBM的Nabla都是采用的這種做法。如下圖所示,原來一個應用會訪問到所有的系統調用,但在Nabla的模式下,應用只會訪問必要的系統調用,其他調用則都被屏蔽了。
docker中pod是什么意思
但這種方法的弊端在于,它需要你在一開始就要給應用開放「恰到好處」的權限,如果一不小心沒有開放足夠的權限,那應用就可能會崩潰。

獨立內核則參考了虛擬機的解決方案,它是指在容器中增加一個新的內核,這個內核是輕量化的,包括「微內核」和Unikernel兩種實現方式。Unikernel和應用是編譯在一起的,它們之間可以直接通過函數調用,而不需要系統調用。

這一方案的好處在于,容器本質上只是跟自己的內核打交道,而內核則是跟宿主機打交道,內核與宿主機的交互只需要一些通用的指令即可,不涉及到直接調用到危害系統的指令。目前Kata Container和京東智聯云原生容器,就是采用的這種方式。

這種方式的好處在于,微內核作為一個最小化的操作系統,可以滿足所有系統的調用,同時去除一些不必要的系統操作部分;它的系統啟動時間非常短,可以達到秒級,同時開銷比虛擬機要小。

推薦學習:《docker視頻教程

以上就是

? 版權聲明
THE END
喜歡就支持一下吧
點贊8 分享