作者丨B. Cameron Gain
編譯丨諾亞
出品 | 51CTO技術(shù)棧(微信號(hào):blog51cto)
雖然WebAssembly (Wasm)已被證明在瀏覽器和某些有針對(duì)性的服務(wù)器部署中可以很好地工作,但允許開發(fā)人員“一次部署,隨處部署”的標(biāo)準(zhǔn)化組件模型尚未實(shí)現(xiàn)。
當(dāng)開發(fā)人員可以將代碼加載到 Wasm 模塊中,并將其同時(shí)部署在能夠運(yùn)行 CPU 指令集的各種環(huán)境和設(shè)備類型中時(shí),這一愿景就會(huì)實(shí)現(xiàn)。更具體地說,開源社區(qū)在努力開發(fā) Wasi,致力于在許多方面將Wasm模塊連接到組件的標(biāo)準(zhǔn)接口或API。但是,我們還沒有到那一步。
然后是 Kubernetes。
容器和 Kubernetes 環(huán)境已基本準(zhǔn)備好進(jìn)行 Wasm 模塊部署,而 Wasm 模塊也已基本準(zhǔn)備好在 Kubernetes 上部署。盡管有傳言說 Wasm 有朝一日可能會(huì)取代容器——甚至是 Kubernetes——但一個(gè)非常好的結(jié)合WebAssembly和Kubernetes的契機(jī)正在出現(xiàn)。
1、將 Wasm 與 Kubernetes 結(jié)合使用的優(yōu)勢
將 Wasm 與 Kubernetes 一起使用具有一些內(nèi)在優(yōu)勢。例如:安全性。由于 Wasm 二進(jìn)制文件的冷啟動(dòng)時(shí)間以毫秒為單位,而某些虛擬機(jī)的冷啟動(dòng)時(shí)間可能以分鐘為單位,因此 Wasm 的安全模型實(shí)際上比容器和 Kubernetes 的安全模型要強(qiáng)一些。這是因?yàn)闊o法立即訪問 Linux 內(nèi)核。
所有代碼都是通過 Wasm 主機(jī)運(yùn)行時(shí)中介的,這意味著你可以攔截所有的系統(tǒng)調(diào)用——至少在理論上是這樣。換句話說,Wasm 可以在容器和 Kubernetes 集群中提供額外的安全層。
目前還不能做到:點(diǎn)擊一個(gè)簡單的按鈕就在 Kubernetes 上部署 Wasm 模塊。但一些供應(yīng)商,如 Fermyon,已經(jīng)提供了在容器和 Kubernetes 上部署 Wasm 的無服務(wù)器服務(wù)。
這一進(jìn)步很大程度上歸功于對(duì) Wasm 的容器支持,以及 Docker 在 2022 年引入了對(duì) Wasm 的 beta 支持。從那時(shí)起,它就成為 Kubernetes 支持高度分布式部署的主要推動(dòng)者,并允許用戶隨意啟動(dòng)和關(guān)閉由 Wasm 模塊組成的應(yīng)用程序。
Containerd的使用也起著重要作用,container shim是有助于將容器與運(yùn)行時(shí)代碼集成的進(jìn)程。
Fermyon聯(lián)合創(chuàng)始人兼首席執(zhí)行官M(fèi)att Butcher提到:“微軟和許多其他公司將Wasm shim(就像Spin shim)添加到containerd項(xiàng)目中所做的工作是在Docker桌面版和許多Kubernetes發(fā)行版上解鎖Wasm的原因?!?/p>
Butcher說,Docker Desktop和Microsoft Azure AKS都率先展示了如何做到這一點(diǎn)。最近,他指出,Civo 在其 Kubernetes 產(chǎn)品中引入了支持,“這表明大大小小的云提供商正在促進(jìn)向 WebAssembly 的轉(zhuǎn)變”。
2、Wasm 和 OpenShift
其他軟件制造商和服務(wù)提供商也正在登上契合Wasm 的 Kubernetes 列車。其中包括紅帽,它已經(jīng)在調(diào)整 OpenShift 以適應(yīng) Wasm 模塊并支持 Ferymon 的 Spin。紅帽將 Wasm 視為一種有趣的跨平臺(tái)開發(fā)方法,并為相關(guān)的上游社區(qū)做出了貢獻(xiàn)。
紅帽首席軟件工程師 Ivan Font介紹,截至今天,Kubernetes 提供了運(yùn)行基于 Wasm 的工作負(fù)載所需的編排和基礎(chǔ)設(shè)施,這為現(xiàn)有的 Kubernetes 投資提供了額外的靈活性。
截至目前,紅帽的平臺(tái)中還沒有 Wasm 的產(chǎn)品化。但該公司表示,它將繼續(xù)與其他供應(yīng)商和社區(qū)合作,根據(jù)用戶組織的需求開發(fā)其潛力。
紅帽正在開發(fā) Spin 以在 OpenShift 上運(yùn)行,并為 Wasi(Wasm 和組件接口)和 WasmEdge 的開發(fā)做出貢獻(xiàn),WasmEdge 是為云原生(當(dāng)然是 Kubernetes)、邊緣和去中心化應(yīng)用程序創(chuàng)建的可擴(kuò)展 Wasm 運(yùn)行時(shí)。根據(jù) WasmEdge 文檔,WasmEdge 還為無服務(wù)器應(yīng)用程序、嵌入式功能、微服務(wù)、智能合約和物聯(lián)網(wǎng)設(shè)備提供支持。
就目前而言,紅帽的 OpenShift 默認(rèn)使用 WasmEdge,因?yàn)?Fedora Linux 發(fā)行版已經(jīng)支持了一個(gè)紅帽包管理器(RPM),并且紅帽為 Wasm 提供了額外的支持。
“但是,你可以使用任何一個(gè),因?yàn)閮蓚€(gè) WebAssembly 運(yùn)行時(shí)都在朝著類似的方向發(fā)展,”Font 說?!八鼈兌紝W⒂谶吘墸⒕哂腥斯ぶ悄芄δ艿取!?/p>
要將特定工作負(fù)載作為基于 Wasm 的工作負(fù)載運(yùn)行以在 OpenShift 上執(zhí)行,你目前需要指定一個(gè)注解,指示你要執(zhí)行的操作。此執(zhí)行是在容器內(nèi)完成的,但它具有獨(dú)特的特征。
當(dāng) Wasm 應(yīng)用程序被打包時(shí),它只是鏡像中的一個(gè)模塊。這意味著開放容器計(jì)劃 (OCI) 容器映像不包含任何外部依賴項(xiàng)或完整的操作系統(tǒng)文件系統(tǒng)。因此,圖像大小非常小,因?yàn)樗鼈冎话愕?Wasm 模塊。Font 說,這通常適用于容器,而 OCI 是這方面的標(biāo)準(zhǔn)。
Butcher 說,F(xiàn)ermyon 一直在與 KWasm 的創(chuàng)建者 Liquid Reply 以及紅帽合作,以在 OpenShift 的 Wasm 功能和基于容器的 Kubernetes 發(fā)行版之間實(shí)現(xiàn)一定程度的對(duì)等。他說,這種合作“從企業(yè)級(jí)AKS延伸到微型K3”。
3、更多適用于 Wasm 和 Kubernetes 的工具即將到來
開發(fā)人員將有更多的工具可用于在 Kubernetes 集群上構(gòu)建和部署應(yīng)用程序,Civo 的現(xiàn)場首席技術(shù)官兼云原生計(jì)算基金會(huì)大使 Saiyam Pathak如是認(rèn)為。
“如果你有一個(gè) Kubernetes 集群,你可以簡單地再添加一個(gè)負(fù)載,使它為WebAssembly做好準(zhǔn)備?!盤athak 說。
Pathak 說,這個(gè)過程很簡單:它包括確保一切都配置正確,包括重新啟動(dòng) containerd、編輯 containerd .normal 文件以及在該特定節(jié)點(diǎn)上使用 Wasm 運(yùn)行時(shí)。然后它就可以運(yùn)行你的 Wasm 工作負(fù)載了。
Pathak說:“這太棒了,因?yàn)槟悻F(xiàn)在可以使用過去10年一直使用的相同工具和部署過程,將最新的WebAssembly技術(shù)用于你的下一組應(yīng)用程序。無論你是構(gòu)建 API 還是擴(kuò)展你的應(yīng)用程序,你都可以在同一個(gè)基礎(chǔ)設(shè)施和 Kubernetes 集群中使用 WebAssembly,以及 Docker?!?
Kasten 提供 Kubernetes 數(shù)據(jù)管理平臺(tái)和災(zāi)難恢復(fù)支持,它著眼于 Wasm 在其 Kasten K10 平臺(tái)的技術(shù)能力和支持客戶方面的實(shí)用性。Wasm 不是數(shù)據(jù)移動(dòng)支持的綜合解決方案,但它是 Kasten 正在為 Kubernetes 尋找的東西,因?yàn)?Kasten 正在探索如何在 K10 中使用 Wasm。
“作為一個(gè) Kubernetes 原生應(yīng)用,我們正在研究如何利用 WebAssembly 來簡化和使事情更快、更高效、更安全:你從 Wasm 本身獲得的所有好處,”Veeam 全球現(xiàn)場首席技術(shù)官、Kasten 的所有者 Michael Cade還提到:“但 WebAssembly 是一切的答案嗎?也不是。”
相比之下,虛擬機(jī)也不是萬能的,Cade說:“如果我有一張物理硬件卡,在一臺(tái)物理機(jī)器上,在我最重要的應(yīng)用服務(wù)器上,我可能會(huì)虛擬化它,也可能不會(huì)。如果沒有,我永遠(yuǎn)無法將其容器化。”
WebAssembly 蓬勃發(fā)展的地方,尤其是對(duì)于 Kubernetes 來說,是圍繞著三個(gè)“S”(speed, security,support):速度、安全性以及大多數(shù) Web 前端服務(wù)器或 Web 模塊已經(jīng)支持。
4、RunWasi:進(jìn)步的催化劑
開源 RunWasi 項(xiàng)目的進(jìn)展可能會(huì)成為 Wasm-on-Kubernetes 部署的催化劑。RunWasi 的創(chuàng)建是為了通過 containerd 在 Wasm 模塊中支持 Wasm 運(yùn)行時(shí)。
運(yùn)行時(shí)的部署過程是使用 containerd shim完成的,RunWasi 提供必要的代碼。這些shim將 Wasm 模塊從 containerd 編排到部署代碼的低級(jí)運(yùn)行時(shí)。
以下列表顯示了流行的 Wasm containerd shim,由 Microsoft 的 Deis Labs 提供:
- Lunatic,一個(gè)受 Earlang 啟發(fā)的運(yùn)行時(shí),用于快速、健壯和可擴(kuò)展的服務(wù)器端 Wasm 應(yīng)用程序。
- Spin,一個(gè)用于構(gòu)建和運(yùn)行無服務(wù)器 Wasm 應(yīng)用程序的開發(fā)者工具。
- Slight,一個(gè)基于Wasmtime 的運(yùn)行時(shí),用于運(yùn)行使用 SpiderLightning (WASI-Cloud-Core) 功能的 Wasm 應(yīng)用程序。
- Wasm Workers Server,一個(gè)在 Wasm 之上開發(fā)和運(yùn)行無服務(wù)器應(yīng)用程序的工具。
在 10 月初的 Docker 年度用戶大會(huì)上,軟件培訓(xùn)師 Nigel Poulton 展示并描述了他如何使用 Spin 作為 Wasm 框架,在Wasm模塊中為應(yīng)用程序創(chuàng)建Wasm工件,然后將其打包到 Docker 容器中。他還描述了如何設(shè)置一個(gè)多節(jié)點(diǎn) Kubernetes 集群,其中包含一個(gè)控制平面節(jié)點(diǎn)和兩個(gè)工作線程。
至關(guān)重要的是,Poulton 描述了他如何擁有“運(yùn)行這些 Wasm 工作負(fù)載所需的軟件,而且都是簡單的容器化的東西”。
參考鏈接:
https://thenewstack.io/can-kubernetes-solve-webassemblys-component-challenges/



































