Pod是Kubernetes中最基本的部署調度單元,可以包含container,邏輯上表示某種應用的一個實例。例如一個web站點應用由前端、后端及數據庫構建而成,這三個組件將運行在各自的容器中,那么我們可以創建包含三個container的pod。本文將對Kubernetes的基本處理流程做一個簡單的分析。
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內的容器。