Kubernetes pod詳解

1. 基本概念

1.1 Pod概念

Pod是Kubernetes中能夠創建和部署的最小單元,是Kubernetes集羣中的一個應用實例,總是部署在同一個節點Node上。Pod中包含了一個或多個容器,還包括了存儲、網絡等各個容器共享的資源。Pod支持多種容器環境,Docker則是最流行的容器環境。

  • 單容器Pod —常見的應用方式
  • 多容器Pod , 對於多容器PodKubernetes會保證所有的容器都在同一臺物理主機或虛擬主機中運行。多容器Pod是相對高階的使用方式,除非應用耦合特別嚴重,一般不推薦使用這種方式。一個Pod內的容器共享IP地址和端口範圍,容器之間可以通過 localhost 互相訪問。

Pod並不提供保證正常運行的能力,因爲可能遭受Node節點的物理故障、網絡分區等等的影響,整體的高可用是Kubernetes集羣通過在集羣內調度Node來實現的。通常情況下我們不要直接創建Pod,一般都是通過Controller來進行管理,但是瞭解Pod對於我們熟悉控制器非常有好處。

1.2 Pod好處

Pod帶來的好處:

  • Pod做爲一個可以獨立運行的服務單元,簡化了應用部署的難度,以更高的抽象層次爲應用部署管提供了極大的方便。
  • Pod做爲最小的應用實例可以獨立運行,因此可以方便的進行部署、水平擴展和收縮、方便進行調度管理與資源的分配。
  • Pod中的容器共享相同的數據和網絡地址空間,Pod之間也進行了統一的資源管理與分配。

1.3 Pod生命週期

像單獨的容器應用一樣,Pod並不是持久運行的。Pod創建後,Kubernetes爲其分配一個UID,並且通過Controller調度到Node中運行,然後Pod一直保持運行狀態直到運行正常結束或者被刪除。在Node發生故障時,Controller負責將其調度到其他的Node中。Kubernetes爲Pod定義了幾種狀態,分別如下:

  • Pending,Pod已創建,正在等待容器創建。經常是正在下載鏡像,因爲這一步驟最耗費時間
  • Running,Pod已經綁定到某個Node並且正在運行。或者可能正在進行意外中斷後的重啓。
  • Succeeded,表示Pod中的容器已經正常結束並且不需要重啓。
  • Failed,表示Pod中的容器遇到了錯誤而終止。
  • Unknown,因爲網絡或其他原因,無法獲取Pod的狀態。

1.4 Pod創建流程

Pod是Kubernetes中最基本的部署調度單元,可以包含container,邏輯上表示某種應用的一個實例。例如一個web站點應用由前端、後端及數據庫構建而成,這三個組件將運行在各自的容器中,那麼我們可以創建包含三個container的pod。
在這裏插入圖片描述
具體的創建步驟包括:

(1)客戶端提交創建請求,可以通過API Server的Restful API,也可以使用kubectl命令行工具。支持的數據類型包括JSON和YAML。

(2)API Server處理用戶請求,存儲Pod數據到etcd。

(3)調度器通過API Server查看未綁定的Pod。嘗試爲Pod分配主機。

(4)過濾主機 (調度預選):調度器用一組規則過濾掉不符合要求的主機。比如Pod指定了所需要的資源量,那麼可用資源比Pod需要的資源量少的主機會被過濾掉。

(5)主機打分(調度優選):對第一步篩選出的符合要求的主機進行打分,在主機打分階段,調度器會考慮一些整體優化策略,比如把容一個Replication Controller的副本分佈到不同的主機上,使用最低負載的主機等。

(6)選擇主機:選擇打分最高的主機,進行binding操作,結果存儲到etcd中。

(7)kubelet根據調度結果執行Pod創建操作: 綁定成功後,scheduler會調用APIServer的API在etcd中創建一個boundpod對象,描述在一個工作節點上綁定運行的所有pod信息。運行在每個工作節點上的kubelet也會定期與etcd同步boundpod信息,一旦發現應該在該工作節點上運行的boundpod對象沒有更新,則調用Docker API創建並啓動pod內的容器。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章