Pod概念


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

  • PodKubernetes創建或部署的最小/最簡單的基本單位,一個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提供兩種共享資源:網絡和存儲。

網絡

  • 每個Pod被分配一個獨立的IP地址,Pod中的每個容器共享網絡命名空間,包括IP地址和網絡端口。Pod內的容器可以使用localhost相互通信。當Pod中的容器與Pod 外部通信時,他們必須協調如何使用共享網絡資源(如端口)。

存儲

  • 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下面的屬性內容。

 

影響資源調度的原因有節點親和性

 

節點親和性又分別為

  • 硬親和性 約束條件必須要滿足才可以調度
  • 軟親和性 嘗試滿足 大概就好了

 

污點和污點忍容

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

查看污點情況

添加污點

 

添加污點忍容


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM