Pod
Pods是一種容器
我們已經看到,我們可以將命名空間和cgroups與多個線程結合起來,而這正是Kubernetes Pods的本質。Pods讓你可以指定想要運行的容器,而Kubernetes自動地建立相應的命名空間和cgroups。實際上還要復雜一些,因為Kubernets並不使用Docker網絡(Kubernetes使用CNI,Container Network Interface,容器網絡接口),但是本質是類似的。

只要我們將容器設置成這種模式,每個進程會“感覺”它運行在同一台機器上。這些容器可以在本機互相通信,也可以共享存儲卷(volume)。他們之間甚至可以使用IPC或者互相發送HUP或者TERM這種信號(需要在Kubernetes 1.7,以及Docker>=1.3環境共享PID命名空間)。
什么是Pod
- Pod是Kubernetes創建或部署的最小/最簡單的基本單位,一個Pod代表集群上正在運行的一個進程。Pod實際上是容器的集合,在k8s中對運行容器的要求為:容器的主程序需要一直在前台運行,而不是后台運行。
工作方式
- Pod中運行一個容器
- “one-container-per-Pod”模式是Kubernetes最常見的用法; 在這種情況下,你可以將Pod視為單個封裝的容器,但是Kubernetes是直接管理Pod而不是容器。
- Pods中運行多個需要一起工作的容器
- Pod可以封裝緊密耦合的應用,它們需要由多個容器組成,它們之間能夠共享資源,這些容器可以形成一個單一的內部service單位,一個容器共享文件,另一個“sidecar”容器來更新這些文件。Pod將這些容器的存儲資源作為一個實體來管理。ernetes中的Pod使用可分兩種主要方式。
兩種類型
- 自由主Pod
- 控制器管理的Pod
Pods如何管理多個容器
- Pods的設計可用於支持多進程的協同工作(作為容器),形成一個cohesive的Service單位。Pod中的容器在集群中Node上被自動分配,容器之間可以共享資源、網絡和相互依賴關系,並同時被調度使用。
- 在單個Pod中共同管理多個容器是一個相對高級的用法,應該只有在容器緊密耦合的特殊實例中使用此模式。例如,有一個容器被用作WEB服務器,用於共享volume,以及一個單獨“sidecar”容器需要從遠程獲取資源來更新這些文件。
Pods提供兩種共享資源:網絡和存儲。
l 網絡
- 每個Pod被分配一個獨立的IP地址,Pod中的每個容器共享網絡命名空間,包括IP地址和網絡端口。Pod內的容器可以使用localhost相互通信。當Pod中的容器與Pod 外部通信時,他們必須協調如何使用共享網絡資源(如端口)。
l 存儲
- Pod可以指定一組共享存儲volumes。Pod中的所有容器都可以訪問共享volumes,允許這些容器共享數據。volumes 還用於Pod中的數據持久化,以防其中一個容器需要重新啟動而丟失數據。有關Kubernetes如何在Pod中實現共享存儲的更多信息。
Pod的問題
pod共享相同的IP地址和端口空間
- 這意味着在同一 pod中的容器運行的 多個進程需要注意不能綁定到相同的端口號, 否則會導致端口沖突,
- 但這只涉及同一pod中的容器。 由於每個pod都有獨立的端口空間, 對於不同 pod中的容器來說 則永遠不會遇到端口沖突
- 一個 pod中的所有容器也都具有相同的loopback 網絡接口, 因此容器可以通過localhost 與同一 pod中的其他容器進行通信。
pod中的容器
- k8s中的思想是:每個容器只安裝一個進程,然后多個或一個容器屬於一個pod。然后這個pod下的容器可以通過volume的方式共享磁盤。
- 也就是說,應該把整個pod看作虛擬機,然后每個容器相當於運行在虛擬機的進程。
將多層應用分散到多個 pod 中
雖然可以把多個容器放在同一個pod下,但是應該根據應用將容器分布到不同的pod中。原因如下:
- 每個pod是部署再固定的node上的,將前端、后端應用部署在同一個pod里發揮不出集群的作用
- 當需要進行節點擴容的時候,如果前后端在一個pod里,擴容一個pod后就有兩個前端、后端,這樣多出的前端是沒有意義的而且很有難度
何時在pod使用多個容器
- 一般情況下建議單容器pod
- 多容器需要同時擴縮容,是否必須一起運行,代表的是一個主體還是多個獨立的組件
Pod的詳解
Pod的基本概念
- 最小部署的單元
- 包含多個容器(一組容器的集合)
- 一個Pod中容器共享網絡命名空間
- Pod是短暫的
Pod存在的意義
- 創建容器使用docker 一個docker對應一個容器 一個容器有進程 一個容器運行一個應用程序
- Pod是多進程設計 運行多個應用程序
- 一個Pod有多個容器 一個容器運行一個應用程序
- Pod存在為了親密性應用
- 兩個應用之間交互
- 網絡之間調用
- 兩個應用需要頻繁調用
Pod的鏡像拉取策略


Pod的資源限制
對資源的限制進行調度 最大或者最小尋找合適的進行調度


Pod的重啟策略


Pod的健康檢查


Pod的調度
Pod調度主要是根據合適的節點 匹配的資源剛好符合該調度的要求 主要看調度的屬性 requests下面的屬性內容。


影響資源調度的原因有節點親和性
節點親和性又分別為
- 硬親和性 約束條件必須要滿足才可以調度
- 軟親和性 嘗試滿足 大概就好了


污點和污點忍容
- 影響資源調度的原因還有污點和污點忍容
- 成為污點的時候不被調度到
- 成為污點忍容的時候不一定不被調度到

查看污點情況

添加污點



添加污點忍容

