Nydus Acceld 去 Containerd 服务化

Nydus 容器镜像加速服务 - 架构设计与技术文档 Nydus 是一个高性能容器镜像加速服务,由 Rust 语言实现。它通过在 RAFS(Registry Acceleration File System)格式上实现内容寻址文件系统,显著提升容器启动速度、降低存储和网络带宽消耗。核心优势:快速启动:秒级容器启动,毫秒级函数计算代码包加载按需加载:以 chunk 为单位按需下载镜像数据节省资源:chunk 级别数据去重,跨层/跨镜像降低存储、传输和内存成本端到端安全:数据完整性验证,可检测供应链攻击。 阅读详情

ba62c947c3b1bc3d8eb5b787794a70d4.gif

丁亚东同学为大家带来他在 GitLink 编程夏令营中参加 Nydus 加速镜像的统一转换框架所做的相关工作分享。

大家好!我是来自大连理工大学的 2023 级研究生丁亚东,GitHub ID 是 @Desiki-high。硕士期间主要研究方向是边缘计算,并且十分热爱云原生技术。

Nydus GitHub:

https://github.com/dragonflyoss/nydus

01

课题背景

1.1 OCI 镜像

39d8d51dd51b866c37a46857f2fb7380.png

OCI v1 镜像格式

OCI V1 镜像格式是目前容器镜像的标准规范。每一个 OCI 镜像由一个 index 文件作为镜像的索引文件,包含一至多个 manifest 文件和 config 文件用于描述不同平台镜像的配置以及使用 layer 的索引等信息,最后是多个 layer 文件包含镜像的具体文件信息。这样的分层结构便于不同镜像间 layer 复用以及增量构建,但同时也导致不同 layer 之间存在重复数据。并且 OCI 镜像规范要求所有 layer 全部拉取到本地后开始创建容器,这在镜像体积较大时会导致拉取镜像时间过长,拖慢容器启动速度,参考 Fast'16 论文[1]。

1.2  Nydus 加速镜像

b34a37fdc799bc422e8a74bf187d167a.png

Nydus 镜像格式

Nydus 是 CNCF 孵化项目 Dragonfly 的子项目,它提供了一种按需加载的容器镜像格式,这使得创建Nydus 容器时无需等待全部数据下载完成便可开始服务。Nydus 基于高性能只读文件系统格式 EROFS 扩展出了 RAFS 文件系统格式,从而将镜像层转换为 RAFS 数据和元数据两大部分。

9c9f40c776e95805e6ace6bed56048f2.png

Nydus 基于 FUSE 的按需加载

Nydus 提供了基于 FUSE 的容器按需加载能力。创建容器时,首先由 Containerd 配合 Nydus Snapshotter 组件拉取 Nydus 镜像的 Metadata 层。之后 Nydus Snapshotter 组件启动 Nydus Daemon 进程,创建 FUSE 挂载点作为容器 RootFS 目录,此时容器已经可以正常启动。Nydus 镜像格式显著提高了容器端到端的性能,更为具体内容可以参考 Nydus 社区[2]。

1.3 Harbor 镜像中心

Harbor 是企业级镜像中心,同时也是 CNCF 毕业项目[3]。它提供了通过策略和基于角色的访问控制以及镜像漏洞扫描等特性。目前 Harbor 支持存储标准 OCI V1 镜像以及符合规范的加速镜像例如 Nydus、eStargz 等。Harbor 提供丰富的 API 接口和 Webhook 设计,可以根据业务需求进行自定义扩展。

1.4 Acceleration-Service 通用转换框架

ed430d64c0a2fb6eff46b988e67d1893.png

Acceld, Dragonfly, Nydus 工作流

Acceleration-Service 是 Harbor 的一个子项目[4],它是一个 Harbor 的通用镜像转换框架[5],由 Accelctl 和 Acceld 组成,其中 Acceld 是一个通过 Harbor Webhook 扩展的服务。在 Harbor 仓库集成 Acceld  之后,当用户推送镜像时可以触发 Webhook 请求,从而通过 Acceld 已集成的 Nydus 转换驱动完成镜像的自动转换。但是目前 Acceld 强依赖本地 Containerd 服务的镜像存储层,需要解决部署繁琐,并发限制等问题,同时需要移除 Containerd 服务依赖并实现镜像存储以及 GC 机制。

02

移除 Containerd 服务依赖

2.1 问题分析

Acceld 的工作流程为:从镜像中心拉取原始镜像到本地,使用转换驱动构建加速镜像,从本地将加速镜像推送到镜像中心。目前 Acceld 借助 Containerd 服务进行镜像的拉取、构建、推送, 具体来说通过  Containerd Client 连接本地服务,调用 Containerd 的服务接口实现对镜像的管理。这使得 Acceld 高度依赖 Containerd 服务,存在部署繁琐和扩展困难的限制。

2.2 解决方案

Acceld 在转换镜像过程中需要借助 Containerd 服务的 Image Service 来管理镜像。Image Service 核心实现是 Content Store(负责未解压的 Blob 管理) 与 Snapshotter(负责提供解压层的挂载方式)。由于镜像转换可以不涉及镜像解压,我们在移除 Containerd 服务之后只需要借助 Containerd Pkg 实现 Content Store 管理 Blob 的能力。下面简单介绍 Containerd 如何对镜像进行管理。Containerd 将容器镜像抽象为 Image 格式如下。

type Image struct {    Name string    Labels map[string]string    Target ocispec.Descriptor    CreatedAt, UpdatedAt time.Time}

Acceld 可以借助 Image 结构以及相关的操作 pkg 将镜像的索引信息保存在内存中,并借助 bolt database[6] 将镜像数据进行持久化。对于具体的本地镜像数据文件的读写操作需要借助 Content.Store interface[7] 实现对镜像的管理,抽象接口如下。

type Store interface {  Ingester  IngestManager  Provider    Manager}

在 Containerd Store 中,Ingester 在 Store 写入 Blob 前,暂存写入中的数据,IngestManager 负责管理Ingester 的活动,例如 list 、about 等。在 Ingester 写入数据之后,Provider 提供读 Store 的方法,例如 io.ReaderAt 和 io.Closer 等。Manager 用于管理之前 Commit 到本地的数据文件,提供 Update 和 Delete 等方法。

2.3 方案实现

设计方案如下图所示,Acceld 接受 HTTP 请求,其中 task 为一次镜像转换任务。

eca15a19c07fd3bbf6dcee91ff3c1912.png

利用 Containerd 提供的 Content Store 拉取、转换和推送镜像的能力来管理本地镜像文件,同时借助 bolt database 记录本地镜像索引信息并持久化。我们基于 Containerd pkg 在上层进行封装初步构造了满足我们功能需求的 Content 结构。

import (  ctrcontent "github.com/containerd/containerd/content"  "github.com/containerd/containerd/metadata")type Content struct {    // db is the bolt database of content  db *metadata.DB  // store is the local content store wrapped inner db  store ctrcontent.Store}

利用 Conetnt.db 管理本地数据库,借助 Containerd 二次封装的 metadata.DB ,我们实现的 Content.db 和 Content.store 是相互关联的,所有拉取、转换和推送的镜像信息都会同步至本地数据库文件。至此我们成功移除了 Containerd 服务依赖并实现了镜像存储。

03

合理的 GC 机制

3.1 问题分析

借助 Containerd pkg 实现了镜像的存储功能,但目前阶段 Acceld 的 GC 使用原生 Containerd 提供的 GC 模式[8] 但是由于 Acceld 只拉取镜像而不运行容器,所以每次调用 content.garbageCollect 时会清空本地所有的镜像文件。这并不符合 Acceld 的需求,Acceld 需要优先删除不常用的 Upper 镜像层数据而保留经常使用的 Base 镜像层。我们需要实现符合 Acceld 需求的 GC 逻辑,即按照 LFRU 的(先 LFU 再 LRU)顺序清理缓存。

3.2 解决方案

首先需要实现对镜像按 Blob 粒度进行清理的能力,然后在此基础上根据 Blob 索引记录历史使用信息,包括最后一次使用时间以及使用次数信息。当本地存储镜像文件大小超过所设置的阈值时,按照先 LFU (使用次数) 后按照 LRU (使用时间) 来进行容器镜像层的清理。为了保证清理的健壮性,我们需要在每次镜像转换任务结束后检测存储大小是否超过阈值,同时设置定时任务来定时监测。

为了实现按 Blob 粒度清理本地缓存,我们需要借鉴 Containerd 中的 GC 管理机制。Containerd 使用 lease[8] 来实现对容器的所有文件的 GC 管理,包括容器镜像。具体来说,Containerd 在 GC 时会避免回收被 lease 管理的容器以及其使用的镜像文件。为了实现 LFRU 的机制,我们需要在 LRU 的基础上进行二次封装来引入镜像使用次数保护 Upper 镜像层数据。

3.3 方案实现

在实现自身容器镜像管理机制的基础上,我们在 bolt 数据库中建立了单独的 bucket 来记录内存中所使用的 lease 以及最后一次使用时间等相关信息。使用 bolt 数据库可以便于持久化信息,在 Acceld 进程故障重启后仍然可以恢复正常的 lease 信息。为了提高 Acceld 的 GC 性能,我们实现了 leaseCache 将需要的 lease 索引信息同步到内存中。

type leaseCache struct {  caches      map[string]*lru.Cache[string, any]  cachesIndex []int  size        int}

具体来说,我们利用自身实现的 Content.Store 接口,在 Commit 等保存镜像过程中对所有的 Blob 设置一个永不过期的 lease 同时记录到 bolt 数据库和 leaseCache 中。在每次 Acceld 读取 Blob 时更新数据库中记录的 usedAtLabel 和 usedCountLabel 信息,并更新 leaseCache 中 caches 中 lease 的顺序。我们将所有内容均封装到 Acceld 的 Content 结构中,最终 Content 结构如下所示。

type Content struct {  // db is the bolt database of content  db *metadata.DB  // lm is lease manager for managing leases using the provided database transaction.  lm leases.Manager  // gcSingleflight help to resolve concurrent gc  gcSingleflight *singleflight.Group  // GcMutex works between gc and convert  GcMutex *sync.RWMutex  // lc cache the used count and reference order of lease  lc *leaseCache  // store is the local content store wrapped inner db  store ctrcontent.Store  // hosts provides remote registry access methods.  hosts remote.HostFunc  // Threshold is the maximum capacity of the local caches storage  Threshold int64}

当程序发现本地存储容量达到所设置阈值的80%时,Acceld 首先会根据 leaseCache 中记录的清理顺序,对 lease 进行清理直到本地存储容量降到到阈值的80%以下。清理 lease 之后, Acceld 使用 db 中封装的 GC 方法实现最终的清理。具体方法实现如下所示,在实际实现过程中需要借助 Singleflight 以及 RWMutex 来实现在高并发场景下的 GC 能力。

func (content *Content) GC(ctx context.Context, threshold int64) {  size, err := content.Size()  if err != nil {    logrus.Error(errors.Wrap(err, "gc get content size"))    return  }  if size > (threshold*gcPercent)/100 {    content.gcSingleflight.Do(accelerationServiceNamespace, func() (interface{}, error) {      content.GcMutex.Lock()      defer content.GcMutex.Unlock()      size, err := content.Size()      if err != nil {        logrus.Error(errors.Wrap(err, "gc get content size"))        return nil, nil      }      if err := content.garbageCollect(ctx, size-(threshold*gcPercent)/100); err != nil {        logrus.Error(errors.Wrap(err, "gc"))      }      return nil, nil    })  }}

04

项目总结与展望

4.1 为何参加活动  

非常荣幸,我可以参加本次 GitLink 编程夏令营。在今年上半年,我参与了 Nydus 项目关于容器文件预取的部分工作,积累了一些开源工作的经验。在与严松老师的沟通过程中了解到 GitLink 编程夏令营,我认为这是一个很好的学习机会。于是便投递了 Acceld 项目的简历申请,最终在严松老师的帮助下顺利完成了题目。

4.2 遇到的困难与挑战  

在项目开发过程中,遇到的最大的困难是如何实现合理的 GC 机制。我需要借鉴 Containerd GC 来实现 Acceld 的 GC ,并在此基础上实现 LFRU 的缓存清理策略。而 Containerd 项目十分复杂,它的 GC 机制非常健壮,我需要深入阅读 Containerd 项目源码来理解关于 label 和 lease 之间的管理机制。在确定实现思路之后,如何实现也是一个很大的挑战。例如在初步实现 GC 之后,我发现在清理过程中并不会按照我设计的 Blob 粒度清理,而是一次性清理一个镜像中的所有 Blob。经过继续验证之后,发现 Containerd 默认在使用 Content Store 保存本地镜像文件时会写入一些影响 GC 清理顺序的 label。实际上这些 label 是服务于容器管理,所以我们决定在 Content 写入镜像层时对 label 进行过滤,最终实现了按 Blob 粒度的缓存清理。

4.3 社区与导师的帮助  

在本次 GitLink 编程夏令营过程中,社区 maintainer 对我提出的疑问以及遇到的问题进行了仔细的解答。在设计阶段,在我的设计基础上提出建议,帮助我一步一步完善架构设计。在编码阶段,导师对我的 PR 进行了多次的 Code Review,帮助我提高代码质量。

4.4 收获与展望  

在本次编程夏令营中,我不仅进行了核心功能的开发工作,同时也参与了社区 CI 和 文档的维护工作。在PR 的 Review 中提高了自身的代码能力和思考能力,在这里我也要再次向导师以及社区表示衷心的感谢。这是我第一次深入地接触开源社区,社区对开源新手非常友好,会仔细指出我的各种错误,并给予详细的帮助和修改意见。今后,我也会继续参与到社区的开源工作之中,在社区中继续提高自身能力。GitLink 编程夏令营是一个适合新人的平台,如果你对社区中任何项目感兴趣,欢迎加入。

参考

[1].Fast'16

https://www.usenix.org/node/194431

[2].Nydus

https://github.com/dragonflyoss/nydus

[3].Harbor

https://goharbor.io/

[4].Acceld

https://github.com/goharbor/acceleration-service

[5].Harbor 构建高效的镜像加速工作流

https://mp.weixin.qq.com/s/pc_jL77kR5SFzruL1njynw

[6].Bolt Database

https://github.com/etcd-io/bbolt

[7].Containerd Content

https://github.com/containerd/containerd/blob/main/content/content.go

[8].Containerd GC

https://github.com/containerd/containerd/blob/main/docs/garbage-collection.md

GitLink 编程夏令营是在 CCF 中国计算机学会指导下,由 CCF 开源发展委员会(CCF ODC)举办的面向全国高校学生的暑期编程活动。这是 2023 的夏令营活动中,丁亚东同学参加 Nydus 开源项目的总结,主要介绍为支持 Nydus 等加速镜像的统一转换框架所做的相关工作。

推荐阅读

3ae848c728addcbf5630f7e16a7d9fcb.png

Dragonfly 发布 v2.1.0 版本!

b83a544f0bac5362f41a9b7c7e1ef428.jpeg

火山引擎基于 Dragonfly 加速实践

e9258ca48adc012080c186085d1314a1.jpeg

Dragonfly 基于 P2P 的文件和镜像分发系统

780aafccf68e130baae52e181feb6137.jpeg

Dragonfly 和 Nydus Mirror 模式集成实践

25495a2d17b9bfe6833fc7aa5d14fe26.jpeg

Nydus容器镜像加速:原理、部署与生产实践指南 在云原生和容器化技术领域,容器镜像的存储与分发效率是影响应用部署速度的关键因素。传统OCI镜像采用全量拉取模式,导致启动延迟高、存储冗余大。Nydus通过引入RAFS镜像格式,实现了块级去重与按需加载的核心原理,将镜像数据切分为内容寻址的块,仅在容器运行时访问文件时才动态拉取对应数据块。这项技术显著提升了容器启动速度,减少了网络带宽消耗和存储空间占用,其价值在于为大规模、高密度部署场景(如Kubernetes弹性伸缩和Serverless冷启动)提供了高效的解决方案。通过集成containerd snaps 阅读详情

相关推荐

Nydus: 优化 AI 场景下的容器镜像加载

Nydus 是一个自定义的文件系统格式(Rafs),专为容器镜像优化设计。它的核心特性是实现镜像文件的按需加载,这对于 AI 场景尤其有用。在 AI 的推理或训练过程中,镜像大小常常从几 GB 到几十 GB 不等,Nydus 可以显著提高这些大型镜像的加载效率。

探索云原生与智能化驱动下的安全运维新范式。关注DevSecOps、可观测性、AIOps等前沿领域,与您共赴技术前沿。 626

Nydus容器镜像加速能力并集成到nerdctl(实验中。。。。。。)

内容相关 :nerdctl docker rootfs nydus

啊阿啊啊啊杨的博客 1560

USB接口ESD保护电路:深度剖析与选型建议

USB接口在热插拔和频繁使用中极易遭遇静电放电(ESD)冲击,导致芯片损坏或通信异常。本文结合实际电路设计经验,详解TVS二极管、集成ESD防护器件等方案在USB接口上的应用要点,重点分析钳位电压、结电容、IEC 61000-4-2等级等关键参数对信号完整性与防护效果的影响,助你为USB接口匹配高可靠、低干扰的ESD保护方案。

weixin_36289813的博客 510

Nydus:加速容器启动的利器

Nydus 是由 Dragonfly 团队开发的一款高性能容器镜像服务,旨在通过优化容器镜像的加载和分发,显著提升容器的启动速度、降低网络带宽和存储成本,并增强数据完整性。Nydus 实现了基于 RAFS 格式的内容寻址文件系统,是对当前 OCI 镜像规范的重大改进。 Nydus 的核心优势在于其能够实现秒级的容器启动速度,尤其是在处理大型 OCI 镜像时,其性能提升尤为明显。通过 Nydus,

gitblog_00781的博客 1194

kali设置安装burpsuite中文版

工具:通过网盘分享的文件:Burpsuite 链接:提取码: jay1。

m0_74786138的博客 5202

LSF0108 level shift设计使用及debug流程

目录 初版设计 测试出现的问题1 解决问题(尝试1) 测试出现的问题2 解决问题2-1 解决问题2-2 单Port测试结果 所有Port均连接测试结果 初版设计 此电路的应用场景在于将LCD屏幕连接到FPGA上,进而通过FPGA中设计的硬件电路来驱动LCD屏幕,验证数字硬件电路设计的正确性。因此需要一个转接板位于FPGA和LCD屏幕之间,将二者连接起来。 转接板的硬件电路设计主要存在以下需求: 实现3.3V和1.8V之间的同时双向逻辑转换(LCD屏幕电平为3.3V,FPGA电平为1.

moshanghongfeng的博客 7562

阿里云、蚂蚁开源 Nydus——容器镜像加速服务

近日,Dragonfly 项目引入了一个容器镜像加速服务 nydus。据悉,nydus 是由阿里云和蚂蚁集团的工程师合作开发,并大规模部署在内部的生产环境中。 据Dragonfly 发布的消息,在其的测试中, nydus 能够把常见镜像的启动时间,从数分钟缩短到数秒钟。另外,容器运行时数据一致性校验方面,nydus 镜像不会被解压到本地,同时可以对每一次数据访问进行校验,如果数据被篡改,则可以从远端数据源重新拉取。 nydus 通过优化现有的 OCI 镜像标准格式提供: 容器镜像按需下载,用户不.

寒冰屋的专栏 2699

配置权重_高盛都在用的资产配置模型,BL贝叶斯框架改进Markowitz

前面我们说到,markoviz的均值-方差模型,第一次,用数学的方式严格证明了投资组合存在最优的权重,但它的学术意义大于实战。主要原因有两个:1,人们很难有效的预测期望收益率;2,最优资产组合配置对输入非常敏感,结果往往难以被人理解。还有就是在投资中,定量只是完成初步构建,同步的定性判断依然非常重要:第一,投资者的认知偏好:倾向于关注他们认为被低估,但有发展潜力或者可以确定相对交易价值的小部分股票...

weixin_39892309的博客 715

Nydus 懒加载镜像配置与实践

公众号关注「奇妙的 Linux 世界」设为「星标」,每天带你玩转 Linux !据统计容器中的大部分文件不会被使用。根据这一特征,Nydus 自定义了 Rafs 格式的文件系统,实现了镜像文件的按需加载,以解决大镜像导致的启动慢和占用存储的问题。而在 AI 场景下,无论是推理还是训练,镜像常常都是几个 G 起步,甚至几十个 G,Nydus 非常适用。本篇主要是一些具体操作步骤,用于快速配置镜像懒...

easylife206的专栏 1664

数字设计实验:RISC-V指令单周期CPU

本文旨在介绍RISC-V指令单周期CPU的设计思路和仿真实现(含代码)

2401_83740084的博客 2713

大语言模型与ROS集成的自然语言机器人控制:开源框架与应用实例

近年来,大语言模型(LLM)与机器人操作系统(ROS)的集成逐步成熟,使得自然语言驱动的机器人控制成为可能。用户输入“捡起绿色方块”或“把微波炉里的饭热好端过来”这类日常语句,机器人能够自动拆解步骤、规划动作并执行。本文梳理2026年前后发布的三个代表性开源框架——ROS-LLM、ROSClaw以及LLM+Nav2基准测试系统,介绍其技术路径与工程落地情况。

Studying…… 634

容器镜像基础(nydus)

包括 nydus 的基本概念、架构和容器镜像加速使用方法。

分享观点和经验,欢迎交流。 1663

YOLOv13改进策略【Backbone/轻量化】| 替换骨干网络 CVPR-2024 StarNet,超级精简高效的轻量化模块

本文记录的是。StarNet设计简洁,没有复杂的设计和精细调整的超参数,仅是一个 4 阶段的分层架构。并且其中能够在低维空间计算的同时考虑极高维的特征这一特性,进而提高模型精度。本文在替换骨干网络中配置了原论文中的starnet_s1starnet_s2starnet_s3和starnet_s4七种模型,以满足不同的需求。

Limiiiing的博客 670

Dragonfly 社区技术分享|Nydus 远端转换缓存实现

在 2023 年的开源活动中,于强同学参加并负责了 Nydus 开源存储构建与分发支持课题的相关工作。大家好!我是来自西北工业大学的于强,在开源之夏 2023 中报名参与了 Nydus 项目,并在导师的帮助下顺利完成了题目。通过此次活动,不仅对容器和镜像的底层技术有了更进一步的了解,也体验了如何开始参与一个开源项目。Nydus GitHub:https://github.com/dragonfly...

金融级分布式架构 815

使用Matlab实现海洋监视雷达检测仿真

海洋监视雷达是一项重要的海洋探测技术,可以用于海上船只、飞机、潜艇等目标的探测和监视,具有广泛的应用价值。本篇文章将介绍如何使用Matlab进行海洋监视雷达的检测仿真,并提供相应的源代码。本篇文章提供了利用Matlab进行海洋监视雷达检测仿真的基本思路和代码实现。读者可以根据自己的需求进行修改和优化,以适应不同的应用场景。使用Matlab实现海洋监视雷达检测仿真。

2301_78484069的博客 448

NTscan扫描工具

ntscan是一个扫描器,可以扫描没有密码和弱密码的共享,先到配置文件中填写猜测的用户名和密码,扫描过程中右侧出现的是扫描日志。

Nydus 加速镜像一致性校验增强

这是去年(2022)的夏令营活动中,王瑞同学参加 Nydus 开源项目的总结,主要介绍了为 Nydus 支持镜像与文件系统一致性校验所做的相关工作。

金融级分布式架构 620

Camera2Demo

在Camera2 的基础上进行封装,使得Camera2一堆初始化逻辑与Activity分离,降低耦合度,完成预览拍照并保存的操作

Nydus 镜像扫描加速

镜像扫描的原因与内容容器镜像是当前容器/软件分发的基础,里面包含了容器隔离环境以及软件执行环境的相关内容。因此保障其安全性变得十分重要。镜像扫描即是要扫描镜像中的所有内容,及时发现可能包含的安全漏洞或者隐私泄露。1. 安全漏洞。包括系统软件包和应用软件库中可能存在的安全漏洞。可以通过比对镜像中这些库/软件包的来源、版本等与 CVE 数据库中报告的漏洞的包的来源、版本来定位可能存在的安全漏洞。2. 配置。包括镜像运行的环境配置和镜像中相关内容组合可能带来的问题。

BASK2311的博客 782

廖雪峰Python教程[完整版]

廖雪峰的python教程整理的,已经排好版了,而且还是完整的,适合小白

IMSL CNL 7.0.0 (x86-64)Crack

IMSL CNL 7.0.0 (x86-64)Crack intel的算法库破解文件,这是C++版本的破解文件

终极指南:Nydus容器镜像服务核心功能与架构解析

Nydus(GitHub 加速计划)是一个高性能容器镜像服务,通过创新的镜像格式和分发机制,显著提升容器启动速度并降低存储成本。本文将深入解析Nydus的核心功能、架构设计及实际应用价值,帮助开发者快速掌握这一容器优化利器。 ## 🚀 什么是Nydus容器镜像服务? Nydus作为Dragonfly镜像服务的核心组件,采用用户空间文件系统(FUSE/VirtIO)实现,通过**按需加载**和

gitblog_00309的博客 972

容器启动加速-nydus

Nydus是一个镜像加速器,主要通过容器启动时懒加载镜像提高启动速度, 大镜像可以秒级启动,后续的读写通过COW方式。以下是nydus的几个标签: - Nydus是蚂蚁、阿里云、字节等共建的开源容器镜像加速项目 - CNCF孵化的项目Dragonfly中的一个子项目 - 新的镜像格式,不同于oci - 良好的生态,兼容containerd、k8s、harbor、buildkit -- 从构建、存储、部署、到CI集成,有丰富的解决方案

Moolight_shadow的专栏 3620

Nydus | 容器镜像基础

Nydus | 容器镜像基础

金融级分布式架构 1018

Nerdctl 原生支持 Nydus 加速镜像

Containerd 是当前最流行的容器运行时之一,Nerdctl 作为 Containerd 的社区中的核心项目提供了完善的使用体验。它们都是容器领域中非常重要的基础项目。通过本次项目的开发工作,我逐渐了解了 OCI 镜像的组成部分,每部分的作用和基本格式;知道了以及 Nydus 镜像和 OCI 镜像之间的差异,并且理解了 Nydus镜像中 Blob layer 和 Bootstrap layer 之间的区别;能够通过检查本地镜像相关文件排查一些简单的程序 bug。

金融级分布式架构 1621

Nydus 开源项目使用教程

Nydus 开源项目使用教程 1. 项目的目录结构及介绍 Nydus 项目的目录结构如下: nydus/ ├── contrib/ │ ├── nydus-backend-proxy/ │ ├── nydus-overlayfs/ │ └── ... ├── docs/ ├── scripts/ ├── src/ │ ├── nydusd/ │ ├── nydus-image/...

gitblog_01034的博客 507

为什么选择Nydus?揭秘容器镜像加速的8大核心优势

Nydus作为Dragonfly镜像服务,为容器镜像提供了快速、安全且便捷的访问方式。在容器技术日益普及的今天,镜像的拉取速度、存储效率和安全性成为影响容器部署效率的关键因素。本文将深入剖析Nydus的8大核心优势,帮助你理解为什么它能成为容器镜像加速的理想选择。 ## 1. 突破性的镜像拉取速度 🚀 传统容器镜像拉取往往需要等待完整镜像下载完成,这在大型镜像或网络条件不佳时会严重影响部署效

gitblog_00442的博客 1076

RLTrader交易环境详解:从PPO2算法到自定义动作空间的完整实现

🚀 **RLTrader** 是一个基于深度强化学习的加密货币交易环境,它巧妙地将OpenAI Gym接口与PPO2算法相结合,为量化交易爱好者提供了一个强大的实验平台。无论你是量化交易新手还是经验丰富的开发者,这个项目都能帮助你快速构建和测试自己的交易策略。本文将带你深入了解RLTrader的核心架构、PPO2算法的应用以及如何自定义交易动作空间,助你在加密货币交易领域迈出坚实的第一步! #

gitblog_00044的博客 497
上一篇: 支付宝云开发 H5 页面渲染提升优化实践
下一篇: SOFA Weekly|Layotto 社区会议预告、SOFAServerless 社区会议回顾、社区本周贡献
SOFAStack
博客等级 码龄7年 747粉丝 389原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值