NVIDIA 初创加速计划,免费加速您的创业启动 了解详情
写点什么

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:003587

评论

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

RocketMQ Binder集成消息订阅

急需上岸的小谢

8月月更

《MySQL入门很轻松》第4章:数据表中存放的数据类型

乌龟哥哥

8月月更

Kubernetes YAML编写 讲解

CTO技术共享

开源 签约计划第三季 8月月更

数据治理(五):元数据管理

Lansonli

大数据 数据治理 8月月更

一文教会你快速上手 Vim

昆吾kw

vim Linux

Java技术:SpringBoot实现邮件发送功能

天使不哭

Java email #开源 8月月更

大型分布式存储方案MinIO介绍,看完你就懂了!

天使不哭

存储 MINO #开源 8月月更

全面解析FPGA基础知识

智趣匠

签约计划第三季

每天一个CSS小特效,文字闪烁——【钢铁侠:爱你三千遍】

前端小刘不怕牛牛

JavaScript html/css 8月月更

781. 森林中的兔子

小卢要刷力扣题

力扣 8月月更

前端食堂技术周刊第 47 期:Docusaurus 2.0 、7 月登陆网络平台的新内容 、Nuxt.js 团队的轮子库

童欧巴

JavaScript 前端

操作系统:SSH协议知识介绍

天使不哭

Linux SSH #开源 8月月更

什么是Linux内核,怎么才能玩转它?

简说Linux内核

Linux内核 进程管理 嵌入式开发 设备驱动

程序员从佩洛西窜访事件中可以学到什么?

慕枫技术笔记

思维 构架 8月月更

Kubernetes 开发环境比对

CTO技术共享

开源 签约计划第三季 8月月更

每日一R「02」所有权与 Move 语义

Samson

签约计划第三季 8月月更 ​Rust

带着昇腾去旅行:一日看尽金陵城里的AI胜景

脑极体

SRv6性能测量

穿过生命散发芬芳

8月月更 SRv6

数据库治理利器:动态读写分离

阿里巴巴云原生

数据库 阿里云 微服务 云原生

什么是服务治理

阿泽🧸

服务治理 8月月更

头脑风暴:单词拆分

HelloWorld杰少

算法 LeetCode 数据结构, 8月月更

如何正确理解线程机制中常见的I/O模型,各自主要用来解决什么问题?

PivotalCloud

Linux Linux Kenel

小程序+自定义插件的关键性

Geek_99967b

小程序

阿里云架构师金云龙:基于云XR平台的视觉计算应用部署

阿里云弹性计算

视觉计算 计算巢 云XR平台 GPU实例

FileZilla搭建FTP服务器图解教程

天使不哭

#开源 8月月更

开发者必备:一文快速熟记【数据库系统】和【软件开发模型】常用知识点

小阿杰

软件开发流程 软件开发原则 数据库系统 签约计划第三季

10min快速回顾C++语法(一)

timerring

c++ 算法 8月月更

Kubernetes 60个为什么

CTO技术共享

开源 签约计划第三季 8月月更

上海一科技公司刷单被罚22万,揭露网络刷单灰色产业链

石头IT视角

Kubernetes服务接入Istio

CTO技术共享

开源 签约计划第三季 8月月更

你有对象类,我有结构体,Go lang1.18入门精炼教程,由白丁入鸿儒,go lang结构体(struct)的使用EP06

刘悦的技术博客

Go golang 编程语言 Go web golang 面试

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