感謝評審的青睞,讓這份作品取得分組優選的好成績。在得獎的同時,Gthulhu 也成功收錄至 CNCF Landscape:
新的一年我將繼續努力,爭取讓 Gthulhu 成為 CNCF 第一個 MIT 的開源專案 [cncf/sandbox #426]。
要讓 Gthulhu 能夠管理多個節點的工作負載,以原本 API Server 的架構有諸多困難:
因此,我們套用了 k8s 常見的 operator pattern + sidecar pattern 來解決這個問題:

API server 改為支援兩種模式,分別是 manager 與 decision maker:
manger 只需要有一個(k8s deployment with replica = 1)。
decision maker 每一個 node 都需要一個(k8s daemonset?)。
manager 提供前端與使用者相關 API,接受使用者給的 intent(也就是 json 格式的資料,包含 prioriy、execution time 以及 label selector)。
manger 是 k8s client,知道哪些 pod 運作在哪些 node 上。
manager 會用 policy 找到對應的 pod,看這些 pod 位於哪些節點,將 intent 轉發給目標節點上的 decision maker。
decision maker 與 host 共享 PID namespace,根據 manager 傳來的 intent 找出 match 的 PIDs,最後靜靜等待 Gthulhu 定期向它抓取策略。
Manager 作為中央管理服務,負責:
Decision Maker(節點代理)以 sidecar 形式部署在每個 Kubernetes 節點上的 scheduler pod,負責:
如果 Decision Maker 使用 DaemonSet 部署,乍看之下也會讓每個節點都存在一個 Decision Maker,但我們無法讓 Gthulhu scheduler 透過 K8s 的 Service 機制找到自身所處節點上的 Decision Maker,故我們只能採用 Sidecar 的形式來解決這個問題。
gthulhu.scheduler@gmail.com 詢問。