
kubernetes Pod創建 的 工作流:
第一步:
kubectl 向api server 發起一個create pod 請求
第二步:
api server接收到pod創建請求后,不會去直接創建pod,而是生成一個包含創建信息的yaml。
第三步:
apiserver 將剛才的yaml信息寫入etcd數據庫。到此為止僅僅是在etcd中添加了一條記錄, 還沒有任何的實質性進展。
第四步:
scheduler 查看 k8s api ,類似於通知機制。
首先判斷:pod.spec.Node == null?
若為null,表示這個Pod請求是新來的,需要創建;因此先進行調度計算,找到最“閑”的node。
然后將信息在etcd數據庫中更新分配結果:pod.spec.Node = nodeA (設置一個具體的節點)
ps:同樣上述操作的各種信息也要寫到etcd數據庫中中。
首先判斷:pod.spec.Node == null?
若為null,表示這個Pod請求是新來的,需要創建;因此先進行調度計算,找到最“閑”的node。
然后將信息在etcd數據庫中更新分配結果:pod.spec.Node = nodeA (設置一個具體的節點)
ps:同樣上述操作的各種信息也要寫到etcd數據庫中中。
第五步:
kubelet 通過監測etcd數據庫(即不停地看etcd中的記錄),發現api server 中有了個新的Node;
如果這條記錄中的Node與自己的編號相同(即這個Pod由scheduler分配給自己了);
則調用node中的docker api,創建container。
如果這條記錄中的Node與自己的編號相同(即這個Pod由scheduler分配給自己了);
則調用node中的docker api,創建container。