kube scheduler原始碼走讀

2021-09-25 18:11:57 字數 1598 閱讀 7409

螞蟻金服kubernetes方向招聘

kube-scheduler是k8s中相對比較簡單的乙個服務,它監聽api server獲取新建的pod,從眾多的node中選擇乙個合適的,來執行該pod。

選擇的過程分兩個階段:預選階段 & 優選階段

本文簡單的跟進一下kube-scheduler執行的整個流程。

入口**:

#同樣基於cobra包開發,

cmd := &cobra.command

},}// runcommand runs the scheduler.

func runcommand(cmd *cobra.command, args string, opts *options.options) error )

//根據當前的feature gates對排程的演算法做一些裁剪

// todo: make configurable?

//啟動排程服務

return run(cc, stopch)}

繼續看run函式

// run executes the scheduler based on the given configuration. it only return on error or when stopch is closed.

func run(cc schedulerserverconfig.completedconfig, stopch <-chan struct{}) error

ctx, cancel := context.withcancel(context.todo()) // todo once run() accepts a context, it should be used here

defer cancel()

go func()

}()// leader election is disabled, so runcommand inline until done.

run(ctx)

return fmt.errorf("finished without leader elect")

}

這裡邊重要的函式就兩個,

乙個是scheduler.new() 構建了乙個scheduler物件,關聯了各個informer的動作;

乙個是run(ctx),啟動排程服務,run(ctx)最終會呼叫函式:scheduleone;

先看下scheduleone函式

// scheduleone does the entire scheduling workflow for a single pod.  it is serialized on the scheduling algorithm's host fitting.

func (sched *scheduler) scheduleone()

//採用排程演算法選擇乙個合適的node來執行該pod

scheduleresult, err := sched.schedule(pod)

assumedpod := pod.deepcopy()

#根據排程結果scheduleresult, 將pod繫結到對應的node上

}

AbstractCollection原始碼分析

abstractcollection抽象類提供了collection的骨架實現,collection分析請看 這裡直接看它的 是如何實現的.public abstract iterator iterator 該方法沒有實現.public abstract int size 該方法沒有實現.publi...

ThreadPoolExecutor原始碼閱讀

執行緒池解決兩個問題 一是復用執行緒,減少建立銷毀執行緒帶來系統開銷 二是限定系統資源使用邊界,避免大量執行緒消耗盡系統記憶體 適用於互不依賴,執行時間短,不需要對執行緒控制操作的執行緒 新增任務時,1.若執行緒數量小於corepoolsize,則新增執行緒執行任務 2.若執行緒數量大於等於core...

OrangePi One Android 原始碼編譯

一 系統環境搭建參照 二 lichee原始碼編譯 1.檢視help build.sh h2.配置核心 cd linux 3.4 make arch arm menuconfig 進入配置頁面,上下移動列表,空格是選擇列表,左右移動選擇退出選項 3.首次編譯執行清除 在 lichee linux3.4...