1000節(jié)點(diǎn)集群,5秒搭建好
你是否曾想過在幾秒鐘內(nèi)搭建一個(gè)由數(shù)千個(gè)節(jié)點(diǎn)構(gòu)成的集群,如何用少量資源模擬真實(shí)的節(jié)點(diǎn), 如何不耗費(fèi)太多基礎(chǔ)設(shè)施就能大規(guī)模地測試你的 Kubernetes 控制器?
如果你曾有過這些想法,那你可能會對 KWOK 有興趣。KWOK 是一個(gè)工具包,能讓你在幾秒鐘內(nèi)創(chuàng)建數(shù)千個(gè)節(jié)點(diǎn)構(gòu)成的集群。

什么是 KWOK?
KWOK 是 Kubernetes WithOut Kubelet 的縮寫,即沒有 Kubelet 的 Kubernetes。到目前為止,KWOK 提供了兩個(gè)工具:
??
kwok
?是這個(gè)項(xiàng)目的基石,負(fù)責(zé)模擬偽節(jié)點(diǎn)、Pod 和其他 Kubernetes API 資源的生命周期。??
kwokctl
?是一個(gè) CLI 工具,設(shè)計(jì)用于簡化創(chuàng)建和管理由?kwok
?模擬節(jié)點(diǎn)組成的集群。
為什么使用 KWOK?
KWOK 具有下面幾點(diǎn)優(yōu)勢:
??速度:你幾乎可以實(shí)時(shí)創(chuàng)建和刪除集群及節(jié)點(diǎn),無需等待引導(dǎo)或制備過程。
??兼容性:KWOK 能夠與兼容 Kubernetes API 的所有工具或客戶端(例如 kubectl、helm、kui)協(xié)同作業(yè)。
??可移植性:KWOK 沒有特殊的軟硬件要求。一旦安裝了 Docker 或 Nerdctl,你就可以使用預(yù)先構(gòu)建的鏡像來運(yùn)行 KWOK。另外,二進(jìn)制文件包適用于所有平臺,安裝簡單。
??靈活:你可以配置不同類型的節(jié)點(diǎn)、標(biāo)簽、污點(diǎn)、容量、狀況等,還可以配置不同的 Pod 行為和狀態(tài)來測試不同的場景和邊緣用例。
??性能:你在自己的筆記本電腦上就能模擬數(shù)千個(gè)節(jié)點(diǎn),無需大量消耗 CPU 或內(nèi)存資源。
使用場景是什么?
KWOK 可用于各種用途:
??學(xué)習(xí):你可以使用 KWOK 學(xué)習(xí) Kubernetes 概念和特性,無需顧慮資源浪費(fèi)或其他后果。
??開發(fā):你可以使用 KWOK 為 Kubernetes 開發(fā)新特性或新工具,無需接入真實(shí)的集群,也不需要其他組件。
??測試:
??你可以衡量自己的應(yīng)用程序或控制器在使用不同數(shù)量節(jié)點(diǎn)和 Pod 時(shí)的擴(kuò)縮表現(xiàn)如何。
??你可以用不同的資源請求或限制創(chuàng)建大量 Pod 或服務(wù),在集群上營造高負(fù)載的環(huán)境。
??你可以通過更改節(jié)點(diǎn)狀況或隨機(jī)刪除節(jié)點(diǎn)來模擬節(jié)點(diǎn)故障或網(wǎng)絡(luò)分區(qū)。
??你可以通過啟用不同的特性門控或 API 版本來測試控制器如何與其他組件交互。
有哪些限制?
KWOK 并非試圖完整替代其他什么。當(dāng)然也有一些限制需要你多加注意:
??功能性:KWOK 不是 kubelet。KWOK 在 Pod 生命周期管理、卷掛載和設(shè)備插件方面所展現(xiàn)的行為與 kubelet 不同。?KWOK 的主要功能是模擬節(jié)點(diǎn)和 Pod 狀態(tài)的更新。
??準(zhǔn)確性:需要重點(diǎn)注意?KWOK 還不能確切地反映各種工作負(fù)載或環(huán)境下真實(shí)節(jié)點(diǎn)的性能或行為。KWOK 只能使用一些公式來逼近真實(shí)的節(jié)點(diǎn)行為。
??安全性:KWOK 沒有對模擬的節(jié)點(diǎn)實(shí)施任何安全策略或安全機(jī)制。KWOK 假定來自 kube-apiserver 的所有請求都是經(jīng)過授權(quán)且是有效的。
kwok的主要組件是一個(gè)Kubernetes控制器,它模擬集群資源,包括節(jié)點(diǎn)和pod。這可以在現(xiàn)有的 Kubernetes 集群(即 Kind)上完成,或者你可以使用提供的 kwokctl 工具創(chuàng)建類似集群。

KWOK入門
該項(xiàng)目相當(dāng)新,可以使用Homebrew進(jìn)行安裝。
如果你不使用 Homebrew,那么你將需要執(zhí)行幾個(gè)步驟。
安裝kwokctl
安裝kwok
這將在你的本地計(jì)算機(jī)上安裝兩個(gè)二進(jìn)制文件:
? kwokctl — 也是一個(gè) CLI 管理,允許你使用 Docker 建立獨(dú)立集群(類似于 Kind 集群)。
? kwok — 負(fù)責(zé)模擬集群及其資源的資源控制器。
創(chuàng)建集群
要在本地模擬假集群,請確保你的 Docker 守護(hù)進(jìn)程已啟動(dòng)并正在運(yùn)行。然后使用以下命令創(chuàng)建集群:
這將下載并運(yùn)行必要的 Docker 鏡像來設(shè)置新集群。你可以通過以下方式驗(yàn)證這一點(diǎn):
驗(yàn)證集群是否已創(chuàng)建:
啟動(dòng)資源控制器
接下來,你需要啟動(dòng) kwok 資源控制器。你可以通過在單獨(dú)的終端中運(yùn)行 kwok 二進(jìn)制文件(如此處演示)來完成此操作。你還可以在集群中運(yùn)行控制器(有關(guān)詳細(xì)信息,請參閱 kwok 文檔)。
上面的命令啟動(dòng) kwok 資源控制器,并指定該控制器將所有節(jié)點(diǎn)作為 Kwok 節(jié)點(diǎn)進(jìn)行管理。由于該集群不與另一個(gè)集群共享,因此這是有道理的。否則,你需要添加其他參數(shù)來過濾 Kwok 節(jié)點(diǎn)和資源。
添加節(jié)點(diǎn)
接下來,使用節(jié)點(diǎn)定義創(chuàng)建一個(gè)文件,如下所示。你可以將任意數(shù)量的節(jié)點(diǎn)添加到你想要模擬的 YAML 文件中。
接下來,我們需要將節(jié)點(diǎn)應(yīng)用到集群中。執(zhí)行此操作之前,請確保你使用正確的集群上下文:
然后,使用 kubectl 工具應(yīng)用節(jié)點(diǎn):
成功應(yīng)用 YAML 后,你可以在集群中看到你的節(jié)點(diǎn):
部署應(yīng)用
現(xiàn)在你已經(jīng)有了一個(gè)運(yùn)行著多個(gè)假節(jié)點(diǎn)的 kwok 集群,你可以向其部署應(yīng)用,就像它是一個(gè)真正的集群一樣。
定義具有大量副本的Deployment。
和以前一樣,你可以根據(jù)需要添加任意數(shù)量的虛假資源。接下來,應(yīng)用 YAML 文件,如下所示:
幾秒鐘之內(nèi),你將看到你的假資源出現(xiàn)在集群中:
總結(jié)
相比于kubemark
,kubemark是一個(gè) kubelet,實(shí)際上并不運(yùn)行容器。它的行為與 kubelet 完全相同,這意味著模擬大量節(jié)點(diǎn)和 pod 需要大量內(nèi)存。然而,kwok只是模擬節(jié)點(diǎn)的行為。因此,它可以使用很少的內(nèi)存來模擬大量節(jié)點(diǎn)和 Pod。
相比于kind
,kind在 Docker 中運(yùn)行 Kubernetes,創(chuàng)建一個(gè)真正的集群。kwokctl
在某些不需要實(shí)際運(yùn)行任何 pod 的場景中,可以用作?kind的替代方案。
簡而言之,Kwok 是云原生生態(tài)系統(tǒng)的一個(gè)重要補(bǔ)充,能讓你在幾秒鐘內(nèi)創(chuàng)建數(shù)千個(gè)節(jié)點(diǎn)構(gòu)成的集群,用來測試集群和應(yīng)用的性能是如此地絲滑和簡便。
偶逗趣事,明月清風(fēng),與君同坐。
琦彥,在云原生百寶箱