为了账号安全,请及时绑定邮箱和手机立即绑定

在 Kubernetes 中的 WebAssembly:应用部署新时代

Kubernetes 已成为部署和管理容器化应用程序的最常用平台。但有一种新兴技术承诺提供更多优势:WebAssembly(Wasm)。本文将探讨如何将 WebAssembly 集成到 Kubernetes 中,利用其庞大的生态系统资源,同时提供显著的性能、安全性和效率提升。

了解基础知识

让我们从一个典型的Kubernetes设置开始:一个部署启动包含容器的Pod,一个服务来管理内部通信,一个Ingress来处理外部流量,一个水平Pod自动缩放器来调整Pod副本的数量。但如果我们可以用WebAssembly二进制文件来替代容器运行呢?这种转变能带来很多好处。

WebAssembly的那些优点

WebAssembly 相比传统容器具有几个优势,

  • 接近原生的速度:Wasm应用运行速度几乎与原生代码一样快。
  • 更小的体积:Wasm二进制文件比其容器化版本更紧凑。
  • 启动更快:Wasm应用启动速度更快。
  • 更强的安全性:Wasm的沙箱模型提供了更好的安全保护。

尽管有这些好处,Wasm 还没有被广泛采用。主要原因在于它缺乏像容器那样的成熟生态系统,后者得益于 Kubernetes 的支持。

生态系统也很重要

容器之所以受欢迎,不仅仅是因为其技术,还因为Kubernetes提供的丰富生态。它包括调度、监控、网络和策略执行等工具。Kubernetes生态系统庞大且不断扩展,得到了CNCF许多项目的支持。

相比之下,Wasm生态系统还处于起步阶段。虽然可以通过FaaS或Docker等工具在单个服务器上运行Wasm,但它们无法与Kubernetes提供的功能相提并论。要让Wasm成为一个可行的替代方案,它需要集成到Kubernetes生态系统中。

介绍KvASM:连接Wasm和Kubernetes的桥梁

KvASM 是一个为 Kubernetes 添加 WebAssembly 支持的操作符。它简化了在 Kubernetes 集群中运行 Wasm 应用程序的过程,使其几乎和运行传统容器一样简单。以下是 KvASM 如何简化部署过程:

如何让Kubernetes运行Wasm

启用 Kubernetes 集群运行 Wasm 并利用 KvASM 涉及三个步骤:

  1. 安装KvASM Operator:此操作符监视节点并等待指示哪些节点应运行Wasm应用程序的命令。
  2. 注解节点:通过使用KvASM注解对节点进行注解,您可以指定哪些节点应该运行Wasm。此注解可以应用于特定的节点池、单个节点或集群中的所有节点上。
  3. 应用新的运行时类:此运行时类告知Kubernetes使用新安装的Wasm运行时环境。

通过这些步骤,您的集群现在可以运行WebAssembly应用程序了,就像运行容器一样。

打包 Wasm 应用

打包 Wasm 应用涉及将其编译成二进制格式,并将这些二进制文件转换为容器镜像。此过程类似于使用多阶段构建的 Dockerfile。打包完成后,这些镜像可以推送到仓库,并使用熟悉的 manifest 文件在 Kubernetes 集群中部署。在 manifest 文件中唯一需要的更改是指定 Wasm 运行时类型。

运行 Wasm 应用

在 Kubernetes 中运行 Wasm 应用程序其实很简单。你可以使用与容器应用程序相同的配置文件,只需稍微做一些修改来指定 Wasm 运行时类。这让你能够利用现有的 Kubernetes 工具和实践,比如服务、Ingress 和自动伸缩器,而无需额外的复杂性。

设置 KvASM 环境

以下是如何在您的 K8s 集群中设置 KvASM:

  • 添加 HELM 仓库源
helm repo add kwasm http://kwasm.sh/kwasm-operator/
  • 安装:KvASM操作
    helm install -n kwasm --create-namespace kwasm-operator kwasm/kwasm-operator
  • 供应节点
kubectl annotate node --all kwasm.sh/kwasm-node=true  # 标记所有节点的kwasm.sh/kwasm-node属性为true
  • 应用 RuntimeClass 和 Job 清单
apiVersion: node.k8s.io/v1  
kind: RuntimeClass  
metadata:  
  name: wasmedge  
handler: wasmedge  
---  
apiVersion: batch/v1  
kind: Job  
metadata:  
  creationTimestamp: null  
  name: wasm-test  
spec:  
  template:  
    metadata:  
      annotations:  
        module.wasm.image/variant: compat-smart  
      creationTimestamp: null  
    spec:  
      containers:  
      - image: wasmedge/example-wasi:latest  
        name: wasm-test  
        resources: {}  
      restartPolicy: Never  
      runtimeClassName: wasmedge  
  backoffLimit: 1
Wasm在K8s中的优点和缺点:
好的地方:
  • 性能:Wasm 应用程序以接近原生的运行速度运行,启动更快,并且更安全。
  • 打包:使用容器镜像作为打包机制可以无缝地集成到现有的 CI/CD 管道中。
  • 生态系统:利用 Kubernetes 生态系统可以访问许多设计来一起工作的工具和服务。
不足:
  • 生态系统限制:Wasm 生态系统还在成长,它的广度目前还不及容器生态。
  • 复杂性:初始设置可能相当复杂,有时还需要特权操作。
  • 边车容器:在同一个 pod 里混用 Wasm 和容器可能行不通,这会影响到那些依赖边车容器的方案。
结论部分。

KvASM 是一个很棒的项目,它简化了在 Kubernetes 集群中运行 WebAssembly。它让我们预览了未来,即 Wasm 成为 Kubernetes 中的标准运行时,提供了一个比容器更快、更安全的替代选择。虽然有一些限制,运行 Wasm 在 Kubernetes 中的优势巨大,而 KvASM 桥接了这一阶段,直到 Wasm 支持更加广泛。

感谢您的阅读。请继续关注Kubernetes和云原生技术领域的最新动态。

点击查看更多内容
TA 点赞

若觉得本文不错,就分享一下吧!

评论

作者其他优质文章

正在加载中
软件工程师
手记
粉丝
47
获赞与收藏
152

关注作者,订阅最新文章

阅读免费教程

  • 推荐
  • 评论
  • 收藏
  • 共同学习,写下你的评论
感谢您的支持,我会继续努力的~
扫码打赏,你说多少就多少
赞赏金额会直接到老师账户
支付方式
打开微信扫一扫,即可进行扫码打赏哦
今天注册有机会得

100积分直接送

付费专栏免费学

大额优惠券免费领

立即参与 放弃机会
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号

举报

0/150
提交
取消