我們在前面介紹了在常見的兩個排程設定,但是在實務上會有一個很實際的問題:我們要怎麼測試?
最直覺地抓住第一個想法,就是創造一個 Kubernetes Labs 作為實驗環境,然後佈署一些 Node,然後佈署排程設定測試。
但是這樣會有幾個問題:
測試成本與可行性:如果是私有雲,不會隨時都有足夠數量的機器讓你建置這個測試環境,如果是公有雲,你理想上可以部屬很多機器,但是你錢也要很多。
測試大集群:如果是大規模集群的佈署,100+ Node,就代表你要啟動 100+ Node 加入,Node 的加入以及退出都需要時間,還經常需要對特定的 Node 打標籤,但是這些設定在測試環境銷毀之後很難在下一次重用,因為 Node Label 通常來自於 kubelet
除錯與分析:複雜的排程設定會互相影響,比如說 Affinity 以及 topologySpreadConstraints 來設定排程,為了細膩的設定,我們會需要知道這兩個 Plugin 的分數為何。
舉一個常見的應用情境:如果要測試 DR 發生的排程,這樣會花太多時間以及費用在測試。
為了解決這個問題,我們迎來了 kube-scheduler-simulator 這個專案。
kube-scheduler-simulator 從名字看來,就是一個可以模擬 Kubernetes Scheduling 的工具,它提供了以下功能
建立一個 fake cluster,讓我們可以用很小的資源佈署數千個 Node 以及 Pod
提供 debuggable scheduler
由於背後接的依然是 Kubernetes API Server,所以可以用 kubectl 相關工具測試,原生也提供 UI 介面來操作
如何安裝 kube-scheduler-simulator
由於 go plugin 要求強一致編譯,因此,我們要從 source code 開始編譯 kube-scheduler-simulator,我們會用 Docker compose 來做這件事
git clone git@github.com:kubernetes-sigs/kube-scheduler-simulator.git
cd kube-scheduler-simulator
make docker_build
make docker_up_local
訪問本地的 3000 端口,就可以看到了
http://localhost:3000/
這樣就安裝好 kube-scheduler-simulator 了,接下來文章就要來測試各種排程策略啦
https://github.com/kubernetes-sigs/kube-scheduler-simulator