首頁  >  文章  >  運維  >  docker中pod是什麼意思

docker中pod是什麼意思

WBOY
WBOY原創
2022-07-08 11:11:335703瀏覽

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來完成。可以說Docker可以管理容器的整個生命週期。

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影片教學

以上是docker中pod是什麼意思的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn