0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

iSulad Sandbox API简化容器调用链

openEuler 来源:openEuler 2023-11-20 17:08 次阅读

背景

沙箱隔离技术是一种将进程隔离到独立环境中运行的技术,可以有效地隔离进程间的相互影响,提高系统的安全性。随着容器技术的兴起,沙箱隔离技术也在云原生领域中得到了广泛的应用。例如容器编排组件 Kubernetes 的最小编排调度单元 Pod Sandbox 实际上是一个沙箱,为其中的容器提供了资源共享和安全隔离的运行环境。

然而,由于容器技术的历史原因,沙箱的概念在容器引擎和容器运行时中没有得到足够的支持。OCI 标准[1]未定义沙箱管理,导致容器引擎和容器运行时只能采用容器管理的方式管理沙箱,引发性能和稳定性问题,具体可参见第一篇 Kuasar 系列文章[2]。

事实上,容器领域一直在深入研究和探索引入沙箱管理接口的问题。举例来说,Containerd 社区于 2022 年 4 月将 Sandbox API 相关功能整合到主线[3],这一举措对 Containerd 内部沙箱管理逻辑进行了优化。然而,令人遗憾的是,它依然使用 OCI 标准接口来调用容器运行时以管理沙箱。

2023 年 4 月 21 日,华为在 Kubecon+CloudNativeCon Europe 2023 云原生峰会上发布了多沙箱运行时 Kuasar[4],将沙箱管理逻辑引入了容器运行时。至此,Kuasar 成为第一个支持 Sandbox API 的容器运行时。容器引擎使用 Sandbox API 直接管理沙箱成为了可能。

iSulad[5]也率先通过 Sandbox API 支持 Kuasar,提供高效和稳定的沙箱管理能力。openEuler 23.09 完成对 iSulad+Kuasar+StratoVirt 的集成,为用户提供了一个极速轻量的安全容器解决方案,具体可参见第二篇 Kuasar 系列文章[6]。

Sandbox API 简介

service Controller {
    rpc Create(ControllerCreateRequest) returns (ControllerCreateResponse);
    rpc Start(ControllerStartRequest) returns (ControllerStartResponse);
    rpc Platform(ControllerPlatformRequest) returns (ControllerPlatformResponse);
    rpc Prepare(PrepareRequest) returns (PrepareResponse);
    rpc Purge(PurgeRequest) returns (PurgeResponse);
    rpc UpdateResources(UpdateResourcesRequest) returns (UpdateResourcesResponse);
    rpc Stop(ControllerStopRequest) returns (ControllerStopResponse);
    rpc Wait(ControllerWaitRequest) returns (ControllerWaitResponse);
    rpc Status(ControllerStatusRequest) returns (ControllerStatusResponse);
    rpc Shutdown(ControllerShutdownRequest) returns (ControllerShutdownResponse);
}

Sandbox API 的引入解决了容器引擎和容器运行时之间由来已久的痛点问题[2]:

引入 Sandbox 语义,增强了云原生架构上的连贯性

削减 shim 进程的冗余,减小资源开销,加快启动速度

缩短调用链,可靠性倍增

消除 Pause 容器冗余

统一沙箱接口使容器运行时支持多沙箱

生命周期与管理

Sandbox API[7] 定义了容器引擎如何与容器运行时交互,其中 Controller Service 定义了沙箱的生命周期管理接口,包括创建 (Create) 、启动 (Start) 、停止 (Stop) 、等待退出 (Wait) 、状态查询 (Status) 、销毁 (Shutdown) 、平台信息查询 (Platform) 等。

通过 Sandbox API,容器引擎能够直接对沙箱进行管理,无需通过 OCI 标准接口间接管理沙箱,提高了容器引擎的性能和稳定性。

资源管理

Sandbox API 还定义了沙箱的资源管理接口,包括资源准备 (Prepare) 、资源清理 (Purge) 、资源更新 (UpdateResources) 等。容器引擎可以通过这些接口管理容器资源,例如在创建容器前准备资源,运行过程中更新资源,容器退出后清理资源。

iSulad 新架构

53395ff8-7718-11ee-939d-92fbcf53809c.png

图1. iSulad 架构对比图

在 Kuasar 发布以后,iSulad 第一时间采用了新的架构以支持 Sandbox API ,使得它能够通过 Kuasar 来直接管理沙箱。

为保持已有版本的兼容性与稳定性,iSulad 只对 CRI V1 版本进行了重构升级,支持用户使用 Sandbox API 管理沙箱。CRI V1alpha 版本继续沿用 OCI 标准来处理沙箱管理请求。

沙箱与容器的解耦

在新的架构中,iSulad 引入了 Sandbox 的语义,新增核心模块 Sandbox ,使其成为容器引擎的一等公民,实现了容器管理与沙箱管理的解耦。从云原生整体架构的角度看,容器编排组件、容器引擎和容器运行时之间的沙箱管理变得更加流畅和高效,形成了一个完整的沙箱管理链路。

以 iSulad+Kuasar+StratoVirt 极速轻量的安全容器解决方案为例,iSulad 在北向接收来自 Kubernetes 的 CRI 请求,并创建 Sandbox 对象来处理 PodSandbox 相关调用,同时使用 Executor 模块来处理 CRI 的 Container 请求。在南向,使用 Controller 模块通过 Sandbox API 调用 Kuasar 的 Sandboxer 进程来管理沙箱,同时使用 Runtime 中的 Shim V2 模块来调用 Kuasar 的 Task 进程,实现了对 StratoVirt 虚拟机中容器的管理。

沙箱控制器

53e45458-7718-11ee-939d-92fbcf53809c.png

图2. 沙箱控制器类图

Sandbox API 的实现使 iSulad 能够直接通过 Controller 来管理沙箱,因此 Kuasar 容器运行时也无需创建 Pause 容器以兼容 OCI 标准,避免了 Pause 容器的冗余。

在新架构中,Controller 模块的设计充分考虑了对原有沙箱管理功能的兼容性,即支持用户通过Sandbox 和 Controller 模块创建普通容器(Pause 容器)作为沙箱。

如上图所示,Controller 模块对 Sandbox 提供了统一 Controller 接口,以及两种不同的实现:Sandboxer Controller 和 Shim Controller 。

Sandboxer Controller 是对 Sandbox API 的封装,将用户对沙箱的管理请求通过 gRPC 接口转发给 Kuasar 的 Sandboxer 进程,从而使 Sandboxer 执行底层的沙箱管理逻辑。

Shim Controller 兼容原有的基于容器管理的接口,将对 Sandbox 的管理请求转发给 Executor 模块,以便创建和管理基于 Pause 容器的沙箱。Shim Controller 的实现使用户能够在新的架构下继续使用 OCI 标准接口来管理沙箱,以兼容原有已部署的业务,确保功能的连续性。

Sandbox 和 Controller 的详细设计可以参见 iSulad 社区的设计文档[8]。

简化容器调用链

53f4d4a4-7718-11ee-939d-92fbcf53809c.png

图3. 容器启动流程图

在支持了 Sandbox API 以后,iSulad 的容器管理流程也发生了一些变化。上图以 iSulad+Kuasar+StratoVirt 解决方案为例,展示了 iSulad 从启动沙箱到启动容器的简化流程。

在图中,Kuasar Task 充当虚拟机中的 init 进程,同时也是虚拟机沙箱内容器的管理进程。它向 iSulad 提供容器管理接口 Task API ,当前解决方案中的 Task API 接口的实现与 Shim V2 类似但又不完全相同。根据 Shim V2 规范,容器引擎会调用一个 Shim V2 的二进制,创建 Shim 进程并返回 Shim 地址,用于管理沙箱、容器和资源。然而,通过调用 Sandbox API,iSulad 不再需要通过 Shim 进程来管理沙箱。相反,Sandbox API 的 Start 接口会在启动沙箱后返回一个 Task 地址,使 iSulad 能够与虚拟机中的 Kuasar Task 进程直接通信,以管理容器的生命周期。这种设计消除 Shim 进程以减少了管理面的内存开销并缩短调用链,从而提高了整个解决方案的性能和稳定性。

总结

Sandbox API 是 iSulad、Kuasar 和 StratoVirt 这三个组件构成的极速轻量的安全容器解决方案的核心纽带。通过 Sandbox API,容器引擎能够直接对沙箱进行管理,无需通过 OCI 标准接口间接管理沙箱,从而显著提高了容器引擎的性能和稳定性。Sandbox API 的引入,也为容器引擎和容器运行时之间的沙箱管理提供了一个标准化的接口,为容器领域的发展提供了新的可能性。当前 Sandbox API 的实现已经合入了 iSulad 社区的主线,用户可以通过 openEuler 23.09 体验这一全栈自研的极速轻量安全容器解决方案,具体可参见 Kuasar 系列文章[6]。

openEuler 社区一直秉承开放、协作、共赢的理念,欢迎更多的开发者参与到 iSulad、Kuasar 和 StratoVirt 的建设中来,共同推动容器领域的繁荣发展。

审核编辑:汤梓红

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • API
    API
    +关注

    关注

    2

    文章

    1384

    浏览量

    60997
  • 隔离技术
    +关注

    关注

    1

    文章

    49

    浏览量

    13059
  • 容器
    +关注

    关注

    0

    文章

    481

    浏览量

    21884
  • 云原生
    +关注

    关注

    0

    文章

    222

    浏览量

    7843

原文标题:iSulad Sandbox API:简化调用链,可靠性倍增

文章出处:【微信号:openEulercommunity,微信公众号:openEuler】欢迎添加关注!文章转载请注明出处。

收藏 人收藏

    评论

    相关推荐

    iSulad+Kuasar+StratoVirt安全容器解决方案的使用介绍

    进程 1:1 的设计,在容器并发时能够提升启动速度 2 倍以上、并节省容器管理进程 99% 的内存增量。Kuasar 基于 Sandbox API [2] 接口开发,区别于当前的 S
    的头像 发表于 11-20 17:00 911次阅读
    <b class='flag-5'>iSulad</b>+Kuasar+StratoVirt安全<b class='flag-5'>容器</b>解决方案的使用介绍

    C#API调用

    求助,各路大神,有人用Labview调用过C#封装的DLL的API函数么?指点指点!
    发表于 05-15 08:53

    串口升级调用API的问题如何解决

    通过串口烧写程序,在程序中调用API函数擦擦FLASH时,通过CCS、jtag在线监测,发现flash已经擦擦,可是程序没返回,如果正常的话,会通知上位机擦除完成,但是程序停止在
    发表于 06-10 15:19

    HarmonyOS方舟开发框架容器API的介绍与使用

    在引擎中会初始化Constructor以及Prototype并返回,最后应用侧可以获得该容器类并使用。 图1 容器类初始化流程 (二)容器类接口调用 在方舟开发框架中,
    发表于 03-07 11:40

    python代码示例之基于Python的日历api调用代码实例

    本文档的主要内容详细介绍的是python代码示例之基于Python的日历api调用代码实例。
    发表于 09-06 14:25 42次下载
    python代码示例之基于Python的日历<b class='flag-5'>api</b><b class='flag-5'>调用</b>代码实例

    API-Shop-OCR-营业执照识别API接口Python调用示例代码说明

    本文档的主要内容详细介绍的是API-Shop-OCR-营业执照识别API接口Python调用示例代码说明
    发表于 01-10 11:48 6次下载
    <b class='flag-5'>API</b>-Shop-OCR-营业执照识别<b class='flag-5'>API</b>接口Python<b class='flag-5'>调用</b>示例代码说明

    使用Python实现微车违章查询API调用的代码实例免费下载

    本文档的主要内容详细介绍的是使用Python实现微车违章查询API调用的代码实例免费下载。
    发表于 01-15 09:59 12次下载

    使用Python实现游戏APP充值API调用的代码实例

    本文档的主要内容详细介绍的是使用Python实现游戏APP充值API调用的代码实例。
    发表于 01-15 11:34 38次下载

    如何使用Python实现购物比价API调用的代码实例

    本文档的主要内容详细介绍的是如何使用Python实现购物比价API调用的代码实例免费下载。
    发表于 01-17 17:11 25次下载

    FreeRTOS中的API函数功能分析及调用方法

    FreeRTOS中的API函数功能分析及调用方法说明。
    发表于 03-26 11:50 32次下载

    iSulad云原生轻量级容器解决方案

    ./oschina_soft/gitee-iSulad.zip
    发表于 05-10 10:30 1次下载
    <b class='flag-5'>iSulad</b>云原生轻量级<b class='flag-5'>容器</b>解决方案

    会根据Web API调用的响应使LED闪烁的开源项目

    电子发烧友网站提供《会根据Web API调用的响应使LED闪烁的开源项目.zip》资料免费下载
    发表于 12-23 17:29 0次下载
    会根据Web <b class='flag-5'>API</b><b class='flag-5'>调用</b>的响应使LED闪烁的开源项目

    openEuler开源项目iSulad加入 CNCF Landscape

    /card-mode?category=container-runtimegrouping=categoryselected=i-sulad iSulad是开放原子开源基金会旗下容器引擎项目,由华为
    的头像 发表于 01-07 10:43 1196次阅读

    调用第三方 API 接口会遇到哪些问题

    了 11、接口时好时坏 12、文档和接口逻辑不一致 13、欠费了   前言 在实际工作中,我们经常需要在项目中调用第三方API接口,获取数据,或者上报数据,进行数据交换和通信。 那么,调用第三方
    的头像 发表于 05-29 14:31 936次阅读

    Sandbox混合计量图像处理工具可简化新工艺配方的实验

    Sandbox上个月开始销售的混合计量图像处理工具有望提高蚀刻和沉积步骤的计量精度,简化新工艺配方的实验,并最终降低工艺技术开发成本。该工具Weave与SandBox Studio AI建模平台配合
    的头像 发表于 10-13 15:26 573次阅读