aws eks集成wasm运行时并启动pod

参考资料

  • WebAssembly 在云原生中的实践指南,https://cloud.tencent.com/developer/article/2324065

作为一种通用字节码技术,wasm的初衷是在浏览器中的程序实现原生应用性能。高级语言将wasm作为目标语言进行编译并运行在wasm解释器中。和nodejs类似的发展轨迹,2019年Mozilla推出的wasi标准将wasm应用的范围扩展到了OS中,实现了跨平台。

wasm在多个层面都能够对标oci容器运行时,可以将其理解为实现了OCI标准的轻量级JVM,兼顾了轻量性能和跨平台,可以作为新一代容器运行时使用。

关于wasm核心规范(不包括wasi),字节码和解释器的更多内容可以参考,https://segmentfault.com/a/1190000040737725

本文的主要内容如下

  1. 在eks节点中安装wasm运行时
  2. 构建wasm镜像并部署

大多数wasm运行时的资料都集中在ubuntu发行版(但是中国区并没有提供ubuntu的eks ami)

  • wasm在eks上的支持目前还在roadmap中,https://github.com/aws/containers-roadmap/issues/1997
  • runc支持wasm目前还在roadmap中

由于OS本身在这里并不重要,因此为了避免重复劳动,将global eks ami拷贝到中国区,具体步骤省略。

在拷贝之前,需要在实例上完成以下步骤

安装wasmedge,关于不同wasm运行时的比较,可以参考https://zhuanlan.zhihu.com/p/562593932

curl -sSf https://raw.githubusercontent.com/WasmEdge/WasmEdge/master/utils/install.sh | bash
source $HOME/.wasmedge/env

安装必要的编译和依赖环境

apt update
apt install -y make git gcc build-essential pkgconf libtool \libsystemd-dev libprotobuf-c-dev libcap-dev libseccomp-dev libyajl-dev \go-md2man libtool autoconf python3 automake

安装crun,因为crun能够支持wasm运行时,eks默认的runc目前还不支持

git clone https://github.com/containers/crun
cd crun
./autogen.sh
./configure --with-wasmedge
make
make install

crun是一个低等级的容器运行时,关于crun,containerd的docker的关系,可以从high-level和low-level容器运行时的角度区分,大体逻辑如下图

  • containerd 使用 crun, youki 这两种支持wasm的不同的低级容器运行时来管理 Wasm 模块,同时也可以运行普通的linux容器,本次在eks的配置与此类似
  • containerd 通过 containerd-wasm-shim 直接通过 Wasm 运行时来管理 Wasm 模块。

在这里插入图片描述

安装完毕后查看是否生效

root@ip-192-168-10-99:~/crun#  crun -v
crun version 1.14.4.0.0.0.23-a32cc
commit: a32cc45fb3944fd34866e25af5ef70dc02207b0d
rundir: /run/crun
spec: 1.0.0
+SYSTEMD +SELINUX +APPARMOR +CAP +SECCOMP +EBPF +WASM:wasmedge +YAJL

修改containerd的配置文件/usr/local/share/eks/containerd-config.toml,末尾添加如下

[plugins."io.containerd.grpc.v1.cri".containerd.runtimes.crun]runtime_type = "io.containerd.runc.v2"pod_annotations = ["module.wasm.image/variant"]
[plugins."io.containerd.grpc.v1.cri".containerd.runtimes.crun.options]BinaryName = "crun"

配置完毕后生成ami并拷贝中国区,直接启动实例(配置网络权限等,此处不赘述),在实例中运行启动脚本

观察节点加入集群情况

在这里插入图片描述

构建wasm镜像,此处以rust语言为例,先参考https://rsproxy.cn/#getStarted配置rust工具链

export RUSTUP_DIST_SERVER="https://rsproxy.cn"
export RUSTUP_UPDATE_ROOT="https://rsproxy.cn/rustup"
curl --proto '=https' --tlsv1.2 -sSf https://rsproxy.cn/rustup-init.sh | sh

编写主要逻辑如下

use warp::Filter;#[tokio::main(flavor = "current_thread")]
async fn main() {let hello = warp::get().and(warp::path::end()).map(|| "Hello, World!");warp::serve(hello).run(([0, 0, 0, 0], 8080)).await;
}

修改依赖文件

[dependencies]
tokio_wasi = { version = "1", features = ["rt", "macros", "net", "time", "io-util"]}
warp_wasi = "0.3"

添加wasm编译目标并编译

rustup target add wasm32-wasi
cargo build --target wasm32-wasi --release

使用如下dockerfile构建镜像wasm-demo-app

FROM scratch
COPY target/wasm32-wasi/release/http-server.wasm /
CMD ["/http-server.wasm"]

查看镜像只有0.87MB

在这里插入图片描述

创建以下runtimeclass和pod,直接部署

apiVersion: node.k8s.io/v1
kind: RuntimeClass
metadata:name: crun
handler: crun
---
apiVersion: v1
kind: Pod
metadata:name: wasm-demo-appannotations:module.wasm.image/variant: compat
spec:runtimeClassName: cruncontainers:- name: wasm-demo-appimage: xxxxxxxx.dkr.ecr.cn-north-1.amazonaws.com.cn/wasm-demo-app:latest

启动后contaainerd使用crun运行容器,但是调用wasmedge时出现如下报错,参考https://github.com/containers/crun/issues/1046解决,即将wasmedge的动态链接加入lddconfig路径

could not load `libwasmedge.so.0

容器正常运行

在这里插入图片描述

尝试请求,成功相应

$ curl 192.168.9.206:8080
Hello, World!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/840536.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

OpenAI协作为评估网络安全LLM提供的14条建议

大型语言模型(LLMs)在摄取、合成和总结知识方面表现出非凡的能力,但同时在完成实际任务时也表现出明显的局限性。网络安全是一个值得注意的领域,它为利用 LLMs 带来了机遇和风险。LLMs 可以使网络安全专家在预防和阻止攻击时更加高…

文件自动同步备份-FreeFileSync工具解决硬盘损坏、误操作覆盖导致数据丢失

文件自动同步备份-FreeFileSync工具解决硬盘损坏、误操作覆盖导致数据丢失 文章目录 文件自动同步备份-FreeFileSync工具解决硬盘损坏、误操作覆盖导致数据丢失前言一、FreeFileSync二、使用方法1.用外部存储卡或盘作为异地备份目标盘2.设置同步策略3.设置为windows的自动计划 …

将电脑D盘部分空间划分给C盘的方法

本文介绍在Windows电脑中,将D盘的部分空间分给C盘的方法。 最近,发现电脑中C盘的空间剩余不多了;而D盘由于当初分盘时划分的空间过多,导致其剩余空间很大且大概率以后都不会用上D盘中这些多余的空间了。因此,希望将D盘…

ubuntu20.04 安装系统后-开机黑屏-nvidia显卡驱动没问题_thinkpad-intel-13700H

文章目录 硬件现象原因&解决 硬件 thinkpad p1 gen6笔记本, intel 13代cpu 13700H,nvidia rtx 2000 Ada laptop gpu 13700H应该是有集显的,但可能没装集显驱动or由于Bios设置的缘故,我的win任务管理器只能看到一个gpu(gpu0)&#xff1…

学会这些大模型术语,你可以硬控朋友7.13分钟

你对于大型语言模型(LLMs)的复杂世界以及围绕它们的技术术语感到好奇吗? 理解从训练和微调的基础方面到转换器和强化学习的尖端概念,是揭开驱动现代人工智能大语言模型神秘面纱的第一步。 在本文中,我们将深入探讨 25 …

二叉树的构建——Java实现(详细注释 + 原理分析)

使用c语言构建二叉树时,一般是给定前序,正序遍历的方法进行遍历构建二叉树 通过使用Java中的map容器来构建二叉树,通过给定后序、中序遍历,实现层序遍历 1.后序遍历中最后一个元素为树的根节点,找到根节点的数值&…

宁夏教育杂志社与宁夏教育编辑部

宁夏教育杂志社投稿信箱 宁夏教育杂志 编辑在线咨询QQ:2648025923 编辑在线咨询QQ: 2958409081 编辑在线咨询QQ: 2734638650 编辑咨询电话:18366155179 编辑咨询电话:18366155179 宁夏教育杂志投稿信箱&…

抖音无货源如何做?

抖音店铺,1688一件代发可以做吗?如何做? (一)筛选一手货源: 打开1688,选择“找工厂”而不是“找货源”来避免被二道贩子坑骗。 在搜索框中输入你想要做的抖店商品类目,筛选出来的基本上是源头厂家。 仔细查看店铺的基础信息,如射灯厂家,以确认是否为源头厂家。 (…

【软件设计师】大题

一、数据流图 基础知识 数据流图(Data Flow Diagram,DFD)基本图形元素: 外部实体(External Agent) 表示存在于系统之外的对象,用来帮助用户理解系统数据的来源和去向加工(Process)数…

网络安全基础技术扫盲篇 — 名词解释

网络模块基础(网络拓扑图、网络设备、安全设备) 用通俗易懂的话说: 网络拓扑图:它就像一张网络世界的地图,它展现了我们数不清的网站、服务器和设备是如何相互连接的。用简单的话说,它就是给我们指路、告…

一步一步写线程之十二无锁编程

一、无锁编程 无锁编程并不是真正的无锁,只是在软件上消除了锁(或者说消除了传统认知中的锁)。牺牲CPU的占用时间来换取效率。无论是传统的单线程编程还是后来的多线程编程及至并发编程,其实抽象出来的模型就是生产者和消费者。这…

基于移动多媒体信源与信道编码调研

前言 移动多媒体是指在移动通信环境下,通过无线网络传输的音频、视频、图像等多种媒体信息。移动多媒体的特点是数据量大、传输速率高、服务质量要求高,因此对信源编码和信道编码的性能提出了更高的要求。 本文对进3年的移动多媒体信源与信道编码的研究…

数美滑块研究

周一,在清晨的阳光照耀下,逆向山脚下的小镇宁静而安详。居民们忙碌地开始一天的生活,而在爬虫镇子的边缘,一座古朴的道观显得格外神秘。 阿羊正静静地坐在青石长凳上,摸鱼养神。突然,一道清脆的声音在他耳…

【C++】AVL树和红黑树模拟实现

AVL树和红黑树 1. 背景2. AVL树的概念3. AVL树节点的定义4. AVL树的插入5. AVL树的旋转5.1. 左单旋5.2. 右单旋5.3. 左右单旋5.4. 右左单旋5.5. 旋转总结 6. AVL树的验证7. AVL树的性能8. 红黑树的概念9. 红黑树的节点的定义10. 红黑树的插入10.1. 情况一10.2.情况二 11. 红黑树…

【建议收藏】30个较难Python脚本,纯干货分享

本篇较难,建议优先学习上篇 ;20个硬核Python脚本-CSDN博客 接上篇文章,对于Pyhon的学习,上篇学习的结束相信大家对于Pyhon有了一定的理解和经验,学习完上篇文章之后再研究研究剩下的30个脚本你将会有所成就&…

Transformer详解(2)-位置编码

位置编码公式 偶数位置用sin,奇数位置用cos. d_model 表示token的维度;pos表示token在序列中的位置;i表示每个token编码的第i个位置,属于[0,d_model)。 torch实现 import math import torch from torch import nn from torch.autograd im…

pycharm配置python开发环境—miniconda+black+gitlab

下载miniconda管理python开发环境 miniconda下载地址:https://docs.anaconda.com/free/miniconda/ miniconda最新版本的python版本是python3.12.2,下载这个miniconda最新版本后,会导致执行conda create -n py31013 python3.10.13指令配置py…

如何设计电商 SaaS 系统中的免费服务和增值服务

随着电子商务的迅猛发展,越来越多的企业选择使用 SaaS(Software as a Service)平台来搭建自己的电商系统。为了吸引更多用户,电商 SaaS 系统通常会提供免费服务和增值服务。如何合理地设计这些服务,既能吸引新用户&…

使用HTTP长连接减少文件描述符和端口占用

在当今互联网技术飞速发展的背景下,高并发处理能力已经成为衡量服务器性能的一个重要标准。面对高并发场景,服务器需要同时应对大量的请求,这就带来了一个棘手的问题:资源有限。具体来说,文件描述符和端口号&#xff0…

ES实例演示一

温馨提示:本文所有API操作都是基于Elasticsearch 7.17 .8版本 1、文档的基本 CRUD 与批量操作 ############Create Document############ #create document. 自动生成 _id POST users/_doc {"user" : "Mike","post_date" : "20…