使用 KinD 启动与管理 WebAssembly 应用
使用 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 的集成值得更多人关注。

低调大师中文资讯倾力打造互联网数据资讯、行业资源、电子商务、移动互联网、网络营销平台。
持续更新报道IT业界、互联网、市场资讯、驱动更新,是最及时权威的产业资讯及硬件资讯报道平台。
转载内容版权归作者及来源网站所有,本站原创内容转载请注明来源。
- 上一篇
北海(Kraken)v0.10.0 发布 - 支持 Flutter Widget 混合渲染
前言 经过 2 个多月紧张的开发工作,今天我们发布了全新的 0.10.0 版本,该版本的核心功能是支持 Flutter Widget 混合渲染方案,将 Flutter Widget 简单封装成 Custom Element 就可以提供给前端使用,不仅丰富了前端的组件生态,而且可以通过接入 Native 的高性能容器接入更多的业务场景。以下介绍该版本的主要更新内容。 更新内容 支持 Flutter Widget 混合渲染 之前 Kraken 对于 Flutter Widget 的支持只限于简单的 leaf 节点(如图片、视频、文本等),在 0.10.0 版本中 Kraken 支持了完整的混合渲染,可以接入类似瀑布流、长列表这种的复杂容器类型,使得 Flutter Widget 与 Kraken 互相嵌套成为可能。 下面示例演示了如何将 Flutter 的下拉刷新与瀑布流 Widget 封装成自定义组件,并且在前端使用。 在 Dart 侧将 EasyFresh 与 WaterfallFlow Widget 封装成 Custom Element。 在前端通过标准的 DOM API 创建自定义...
- 下一篇
效果提升28个点!基于领域预训练和对比学习SimCSE的语义检索
语义检索相比传统基于字面关键词的检索有诸多优势,广泛应用于问答、搜索系统中。今天小编就手把手带大家完成一个基于领域预训练和对比学习SimCSE的语义检索小系统。 所谓语义检索(也称基于向量的检索),是指检索系统不再拘泥于用户Query字面本身(例如BM25检索),而是能精准捕捉到用户Query背后的真正意图并以此来搜索,从而向用户返回更准确的结果。 最终可视化demo如下,一方面可以获取文本的向量表示;另一方面可以做文本检索,即得到输入Query的top-K相关文档! 语义检索,底层技术是语义匹配,是NLP最基础常见的任务之一。从广度上看,语义匹配可以应用到QA、搜索、推荐、广告等各大方向;从技术深度上看,语义匹配需要融合各种SOTA模型、双塔和交互两种常用框架的魔改、以及样本处理的艺术和各种工程tricks。 比较有趣的是,在查相关资料的时候,发现百度飞桨PaddleNLP最近刚开源了类似的功能,可谓国货之光!之前使用过PaddleNLP,基本覆盖了NLP的各种应用和SOTA模型,调用起来也非常方便,强烈推荐大家试试! 接下来基于PaddleNLP提供的轮子一步步搭建语义检索系统...
相关文章
文章评论
共有0条评论来说两句吧...
文章二维码
点击排行
推荐阅读
最新文章
- CentOS7安装Docker,走上虚拟化容器引擎之路
- 2048小游戏-低调大师作品
- CentOS6,7,8上安装Nginx,支持https2.0的开启
- Springboot2将连接池hikari替换为druid,体验最强大的数据库连接池
- 设置Eclipse缩进为4个空格,增强代码规范
- CentOS8编译安装MySQL8.0.19
- CentOS8,CentOS7,CentOS6编译安装Redis5.0.7
- Eclipse初始化配置,告别卡顿、闪退、编译时间过长
- Docker安装Oracle12C,快速搭建Oracle学习环境
- SpringBoot2编写第一个Controller,响应你的http请求并返回结果