AI实践哪家强?来 AICon, 解锁技术前沿,探寻产业新机! 了解详情
写点什么

Krustlet:使用 Rust 开发的 kubelet,用于运行 WASM 工作负载

  • 2020-07-14
  • 本文字数:1475 字

    阅读完需:约 5 分钟

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: v1kind: Podmetadata:  name: wasm-appspec:  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.wasmwasm-to-oci push demo.wasm registry/wasm-app:v1.0.0kubectl 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


2020-07-14 08:003896

评论

发布
暂无评论
发现更多内容

一个比一个牛皮的5个杨辉三角特性!

风铃架构日知录

Java 程序员 算法 IT 杨辉三角

【Redis实战专题】「性能监控系列」全方位探索Redis的性能监控以及优化指南

码界西柚

redis监控 Redis优化 redis性能

Hero动画应用之列表详情页切换

岛上码农

flutter ios 前端 安卓 移动端开发

如何破越发展 to B 市场亏损越多问题?

风铃架构日知录

互联网 程序人生 后端 IT tob产品

非常实用的代码阅读策略!

风铃架构日知录

Java 程序员 后端 IT 代码

Pytorch 基础-tensor 数据结构

嵌入式视觉

Tensor ndarray 张量的基本操作 view函数 reshape

算力狂热时代的冷静之道:宁畅总裁秦晓宁分享企业的算力最优解

脑极体

算力 东数西算 算力网络

系统风险处置

agnostic

风险系统 业务风险 操作风险

读懂深度学习,走进“深度学习+”阶段

白洞计划

【Java基础】Java8 使用 stream().sorted()对List集合进行排序

No8g攻城狮

java; 开发语言 语言 & 开发 Java’

【架构设计】你真的理解软件设计中的SOLID原则吗?

小小怪下士

Java 程序员 架构设计

WEB开发人员应该知道 10 个 Docker 命令

devpoint

Docker 前端开发 docker image Docker 镜像

photozoompro2023下载激活教程

茶色酒

PhotoZoom photozoompro

Alluxio 2022技术干货年终大赏

Alluxio

大数据 分布式 案例 Alluxio 数据编排

第四周作业-千万级学生系统课程存储设计

不爱学习的程序猿

总结一下经典机器学习算法

风铃架构日知录

Java 程序人生 算法 后端 IT

SAP 交货单与HU指派关系数据不一致问题的解决方案

SAP虾客

SAP 公司间STO 外向交货单 HU DEBUG改表

Tapdata Cloud 场景通关系列:将数据导入阿里云 Tablestore,获得毫秒级在线查询和检索能力

tapdata

tinyrpc源码阅读

骑牛上青山

golang 源码 RPC

详解ThreadLocal

threedayman

David Murray 加入 VeraViews 担任需求总监

鳄鱼视界

设计千万级学生管理系统的考试试卷存储方案 - 模块四

Geek_e5f2e5

模块9毕业设计项目

冷夫冲

架构设计实战

【架构设计】你真的理解软件设计中的SOLID原则吗?

JAVA旭阳

Java 架构

EasyRcovery软件最新版本V15电脑版安装包下载

茶色酒

EasyRcovery2023 EasyRcovery

小兔子在终端给大家拜年啦

陈明勇

Go golang 后端

2023-01-13:joxit/docker-registry-ui是registry的web界面工具之一。请问部署在k3s中,yaml如何写?

福大大架构师每日一题

k8s k3s 福大大

Tapdata 杨庆麟:实时数据如何赋能制造业,实现业务卓越与持续发展?

tapdata

【深入浅出Seata原理及实战】「入门基础专题」探索Seata服务的AT模式下的分布式开发实战指南(2)

码界西柚

分布式事务 分布式架构 Alibaba SpringCloud Alibaba

【Java基础】Java8 使用 stream().filter()过滤List对象(查找符合条件的对象集合)

No8g攻城狮

java; 开发语言 语言 & 开发 Java’

天翼云第八代云主机助力企业攻克上云“大象流”加密处理业务难题

极客天地

Krustlet:使用Rust开发的kubelet,用于运行WASM工作负载_DevOps & 平台工程_Christian Melendez_InfoQ精选文章