摘要:华为云DTSE技术布道师张天阳结合沙箱容器发展历程,介绍华为云多沙箱容器运行时 Kuasar 项目优势,开启多沙箱容器运行时上手实践体验。

本文分享自华为云社区《理论+实操,带你了解多沙箱容器运行时Kuasar》,作者:华为云社区精选。

本期《多沙箱容器运行时Kuasar开发上手实践》主题直播中,华为云DTSE技术布道师张天阳结合沙箱容器发展历程,介绍华为云多沙箱容器运行时 Kuasar 项目优势,为开发者演示 Kuasar 的安装运行方式,开启多沙箱容器运行时上手实践体验。

顺势而出的沙箱容器

2013年,docker 横空出世,云计算进入容器时代,所谓的容器也就是运行在宿主机上的进程,通过 Namespace 和 Cgroup 技术进行隔离和限制,和主机共享内核。

2014年,kubernetes 开源并成为主流的容器编排工具。在 kubernetes 中,Pod 是一个或多个容器的集合,容器间可以共享网络和存储,为此引入了 pause 容器来实现这一特性。

“与宿主机系统共享内核的容器,是存在着巨大的安全隐患。”华为云DTSE技术布道师张天阳讲到。

也正是看到这个问题,在2017年底,沙箱(Sandbox)容器技术兴起,它将容器进程限制在一个封闭的沙箱环境中,防止其对系统和其他容器造成破坏,具有极高的安全性。

沙箱天然符合 Pod 的定义,它为一组容器提供了一个隔离的环境,在沙箱环境中运行的容器,就是沙箱容器。根据沙箱隔离的边界可分为:

  • 轻量虚拟机沙箱(MicroVM Sandbox):在宿主机上模拟一套完整的虚拟机,容器运行在虚拟机内,具有非常高的安全隔离效果。
  • 用户态内核沙箱(Application Kernel Sandbox):通过一个运行在用户态的内核程序,拦截并实现容器的系统调用,从而保证容器间的安全隔离性。
  • WebAssembly沙箱(Wasm Sandbox):将容器运行在 WebAssembly 的运行时中,依赖 WebAssembly 的能力提供进进程级别的隔离。

每种沙箱在极速弹性、安全隔离和标准通用维度有各自的优势,目前云厂商都已在生产环境布局了沙箱容器产品,每个沙箱借助 containerd Shim v2 均实现了一套管理面的程序,彼此之间不相兼容。

2023年3月,containerd 在其 v1.7.0 版本中发布了 Sandbox API 特性,该特性提供了一套管理沙箱的API,它的出现使得容器和沙箱的概念解耦,“容器归容器,沙箱归沙箱”,创建 Pod 就是创建沙箱,不再需要借助 pasue 容器。

沙箱容器已成为云原生场景下的安全的解决方案,我们希望借助 Sandbox API 的力量,实现一种支持多种沙箱技术的容器运行时。

然而单一容器隔离技术无法满足用户云上业务对安全隔离、极速弹性、标准通用等多个维度的诉求。基于此,华为云于2023 年 4 月在荷兰阿姆斯特丹举办的 KubeCon + CloudNativeCon Europe 2023 云原生峰会上正式开源Kuasar 。新开源的多沙箱容器运行时 Kuasar 可以充分利用节点资源、降本增效,为用户提供更安全高效的沙箱场景解决方案。

Kuasar架构技术大揭秘

Kuasar 是一个多沙箱容器运行时,那么什么是容器运行时?简单说容器运行时是一个负责拉起容器,管理容器运行状态的运行时组件,可以分为高阶容器运行时和低阶容器运行时两类:

  • 高阶容器运行时:负责 CRI 的实现,从高维度管理容器和镜像实例,containerd, CRI-O, docker 还有 iSulad 都是典型的高阶容器运行时。
  • 低阶容器运行时:负责 OCI 实现,真正操作容器。Kata-containers 和 runC 等都是低阶容器运行时。

Kuasar 属于低阶容器运行时,和高阶容器运行 containerd 交互,Kuasar 主要由两个模块组成:

  • Kuasar-Sandboxer:实现了 Sandbox API,负责管理沙箱生命周期和资源分配。Sandboxer 以插件的形式和 containerd 交互。
  • Kuasar-Task:实现了 Task API,负责管理容器的生命周期和资源分配。

MicroVM Sandboxer:虚机进程提供了完整的虚拟化层和 Linux 内核, vmm-sandboxer 负责创建虚机和调用 API, vmm-task 作为虚机里的 init 进程负责拉起容器进程,容器的 IO 流则可通过虚机的 vsock 或 uds 导出。

App Kernel Sandboxer: Quark 是一种新型的 App Kernel Sandbox,使用自己的 QVisor 作为 hypervisor 和自定义内核 QKernel。QVisor 只负责KVM虚拟机的生命周期管理,Qkernel 拦截所有的系统调用,并通知 QVisor 处理。quark-sandboxer 拉起 Qvisor 和 Qkernel,每当需要启动容器时,QVisor 中的 quark-task 将调用 Qkernel 来启动一个新的容器。同一 Pod 中的所有容器都将在同一个进程中运行。

Wasm Sandboxer:WebAssembly 沙箱定义了一套新的指令集和虚拟机。所有程序必须编译成 Wasm 指令集才能在 Wasm 虚拟机中运行,因此对应用程序有很高的要求。wasm-sandboxer 和 wasm-task 为一个独立的进程,每当需要在沙箱中启动容器时,wasm-task 将 fork 一个新进程,启动一个新的 WasmEdge runtime,并在其中运行 Wasm 代码。

Kuasar改变当前的Shim V2 的管理模型,带来以下收益:

  1. sandbox 管理逻辑清晰:sandbox 管理逻辑和 container 管理逻辑完全分开,开发友好,语义清晰
  2. 简化 container 调用链:取消 Task API 到 Shim v2 API 的转化,直接调用,链路简化
  3. 高效的sandboxer进程: Sandboxer 进程常驻减掉了冷启动 Shim 进程的耗时, 1:N 管理模型大幅减少了进程数量,Rust 程序内存安全,相比 Golang 开销小
  4. pause 容器消失:创建 Pod 不再创建 pause 容器,不再需要准备 pause 容器镜像快照

为了更好地展现Kuasar 性能优势,张天阳选择 “端到端容器启动时间”和“管理面组件内存消耗”作为衡量 Kuasar 性能的两个指标,在保持环境变量一致的前提下和同类竞品进行对比测试。

启动时间测试分为两组,一组统计单个 Pod 的启动时间,另一组统计并行启动50个 Pod 的时间:

Kuasar 100% 的启动速度提升主要得益于两方面,一方面是 Sandbox API 的实现,使得创建容器不再单独创建 pause 容器,节省了准备pause容器镜像快照的时间;另一方面得益于1:N 的管理模型,Sandboxer 进程常驻,从而节省了冷启动 Shim 进程的时间,这使得容器的启动速度大大提升。

内存消耗测试共分三轮,每轮分别启动了1、5、10、20、30和50个Pod,查询Sandboxer 进程和所有 Shim 进程的 PSS 数值。

Kuasar 节省近99%的内存,原因也可分为两点:主要是 1:N 的管理模型使得 N 个进程减少为1个进程,带来的内存收益与 Pod 数成正比;其次,Kuasar 采用了 Rust 编程语言,相比于 Kata Shim 进程使用的 Golang 语言,语言本身也会带来一些内存收益。

五分钟教你操作Kuasar

了解了Kuasar相关技能和特性,相信大家对产品有了一个大致的了解。接下来,就花几分钟带大家从安装上手,实际操作了解和认识Kuasar。

为了让大家更好地体验,在Kuasar安装配置操作上,为大家准备了一指禅,如下:

温馨小提醒,在安装配置前需要大家预准备一下内容:

面向未来,作为一个开放和可扩展的 多沙箱容器运行时,Kuasar 将发挥沙箱接口的优势,拥抱业界最新的 DRA(Dynamic Resource Allocation)、CDI(Container Device Interface) 等管理接口,为云原生场景带来更安全、高效、便捷的容器解决方案,为云原生应用提供更安全的保障。

点击关注,第一时间了解华为云新鲜技术~

理论+实操,带你了解多沙箱容器运行时Kuasar的更多相关文章

  1. 【Social listening实操】作为一个合格的“增长黑客”,你还得重视外部数据的分析!

    本文转自知乎 作者:苏格兰折耳喵 ----------------------------------------------------- 在本文中,作者引出了"外部数据"这一概 ...

  2. Java初学者作业——编写JAVA程序,要求输入技术部门5位员工的理论成绩和实操成绩,计算并输出各位员工的最终评测成绩。

    返回本章节 返回作业目录 需求说明: 某软件公司要求对技术部门的所有员工进行技能评测,技术评测分为两个部分:理论部分以及实操部分,最终评测成绩=理论成绩×0.4+实操成绩×0.6,要求输入技术部门5位 ...

  3. 进程池与线程池基本使用、协程理论与实操、IO模型、前端、BS架构、HTTP协议与HTML前戏

    昨日内容回顾 GIL全局解释器锁 1.在python解释器中 才有GIL的存在(只与解释器有关) 2.GIL本质上其实也是一把互斥锁(并发变串行 牺牲效率保证安全) 3.GIL的存在 是由于Cpyth ...

  4. 网络编程:多进程实现TCP服务端并发、互斥锁代码实操、线程理论、创建线程的两种方式、线程的诸多特性、GIL全局解释器锁、验证GIL的存在

    目录 多进程实现TCP服务端并发 互斥锁代码实操 线程理论 创建线程的两种方式 线程的诸多特性 GIL全局解释器锁 验证GIL的存在 GIL与普通互斥锁 python多线程是否有用 死锁现象 多进程实 ...

  5. 大数据学习笔记——Linux完整部署篇(实操部分)

    Linux环境搭建完整操作流程(包含mysql的安装步骤) 从现在开始,就正式进入到大数据学习的前置工作了,即Linux的学习以及安装,作为运行大数据框架的基础环境,Linux操作系统的重要性自然不言 ...

  6. 72 个网络应用安全实操要点,全方位保护 Web 应用的安全

    原文地址:Web Application Security Checklist 原文作者:Teo Selenius(已授权) 译者 & 校正:HelloGitHub-小熊熊 & 卤蛋 ...

  7. Linux基础实操六

    实操一: 临时配置网络(ip,网关,dns)+永久配置 #ifconfig ens33 192.168.145.134/24 #vim /etc/resolv.conf #route add defa ...

  8. 《5天学会卡西欧fx-5800p之实操视频教程(初级)》目录和我的工作室现场曝光

    很多人给我讲,想让我录制一份卡西欧fx-5800p的视频教程,我也一直在准备,准备了半年,录制视频真的不是件容易的事,条件有限,而且工作也很忙,中途还会有想放弃的念头,真的是花费了我很多的心血,但不管 ...

  9. 动手实操:如何用 Python 实现人脸识别,证明这个杨幂是那个杨幂?

    当前,人脸识别应用于许多领域,如支付宝的用户认证,许多的能识别人心情的 AI,也就是人的面部表情,还有能分析人的年龄等等,而这里面有着许多的难度,在这里我想要分享的是一个利用七牛 SDK 简单的实现人 ...

  10. 百度NLP预训练模型ERNIE2.0最强实操课程来袭!【附教程】

    2019年3月,百度正式发布NLP模型ERNIE,其在中文任务中全面超越BERT一度引发业界广泛关注和探讨.经过短短几个月时间,百度ERNIE再升级,发布持续学习的语义理解框架ERNIE 2.0,及基 ...

随机推荐

  1. PHP微信三方平台-代公众号发起微信支付(jsAPI)

    一.前期准备工作 1.微信公众号需要开通微信支付认证将获取的秘钥给三方平台 2.添加支付回调域名地址:填写三方平台域名地址即可(最多5个) 二.代码demo 1.完成支付类 <?php /** ...

  2. git命令的学习和基本使用

    初始化 git init (your_project) 配置 --local 只对当前仓库有效 --global 对当前用户所有仓库有效 --system 对系统登录的所有用户有效 git confi ...

  3. go语言之UDP通信

    服务端 package main import ( "fmt" "net" ) func main() { listen, err := net.ListenU ...

  4. 职场「OKR」,魔幻又内卷

    个人习惯称之为[O-KR-KPI]组合: 01 从进厂实习那天开始,就接触了KPI的概念: 互联网公司,年初入职,可能因为那天是周五,又赶上月底,少不了要把KPI搬出来折腾一番: 天时,地利,人和: ...

  5. [数据库/Java]数据库开发过程中产生的MySQL错误代码及其解决方案

    前言 吐槽一下,均是这两天遇到的破烂事儿,搞定了也好,以后出现此类问题也就放心些了. 下列遇到的问题大都是因为MySQL从5.x版本升级到8.0.11(MySQL8.0涉及重大改版)后,跟着连带着出现 ...

  6. WAL模块主要方法简述

    Method---wal.go Description func Create(lg *zap.Logger, dirpath string, metadata []byte) (*WAL, erro ...

  7. Semantic Kernel 入门系列:🥑突破提示词的限制

    无尽的上下文 LLM的语言理解和掌握能力在知识内容的解读和总结方面提供了强大的能力. 但是由于训练数据本身来自于公共领域,也就注定了无法在一些小众或者私有的领域能够足够的好的应答. 因此如何给LLM ...

  8. 2023 年十大 API 管理趋势

    本文探讨了 API 管理在数字化转型中的重要性,以及 API 管理面临的挑战和发展机遇.文章重点介绍了十大 API 管理发展趋势,包括 API 安全性.API 标准化.云端 API 管理解决方案.低代 ...

  9. 【Vue2.x源码系列07】监听器watch原理

    上一章 Vue2计算属性原理,我们介绍了计算属性是如何实现的?计算属性缓存原理?以及洋葱模型是如何应用的? 本章目标 监听器是如何实现的? 监听器选项 - immediate.deep 内部实现 初始 ...

  10. 关于Java中值传递和址传递

    参数传递在Java中有两种类型 值和址 其实本质都是一份拷贝 在调用函数的时候 进行压栈 传进来的参数会被开辟一份新的空间 传基本类型是把值传过去 传引用数据类型是实例指向实参 void m(int ...