本文首發於個人公衆號 Linux雲計算網絡(id: cloud_dev),專一於乾貨分享,號內有 10T 書籍和視頻資源,後臺回覆**「1024」**便可領取,歡迎你們關注,二維碼文末能夠掃。html
Hi,你們好,歡迎你們和我一塊兒學習 K8S,這是系列第 6 篇。編程
Pod 中文譯爲豌豆莢,很形象,豌豆莢裏面包裹的多顆小豌豆就是容器,小豌豆和親密無間的老夥計殼莢子自出生之日起就得面對各類各樣的人生大事:網絡
咱們假設沒有 Pod,應用部署的最小單元就是容器,會有什麼問題?首先,應用調度粒度太細,不便於管理。想象一下淘寶網站運行着海量應用,每一個應用又拆分紅多個服務,每一個服務部署在一個容器裏,一個集羣管理系統要管理龐大的容器集羣,既要顧忌不一樣應用之間的隔離性,又要考慮相同應用之間的關聯性,這在管理上將會是災難性的難題。工具
其次,資源利用率低。有不少應用之間存在某種強關聯關係,它們須要彼此能共享對方的資源,雙方的交互須要快捷有效,若是把它們部署到單獨的容器中,資源利用和通訊將成爲最主要的系統瓶頸。學習
Pod 的提出改變了這種局面,它將強關聯的應用整合在一塊兒,做爲一個總體對外提供服務,既簡化了管理的難度,又提升了資源的利用率。網站
那哪些應用是強關聯,適合放到一個 Pod 中呢?舉個例子,好比下面這個 Pod 包含兩個容器,一個 File Puller,一個是 Web Server。雲計算
File Puller 會按期從外部的 Content Manager 中拉取最新的文件,將其存放在 Volume 中。而後 Web Server 從 Volume 中讀取文件,來響應 Consumer 的請求。spa
這兩個容器經過 Volume 來共享實時的數據,協做處理一個 Consumer 的請求,把它們放到同一個 Pod 中就是合適的。設計
若是有應用和任何應用之間都不存在聯繫,那麼它們就單獨部署在一個 Pod 中,稱爲one-container-per-pod
。即使只有一個容器,K8S 管理的也是 Pod 而不是直接管理容器。code
綜上,Pod 在設計的時候,主要動機有如下兩點:
Pod 提供了比容器更高一層的抽象,K8S以 Pod 爲最小單元進行應用的部署、調度、擴展、共享資源和管理週期。
Pod 內的全部容器共享同一個網絡空間,它們之間能夠經過 localhost
相互通訊。一樣,全部容器共享 Volume,一個容器掛載一個 Volume,其他容器均可以訪問這個 Volume。
容器是 Pod 的一個屬性,定義了應用的類型及共享的資源。每一個容器會分配一個 Port,Pod 內的容器經過 localhost:Port 的形式來通訊。
一個 Pod 包含一個或多個容器,每一個 Pod 會分配一個惟一的 IP 地址,Pod 內的多個容器共享這個 IP 地址,每一個容器的 Port 加上 Pod IP 共同組成一個 Endpoint
,共同對外提供服務。
在部署應用的時候,Pod 會被 Master 做爲一個總體調度到一個 Node 上。若是開啓多副本管理,則多個 Pod 會根據調度策略調度到不一樣的 Node 上。若是 Node 宕機,則該 Node 上的全部 Pod 會被自動調度到其餘 Node 上。
下面是容器、Pod、Node 三者之間的關係圖:
Pod 中有一個特殊的容器,叫 Pod 的根容器——Pause 容器,這是一個很小的容器,鏡像大小大概爲 200KB。
Pause 容器存在的意義是: 維護 Pod 的狀態信息。
因爲 Pod 是做爲一個總體進行調度,咱們難以對這個總體的信息進行簡單的判斷和有效地進行行動。
想象一下,假如 Pod 內一個容器死亡了,是算總體死亡呢仍是 N/M 死亡率,若是 Pod 內全部容器都死亡了,那是否是該 Pod 也就死亡了,若是加入新的容器或原有容器故障恢復呢,如何讓新成員快速融入環境?
理論上,雖然 Pod 是由一組容器組成的,但 Pod 和容器是彼此獨立的,也就是容器的故障不該該影響 Pod 的存在,Pod 有相應的手段來保證容器的健康情況。
引入與業務無關的,而且不易死亡的 Pause 容器就能夠很好的解決這個問題,Pause 容器的狀態就表明了 Pod 的狀態,只要 Pause 不死,那麼無論應用容器發生什麼變化,Pod 的狀態信息都不會改變。
這樣,Pod 內的多個應用容器共享 Pause 容器的 IP 和 Volume,當加入新的容器或者原有的容器因故障重啓後就能夠根據 Pause 保存的狀態快速學習到當前 Pod 的狀態。
本文簡單學習了 Pod 的初級知識,包括 Pod 的設計動機,容器、Pod 和 Node 之間的關係,以及 Pod 的守護者——Pause 容器。
容器的 Port + Pod IP = Endpoint,構成一個 Pod 的通訊實體,Pod 中的容器共享網絡和存儲,這些共享信息是由 Pause 容器來維護的。
下文繼續豌豆莢之旅的第二個部分,學習 Pod 的管理哲學。
爲了給你們更多的福利,這個系列的每一篇文章我都會送一些電子書,可能有重的,也有一些新書,以前送了《K8S 指南》和《容器與容器雲》,此次送一本由 K8S 中文社區主編的《K8S 中文手冊》,你們有須要的後臺回覆「K8S2」
個人公衆號 「Linux雲計算網絡」(id: cloud_dev) ,號內有 10T 書籍和視頻資源,後臺回覆 「1024」 便可領取,分享的內容包括但不限於 Linux、網絡、雲計算虛擬化、容器Docker、OpenStack、Kubernetes、工具、SDN、OVS、DPDK、Go、Python、C/C++編程技術等內容,歡迎你們關注。
原文出處:https://www.cnblogs.com/bakari/p/10551510.html