Containerd 新增支持一种新容器类型:Wasm 容器

runwasi 项目正式加入 containerd,支持 Wasm 容器

近期,由微软、Docker 和 Second State 共同贡献的 runwasi 项目正式加入 containerd。这一举措使得 containerd 能够支持一种新型容器:Wasm(WebAssembly)容器。containerd 是目前最广泛使用的容器运行时之一,自 2021 年起成为 Kubernetes 的默认容器运行时。Docker 也在将其底层容器运行时切换为 containerd。自诞生以来,containerd 仅支持一种容器类型:Linux 容器。

Wasm 容器的特点与优势

Wasm 容器是符合 OCI 标准的容器,可以使用标准容器工具进行构建、共享和存储。然而,Wasm 容器内部没有 Linux 库,通常只包含一个编译后的 Wasm 字节码文件。这使得 Wasm 容器比同等的 Linux 容器更小、启动更快、更安全且更具可移植性。runwasi shim 通过 WasmtimeWasmEdge 在容器中解包并执行 Wasm 文件。

示例:使用 containerd 运行 Wasm 容器

以下示例展示了如何使用 containerd 的 ctr CLI 从仓库拉取 Wasm 镜像并在 runwasi 的 WasmEdge 运行时中运行它:

$ sudo ctr run --rm \
    --runtime=io.containerd.wasmedge.v1 \
    ghcr.io/containerd/runwasi/wasi-demo-app:latest \
    testwasm /wasi-demo-app.wasm echo 'hello'

hello
exiting

Docker + Wasm 技术预览

在现实应用中,containerd 通常嵌入到其他容器管理工具中,如 Docker 和 Kubernetes。Docker + Wasm 基于 runwasi 构建,使得 Docker Desktop 能够构建、共享和运行 Wasm 容器。以下示例展示了如何使用 Docker 拉取 Python 的 Wasm 容器镜像并启动 REPL:

docker run --rm \
  -i \
  --runtime=io.containerd.wasmedge.v1 \
  --platform=wasm32/wasi \
  ghcr.io/vmware-labs/python-wasm:3.11.1-latest \
  -i
  
Python 3.11.1 (tags/v3.11.1:a7a450f, Jan 27 2023, 11:37:16) ...  on wasi
Type "help", "copyright", "credits" or "license" for more information.
>>> print("Hello " + str.upper("WasmEdge"))
Hello WASMEDGE

与典型的 Linux 容器镜像相比,Wasm 容器镜像显著更小。例如,VMware Wasm Labs 开发的 Python Wasm 容器镜像仅为 6.8MB,而典型的 Linux 容器镜像超过 1GB。

Kubernetes 生态系统中的 runwasi 集成

除了 Docker,Kubernetes 生态系统项目如 k3s 也开始将 runwasi 集成到其嵌入式 containerd 运行时中。微软的 Azure Kubernetes Service (AKS) 使用 runwasi 创建 Wasm 节点池并运行 Wasm 工作负载(预览版)。

其他部署选项

通过 crun-based approaches,由 Red Hat 和 WasmEdge 开创,开发者在云中部署 Wasm 容器有多种选择。

runwasi 开源项目

runwasi 项目最初由微软创建,使用 Rust 编写。开发者可以通过 GitHub 参与和贡献 runwasi 开源项目,该项目基于 Apache 2.0 许可证。

阅读 158
0 条评论