1、准備好一個包含應用程序的Deployment的yml文件,然后通過kubectl客戶端工具發送給ApiServer。
2、ApiServer接收到客戶端的請求並將資源內容存儲到數據庫(etcd)中。
3、Controller組件(包括scheduler、replication、endpoint)監控資源變化並作出反應。
4、ReplicaSet檢查數據庫變化,創建期望數量的pod實例。
5、Scheduler再次檢查數據庫變化,發現尚未被分配到具體執行節點(node)的Pod,然后根據一組相關規則將pod分配到可以運行它們的節點上,並更新數據庫,記錄pod分配情況。
6、Kubelete監控數據庫變化,管理后續pod的生命周期,發現被分配到它所在的節點上運行的那些pod。如果找到新pod,則會在該節點上運行這個新pod。
7、kuberproxy運行在集群各個主機上,管理網絡通信,如服務發現、負載均衡。例如當有數據發送到主機時,將其路由到正確的pod或容器。對於從主機上發出的數據,它可以基於請求地址發現遠程服務器,並將數據正確路由,在某些情況下會使用輪訓調度算法(Round-robin)將請求發送到集群中的多個實例。
kubectl提交一個請求,來創建RC,此時Controller Manager通過API server里的接口監聽到這個RC事件,分析之后,發現當前集群中還沒有它對應的Pod實例,於是根據RC里的Pod模板定義 個Pod對象;接下來,此事件被Scheduler發現,它立即執行一個復雜的調度流程,為這個新Pod選定一個落戶的Node,這個過程可稱為綁定;隨后模板Node上運行的Kubelet進程通過API Server監測到這個“新生的”Pod並按照它的定義,啟動Pod並負責后期的管理;
隨后我們通過Kubectl提交一個映射到該Pod的Server的創建請求,Controller Manager會通過Label標簽查詢到相關聯的Pod實例,然后生成Service的Endpoints信息;接下來,所有Node上運行的Proxy進程通過API Server查詢並監聽Service對象及其對應的Endpoints信息,建立一個負載均衡器來實現Service訪問到后端Pod的流量轉發功能;