摘要:华为云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. RPA的市场定义和企业选型

    RPA(Robotic Process Automation)译为机器人流程自动化,又可以称为数字化劳动力,是一种智能化软件,通过模拟并增强人类与计算机的交互过程,实现工作流程中的自动化.RPA具有对 ...

  2. Python学习笔记--序列+集合+字典

    序列 切片:从一个序列中,取出一个子序列 注意: 案例: 实现: 集合 无序性.唯一性 添加新元素: .add 移除元素: .remove 随机取出某个元素: 清空集合: .clear 取两个集合的差 ...

  3. 一起听、一起看、一起唱掀起Z世代青年社交浪潮

    6月5日,声网Agora 联合人人都是产品经理在成都举办了主题为"社交泛娱乐APP运营增长力和新玩法解析"的沙龙.现场围绕社交泛娱乐新玩法解析以及出海的新机遇.支付痛点.增长.运营 ...

  4. Web自动化——介绍与安装以及第一个web自动化程序(一)

    1. 为什么要做Web自动化测试 什么是web自动化测试 让程序代替人,去验证网页上功能的过程 web自动化测试与手工测试的比较 web自动化测试执行的测试用例是手工功能测试的子集 web自动化测试的 ...

  5. tModLoader随机掉落模组编写

    pre { overflow-y: auto; max-height: 400px } img { max-width: 500px; max-height: 300px } 1. 整体思路 目标是实 ...

  6. Perceptron, Support Vector Machine and Dual Optimization Problem (1)

    Linear Decision Boundary(线性决策边界) Example. (classification problem) 给定一个二元的特征空间 \(\mathcal{X} = \left ...

  7. 一条SQL语句在MySQL中如何执行

    一条SQL语句在MySQL中如何执行 本篇文章会分析一个 sql 语句在 MySQL 中的执行流程,包括 sql 的查询在 MySQL 内部会怎么流转,sql 语句的更新是怎么完成的. 在分析之前我会 ...

  8. [Linux]常用命令之【source|export/env】#点命令/环境变量#

    1 source 1-1 source 命令概述 source命令用法:source FileName 简述 source命令(从 C Shell 而来)是bash shell的内置命令. sourc ...

  9. 四月十九号java基础知识

    1.总括:类的继承是使用已有的类为基础派生出新的类.通过类继承的方式,便能开发出新的类,而不需要编写相同的程序代码,所以说类的继承是程序代码再利用的概念抽象与接口都是类概念的扩展.通过继承扩展出的子类 ...

  10. SpringBoot2:@Configuration 注解

    @Configuration 这个注解的作用,告诉 springboot 这是一个配置类.配置类以及类里的方法都可以作为Bean.里面的方法用@Bean标记. @Configuration 替换了繁琐 ...