kubernetes 建立pod 的 工作流:
1、kubectl 向 k8s api server 發起乙個create pod 請求(即我們使用kubectl敲乙個create pod命令) 。
2、k8s api server接收到pod建立請求後,不會去直接建立pod;而是生成乙個包含建立資訊的yaml。
3、apiserver 將剛才的yaml資訊寫入etcd資料庫。到此為止僅僅是在etcd中新增了一條記錄, 還沒有任何的實質性進展。
4、scheduler 檢視 k8s api ,類似於通知機制。首先判斷:pod.spec.node == null?若為null,表示這個pod請求是新來的,需要建立;因此先進行排程計算,找到最「閒」的node。
然後將資訊在etcd資料庫中更新分配結果:pod.spec.node = nodea (設定乙個具體的節點)
ps:同樣上述操作的各種資訊也要寫到etcd資料庫中。
5、kubelet 通過監測etcd資料庫(即不停地看etcd中的記錄),發現 k8s api server 中有了個新的node;
如果這條記錄中的node與自己的編號相同(即這個pod由scheduler分配給自己了);
則呼叫node中的docker api,建立container。
k8s pod的yaml檔案詳解
apiversion v1 版本 kind pod 型別,pod metadata 元資料 name string 元資料,pod的名字 namespace string 元資料,pod的命名空間 labels 元資料,標籤列表 name string 元資料,標籤的名字 annotations 元...
k8s pod的狀態為evicted
使用kubectl get pods,發現很多pod的狀態為evicted。原因eviction,即驅趕的意思,意思是當節點出現異常時,kubernetes將有相應的機制驅趕該節點上的pod。多見於資源不足時導致的驅趕。解決方案 排查資源和異常原因,防止新的驅趕產生。使用如下命令刪除舊驅趕的遺留 k...
k8s pod 在節點間排程控制
部落格作為學習筆記記錄,若有理解,表述錯誤,歡迎指出。k8s起pod時,會通過排程器scheduler選擇某個節點完成排程,選擇在某個節點上完成pod建立。當需要在指定pod執行在某個節點上時,可以通過以下幾種方式 1.在部署pod的yaml中,指定nodename 指定了nodename的pod會...