您的位置:  首页 > 技术杂谈 > 正文

使用 KinD 启动与管理 WebAssembly 应用

2022-01-13 18:00 https://my.oschina.net/u/4532842/blog/5397157 WasmEdge 次阅读 条评论

使用 KinD 启动与管理 WebAssembly 应用

本文的内容源自 Sven Pfennig 于 2022 年 1 月在 WasmEdge Community Meeting 做的分享。在这次分享中,Pfennig 介绍了自己为什么要在 K8s 集群中运行 WebAssembly 应用程序。以 KinD 与 WasmEdge 为例,他给出了一个容易上手的解决方案。

完整分享可以观看 B 站视频,并附有中文字幕。

背景介绍:

KinD 即 Kubernetes In Docker,顾名思义,就是将 k8s 所需要的所有组件,全部部署在一个 docker 容器中,是一套开箱即用的 k8s 环境搭建方案。可以简单理解为 KinD 是一个简单、容易上手的 k8s 版本,经常被用在本地测试的场景。

WasmEdge 是一个符合 OCI 标准的云原生 WebAssembly runtime,由 CNCF(云原生计算基金会) 托管 。它是当今市场上性能最好的 WebAssembly runtime 之一。 WasmEdge 支持所有的 WebAssembly 标准扩展以及像 Tensorflow 推理、networking、KV 存储和图像处理等的专有扩展。其编译器工具链不仅支持 编译型的语言,如 C/C++、Rust、Swift、Kotlin 和 AssemblyScript,还支持JavaScript与 Python。

为什么 K8s 社区需要 WasmEdge

K8s 社区对高性能和低资源占用的容器有很大需求,尤其是在边缘计算这个应用场景。而 WebAssembly (Wasm) 就是这种高性能、轻量级的容器。Wasm 有比 Linux 容器更好的安全隔离与跨平台支持。边缘设备的资源十分有限,Linux 容器在边缘设备上十分笨重且非常吃资源。 Wasm 的应用可能只是类似的 Linux 容器应用的 1% 大小,这将极大释放边缘设备的算力资源。此外,Wasm 几乎没有冷启动时间,在性能上也优于 Linux 容器 100倍。

Wasm 是 K8s 生态的轻量级的容器的最佳选择。

Krustlet 很好,但是

与 WasmEdge 一样,Krustlet 也是 CNCF 的沙箱项目。Krustlet 在 K8s pod 里面用 Kubelet 来调度 Wasm 镜像。但是在 Pfennig 的场景中,尽管理论上能够在 KinD 里面使用 Krustlet 管理 Wasm 镜像,却面临着下面几个问题:

  • 没有 CNI 容器,没有 daemonsets
  • 需要大量的自定义容限,从而使默认容器远离 Krustlet 节点
  • 没有将流量转移到 Krustlet Pod 的标准做法

所以,如果要使用 Krustlet ,需要对 KinD 进行大量的代码修改,这也不符合 KinD 项目的设计理念。

WasmEdge + crun 比 Krustlet 更加强大易用

crun 是 k8s 生态里面最流行的 OCI 容器运行工具。传统上,它支持 Linux 容器。最近,crun 项目也正式添加了对 WasmEdge 容器镜像的支持,这样只需配置一下 crun,就可以让 K8s 生态中的工具管理 WasmEdge。

基于 WasmEdge 团队提供的使用 K8s 工具管理 WasmEdge 的示例:wasmedge-containers-examples,使用 KinD 节点,将 runc 替换成 crun,调整一下配置,就可以运行起来。更重要的是,在此过程中,不需要对 KinD 进行任何代码修改,依然可以使用标准的 KinD。

此外, WasmEdge 支持了 networking socket,因此 Wasm 应用可以直接使用网络,实现 HTTP 请求与服务等功能。对网络的支持是用 Wasm 实现微服务的一个非常重要的前提。

未来展望

在 K8s 应用中,一个主流的架构是微服务,将复杂应用程序的功能拆分成独立的容器化的服务。而 WasmEdge 特别适合这样的场景。 WasmEdge 可以被应用到 distroless debugging、可以支持将某些任务放到临时容器、 或者作为 Service Mesh 或 FaaS 的 Runtime,比如和 Knative 框架相结合。

Pfennig 在此分享了如何在 Knative 中使用 WasmEdge,同时他也实现了在 Linkerd 中使用 WasmEdge 作为 Sidecar runtime,非常推荐大家去看看 Pfennig 的 KinD-crun-WasmEdge GitHub repo

WasmEdge 与 K8s 的结合有着广泛的应用,这是一个 game changer!Pfennig 认为 K8s 与 WebAssembly/WasmEdge 的集成值得更多人关注。

展开阅读全文
  • 0
    感动
  • 0
    路过
  • 0
    高兴
  • 0
    难过
  • 0
    搞笑
  • 0
    无聊
  • 0
    愤怒
  • 0
    同情
热度排行
友情链接