Krustlet:使用Rust開發的kubelet,用於運行WASM工作負載

Deis Labs發佈了Krustlet,一個用Rust開發的開源Kubernetes kubelet,用於在Kubernetes中運行WebAssembly工作負載。在某種程度上,Krustlet的初始版本是一種概念驗證,因爲它還不支持Pod事件或Init容器等特性。應用程序必須實現WebAssembly系統接口(WASI),因爲Krustlet只支持WebAssembly容器。

WebAssembly,也稱爲WASM,是一種二進制格式,用於棧式虛擬機。它對執行速度進行了優化,佔用空間小,也是一種開放的Web標準。WASM以其在瀏覽器方面的應用(如微軟的Blazor框架)而聞名,不過Mozilla最近推出了WASI,這樣就可以讓編譯器以這個接口作爲編譯目標,而不是操作系統。在服務器端支持WASM爲用戶提供了另一種Docker之外的容器運行時選擇,而這就是Krustlet所提供的。

此外,Lin Clark在Mozilla博客上解釋說,從安全的角度來看,“如果調用一個需要訪問文件的函數,必須傳入一個帶有權限限制的文件描述符”。WASI可用於構建只有顯式權限的沙箱環境,從而提高了容器的安全性。

圖片來源: Standardizing WASI: A system interface to run WebAssembly outside the web.

Krustlet的初始版本支持基本的Pod生命週期、用於露出Pod或容器字段的API、環境變量和宿主卷、secrets或configMaps。不過,Kurstlet還沒有準備好投入生產使用。例如,Krustlet不支持ARM處理器、Init容器、雲提供商數據卷、Pod事件、Pod Condition,並且只支持部分在Windows上運行。此外,Krustlet通過提供程序與給定的運行時發生交互,支持waSCCWASI(支持的WASM運行時在不斷增加)。

實際上,Kubelet是使用Rust實現的一種Kubernetes kubelet。它監聽Kubernetes API,以獲取新的Pod請求(在集羣中運行基於WASI的應用程序),只要請求事件與節點選擇器是匹配的。因此,要在Krustlet節點上運行應用程序,用戶可以使用taints、tolerations和節點選擇器。此外,用戶必須爲應用程序生成WebAssembly二進制文件。如果應用程序是用C語言開發的,就用clang,如果應用程序是用Rust開發的,就用cargo。然後,用戶必須使用wasm-to-oci打包,並將容器鏡像推送到容器註冊中心。要部署應用程序,用戶需要定義一個Kubernetes清單,其中包含tolerations,如下所示:

apiVersion: v1
kind: Pod
metadata:
  name: wasm-app
spec:
  containers:
    - name: wasm-app
      image: registry/wasm-app:v1.0.0
  tolerations:
    - key: "krustlet/arch"
      operator: "Equal"
      value: "wasm32-wasi"
      effect: "NoExecute"

一個構建、推送和部署應用程序到Kurstlet節點的典型工作流如下:

clang main.c -o demo.wasm
wasm-to-oci push demo.wasm registry/wasm-app:v1.0.0
kubectl apply -f wasm-app.yaml

對於想要在現有Kubernetes集羣中使用Krustlet的人,該項目爲他們提供了指南,包括如何在不同集羣部署(如Azure Kubernetes Service(AKS)、Amazon Elastic Kubernetes Service(EKS)、MicroK8s、Minikube等)中啓動工作節點。

Krustlet的開發非常活躍,每個版本都有一個完整的問題列表,他們計劃接下來解決這些問題。例如,Krustlet的最新版本是v0.3.0,在這個版本中,用戶可以看到有哪些新特性、接下來會有什麼以及他們計劃修復的已知問題列表。對於即將發佈的版本,Krustlet正在努力爲網絡、雲存儲卷提供程序和一些Pod Condition等提供支持。

如果社區開發者對學習或參與貢獻感興趣,可以在GitHub上發佈問題,或者每週一加入Zoom每週電話會議

原文鏈接

Krustlet: a kubelet Written in Rust to Run WebAssembly Workloads in Kubernetes

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章