展开菜单
首页 精品内容 本月促销 装机必备 Windows PDF教程 macOS软件 IOS软件 Android AI 专题
全部分类

当前位置:

首页 > 系统应用 > 对容器镜像的思考和讨论

对容器镜像的思考和讨论

前言常言道,startup 有 startup 的好,大厂有大厂的好,那么大厂究竟好在哪呢?拿硅谷老牌大厂们 FLG 来说,如果要问最令人怀念的是什么?Free food 和基础设施(Infrastructure)一定是会上榜的,两者均极大提升了广大应用开发者的幸福指数。那么能不能“让天下没有难做的

本文目录
    前言

    常言道,startup 有 startup 的好,大厂有大厂的好,那么大厂究竟好在哪呢?拿硅谷老牌大厂们 FLG 来说,如果要问最令人怀念的是什么?Free food 和基础设施(Infrastructure)一定是会上榜的,两者均极大提升了广大应用开发者的幸福指数。那么能不能“让天下没有难做的应用”呢?请大家把目光投向正在兴起的云原生生态。

    在云原生生态中,容器服务包括了镜像和容器引擎两个部分。其中容器镜像作为核心的云原生应用制品,打包了完整的操作系统和应用运行环境,应用的迭代也因为使用了这种不可变架构而变得更简单,更频繁。

    本文将围绕着容器镜像这一核心,分享它的相关知识和业界的思考与实践。

    容器镜像的概念

    1)容器镜像

    容器镜像有一个官方的类比,"生活中常见的集装箱",虽然拥有不同的规格,但箱子本身是不可变的(Immutable),只是其中装的内容不同。

    对于镜像来说,不变的部分包含了运行一个应用软件(如 mysql)所需要的所有元素。开发者可以使用一些工具(如 Dockerfile)构建出自己的容器镜像,签名并上传到互联网上,然后需要运行这些软件的人可以通过指定名称(如 example.com/my-app)下载、验证和运行这些容器。

    2)OCI 标准镜像规范

    在 OCI 标准镜像规范出台之前,其实有两套广泛使用的镜像规范,分别是 appc 和 docker v2.2,但“合久必分,分久必合”,有意思的是两者的内容已经在各自的发展中逐步同化了,所以 OCI 组织顺水推舟地在 docker v2.2 的基础上推出了 oci image format spec,规定了对于符合规范的镜像,允许开发者只要对容器打包和签名一次,就可以在所有的容器引擎上运行该容器。

    这份规范给出了 OCI image 的定义:

    This specification defines an OCI Image, consisting of a manifest,
    an image index (optional), a set of filesystem layers, and a configuration.

    3)容器的工作流程

    一个典型的容器工作流程是从由 developers 制作容器镜像开始的(build),然后上传到镜像存储中心(ship),最后部署在集群中(run)。

    容器镜像技术发展中遇到的问题

    不得不说,容器镜像的设计是很出彩的,首先它蕴含了“完整的操作系统就是一个包”的优秀思想,带着大家跳出了安装包的思路,又提出了诸如 dockerfile 这样的提升开发者体验的 killer features,还能利用分层结构来节约时间空间。

    不过,"金无足赤,人无完人",优秀的设计并不等于优秀的实践,下面来聊一聊问题具体出在哪。

    1. 容器镜像使用者

    1)问题一:启动容器慢

    容器启动慢的情况普遍发生在当用户启动一个很大 size 的容器镜像时,由于在容器准备阶段需要三步(以 overlayfs 为例):

    • download 镜像。

    • unpack 镜像。

    • 使用 overlayfs 将容器可写层和镜像中的只读层聚合起来提供容器运行环境。

    其中,download 镜像时需要 download 整个镜像,不能实现文件数据按需加载。再加上 download 镜像本身受限于网络带宽的影响,当容器镜像 size 在到几个 G 时,下载时间会较长,破坏了容器原本优秀的用户体验。

    2)问题二:较高的本地存储成本

    不同镜像之间可以共享的最小单位是镜像中的层,它的缺点之一是在 deduplication 上的效率是较低的,原因是:

    • 首先,层内部存在重复的数据。

    • 其次,层与层之间可能存在大量重复的数据,但即使有微小的差别,也会被作为不同的层。

    • 再次,根据 OCI image spec 对删除文件和 hardlink 的设计,一个镜像内部可能存在已经被上层删除的文件仍然存在于下层中,并包含在镜像中。

    所以,当不同镜像的容器被调度到同一台机器上运行时,镜像本身在本地文件系统中所占的存储空间是一笔不可忽视的成本开销。

    2. 镜像提供者侧

    这里的提供者主要指容器服务的镜像中心。

    1)问题一:巨大的存储浪费

    • 存在大量相似镜像 造成这种情况有两个原因:

      • 首先,上面提到的层的缺点,在容器镜像中心会产生许多相似镜像。

      • 其次,OCI镜像采用了tar+gzip格式来呈现镜像中的层,而tar格式并不区分tar archive entries ordering。这就引出了一个问题:倘若用户在不同机器上构建同一个镜像,最终可能会因使用不同文件系统而得到不同的镜像。那么用户上传后,镜像中心就会出现若干不同镜像但实质内容完全相同的情况。

    • 镜像去重效率低:虽然镜像中心有垃圾回收来实现去重功能,但其仍然以层为单位,所以只能在有完全相同 hash value 的层之间去重。

    2)问题二:云原生软件供应链带来的新需求

    随着时间推移,和软件供应链一起发展的还有对软件供应链环节的多样性攻击手段。安全防护是软件供应链中非常重要的组成,不光体现在对软件本身的安全增强,也体现在对供应链本身的安全增强。而因为应用运行环境被前置到了容器镜像中,所以对容器镜像的安全,包括对镜像的漏洞扫描和签名成为了容器服务提供者的必要能力。

    对容器镜像的思考和讨论

    1. 业界的尝试

    针对前面所述的问题,业界大小厂也是集思广益,各显神通,下面提几个典型的项目:

    1)CernVM-FS

    使用了 fuse 按需从远程加载需要的数据。

    2)Slacker

    通过设计一个镜像的 benchmark 贡献了几个有意思的理论基础:

    • 事实上,容器启动时间很长。

    • 启动时数据读写放大系数很大(启动时中只使用 6% 的数据)。

    • 分析了 57 个 docker image 的 layer 数量,发现一半以上的 image 的 layer 数量大于 9。

    Slacker 最终使用了按需加载和减少镜像层数将启动速度提高了 5-20 倍。

    3)SquashFs

    Oracle 使用 Linux SquashFS 来替代 targz 存储容器 image layer 的内容,去掉了 unpack tar 的环节。

    2. OCI 社区中的讨论

    自 2019 年开始,对于镜像本身的吐槽慢慢多了起来,发酵了一年多,OCI 社区觉得时机成熟了,从 2020 年 6 月开始,花了一个多月时间密集讨论了当前 OCI 镜像规范的缺陷,以及 OCIv2 镜像格式(*)需要满足哪些要求。

    (*)OCIv2 在这里只是一个宣传命名,实际上 OCIv2 是当前 OCI 镜像规范的改进,而不会是一个全新的镜像规范。

    1)OCI 镜像规范的缺陷

    经过讨论得出目前的缺陷主要有两点:

    • tar 格式标准

      • tar 格式并不区分 tar archive entries ordering,这带来一个问题,即如果用户在不同机器上去 build 同一个镜像,最终可能会因为使用了不同的文件系统而得到不同的镜像,比如在文件系统 A 上的 order 是 foo 在 bar 之前进入 tar,在文件系统 B 上的 order 是 bar 在 foo 之前进入 tar,那么这两个镜像是不同的。
      • 当 tar 被 gzip 压缩过之后不支持 seek,导致 run container 之前必须先下载并解压 targz 的 image layers,而不能实现文件数据按需加载。
    • 以层为镜像的基本单位

      • 内容冗余:不同层之间相同信息在传输和存储时都是冗余内容,在不读取内容的时候无法判断到这些冗余的存在。
      • 无法并行:单一层是一个整体,对同一个层既无法并行传输,也不能并行提取。
      • 无法进行小块数据的校验,只有完整的层下载完成之后,才能对整个层的数据做完整性校验。
      • 其他一些问题:比如,跨层数据删除难以完美处理。

    2)下一代镜像格式的要求

    这次镜像格式大讨论从一个邮件和一份共享文档开始,并促成了多次在线的 OCI 社区讨论会议。最后的结论也很鼓舞人心,在这份共享文档中可以找到对 OCIv2 镜像格式需要满足的要求的详细描述。我们可以将这些要求分类为:

    (*): 诸如 file timestamp 等只在一个特定机器上有意义的 metadata 是没有必要存在于镜像中的。

    可以看出,上面这些要求明确了容器镜像的下一步重点在易用、效率、安全三个方面,达到在 "build - ship - run" 这三个阶段协同优化的目的。

    3. 阿里云在容器镜像上的思考

    阿里云一直积极地推动和发展云原生生态,提供了基础设施“阿里云容器镜像服务(ACR)”作为用户云原生容器化的第一站,负责提供容器镜像、Helm Chart 等 OCI Artifacts 管理和分发服务。同时我们也在结合容器业务现状深化对容器镜像格式的理解,不断地总结什么是满足发展需求的容器镜像格式,这里可以概括为以下几点,新的镜像格式需要:

    • 满足容器 "build once, run anywhere" 的理念。
    • 实现在镜像中心和容器运行结点上存储资源上的高效使用。
    • 在容器镜像的全链路上(build, ship, run)比现有的 OCI 镜像格式速度更快。
    • 能够扩展在安全上的能力。
    • 最大程度兼容已有基础设施,普惠大多数用户。
    阿里云沙箱容器的镜像加速

    相比于社区的讨论重点放在了新的镜像格式的设计上,阿里云更关心如何设计出一套优化全链路的镜像方案,为客户带来能够应用在生产中的价值。

    在明确以上在技术发展过程中产生的需求之后,我们为阿里云沙箱容器设计了新的镜像格式 Rafs,并为 CNCF 下的 Dragonfly 项目引入了容器镜像服务,它能够极大缩短镜像下载时间,并提供端到端的镜像数据一致性校验,从而让用户能够更安全快捷地管理容器应用。

    1. Rafs: 镜像格式

    Rafs 把一个容器镜像只分成元数据和数据两层。其中:

    • 元数据层:元数据层是一颗自校验的哈希树。每个文件和目录都是哈希树中的一个附带哈希值的节点。一个文件节点的哈希值是由文件的数据确定,一个目录节点的哈希值则是由该目录下所有文件和目录的哈希值确定。
    • 数据层:每个文件的数据被按照固定大小切片并保存到数据层中。数据切片可以在不同文件以及不同镜像中的不同文件共享。

    2. Nydus: Dragonfly 的容器镜像服务

    除了使用上面的镜像格式 Rafs,Nydus 还包含一个负责解析容器镜像的 FUSE 用户态文件系统进程。

    nydus 能够解析 FUSE 或者 virtiofs 协议来支持传统的 runC 容器或者阿里云沙箱容器。容器仓库、OSS 对象存储、NAS、以及 Dragonfly 的超级节点和 peer 节点都可以作为 nydus 的镜像数据源。同时,nydus 还可以配置一个本地缓存,从而避免每次启动都从远端数据源拉取数据。

    基于这个设计架构,nydus 分别在 build, ship, run 和兼容性方面提供下面这些优化:

    3. 为什么选择基于文件的设计

    在设计之初,Nydus 选择了基于文件的设计而不是基于块的设计,为什么这样做呢?

    主要的原因是,我们想在镜像加速的基础上做基于容器特点的附加能力,这一切都建立在能够获取到镜像中的文件元数据;而基于块的设计只使用 disk LBA,天然的无法获取其上层(即文件系统)中的信息。

    有了文件元数据之后,我们轻松地实现了以下几个增值功能:

    • 镜像优化建议:在 build container 环节,提示用户有哪些文件是根本没有访问过的,可以考虑借此来优化镜像。
    • 预读:在 run container 环节预加载,猜到用户要读文件,那就预先在读操作发生之前送过去,从而优化访问速度。
    • 安全审计:在 run container 环节,如果一个容器访问镜像内容的模式和其他容器产生了明显差异,那么,这有可能是一个安全性风险。
    • 变更风险发现:在 run container 环节,如果一个镜像升级之后,发现它访问内容的模式和之前发生了明显差异,那么,要么是程序自己有意变了,要么就可能是引入 bug 了,这时可以考虑提醒开发者这个变化。
    总结

    OCI image分层镜像机制虽为开发带来了极大便利,但在大规模集群运行时,也暴露出不少问题。为此,OCI镜像社区一直在探索如何利用镜像内容可感知性,使其更加快速、节省资源且更安全。阿里云基于此,秉持为客户创造价值的原则,针对公有云上镜像的稳定性、预读等需求,为阿里云沙箱容器研发了相应的镜像加速方案,实现了“build-ship-run”整个镜像链路的统一优化,让用户不仅能听到技术的热闹,更能切实体验到云原生基础设施发展带来的红利,真正用得开心。

    点击参与“容器镜像使用调查问卷”填写,将有 10 位随机获赠阿里云容器镜像服务(企业版)ACR EE 50 元优惠券哦~

    本站声明:本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系bd@zhengruan.com
    作者最新文章
    系统应用
    相关文章 更多
    精品专题 更多
    装机必备

    正软商城装机必备专区,精选办公、浏览器、安全防护、影音播放、压缩解压、设计创作和系统工具等电脑常用正版软件,帮助用户快速完成新电脑软件配置。

    Windows

    正软商城Windows软件专区,汇集适用于Windows电脑的办公、设计、安全防护、影音播放、开发工具和系统优化软件,提供软件介绍、系统要求、正版授权及购买下载服务。

    PDF教程

    正软商城PDF教程频道提供PDF编辑、转换、合并、拆分、压缩及格式处理方法,同时介绍常用PDF软件和工具的使用技巧。

    macOS软件

    正软商城macOS软件专区,精选适用于Mac电脑的办公、设计、影音、效率、开发和系统工具,提供软件功能介绍、macOS兼容版本、正版授权及购买下载服务。

    IOS软件

    正软商城iOS软件专区,精选适用于iPhone和iPad的办公、学习、影音、设计、效率及AI应用,提供功能介绍、适用设备、系统要求和正版获取方式等信息。

    AI

    正软商城AI软件专区,汇集AI写作、AI绘画、AI视频、AI办公、AI编程、AI翻译、智能客服和数据分析等人工智能工具,提供功能介绍、适用平台、收费方式及正版购买信息。

    Mac软件 更多
    Aperty macOS版
    Aperty macOS版

    Aperty 是 Skylum 推出的 AI 人像修图软件,支持自然肤质修饰、瑕疵处理、面部与身体调整、预设及批量同步。

    火山引擎 网页版
    火山引擎 网页版

    火山引擎是字节跳动旗下企业级云与AI服务平台。聚焦大模型核心能力,依托字节自研豆包多模态大模型,凭借火山方舟一站式平台,提供模型精调、推理部署、智能应用搭建等全链路服务,结合高性能AI算力,助力各行业快速落地大模型数字化与智能化应用。

    立刻MV 网页版
    立刻MV 网页版

    立刻MV 面向音乐人、内容创作者和品牌团队,帮助用户低成本完成歌曲 MV、歌词视频、AI 分镜、图生视频与最终合成。

    蛙蛙写作 网页版
    蛙蛙写作 网页版

    蛙蛙写作 AI 创作工具,覆盖小说、剧本、文案,一键生成文稿,打通文字转视频全流程,高效解决创作难题。

    讯飞智作 网页版
    讯飞智作 网页版

    讯飞智作是一款基于语音合成技术、虚拟人驱动技术与数字人形象声音构建能力的 AI 数字人音视频创作平台。

    超级简历WonderCV 网页版
    超级简历WonderCV 网页版

    超级简历WonderCV是面向应届生和AI小白的智能求职平台,覆盖简历、面试与职业规划。

    音述AI 网页版
    音述AI 网页版

    音述AI,是一个以“用声音述说故事”为核心的 AI 音乐创作与声音分享社区。

    AionClaw macOS版
    AionClaw macOS版

    AionClaw 是可在桌面端运行的任务型 AI 助手,通过数字专家与技能市场组合办公、创作、数据和开发能力。

    Loomy macOS版
    Loomy macOS版

    Loomy 是科大讯飞推出的桌面 AI 助手,可通过对话、任务与工作目录协助处理办公、内容创作和资料整理。

    AirBuddy 3 macOS版
    AirBuddy 3 macOS版

    AirBuddy 3 是面向 macOS 的蓝牙外设增强工具,可集中查看 AirPods、Beats 与苹果设备电量,提供快速连接、播放控制、电量提醒、桌面小组件和多台 Mac 外设接力等功能。

    AirServer macOS版
    AirServer macOS版

    AirServer macOS版可把 Mac 转换为无线投屏接收端,通过 AirPlay 或 Google Cast 接收手机、平板和电脑画面,并支持多设备同时连接、高清镜像及会话录制,适合家庭娱乐、课堂教学、会议演示和应用展示。

    AnyDesk macOS版
    AnyDesk macOS版

    AnyDesk macOS版是一款适用于远程办公、设备维护和客户支持的远程桌面工具,可连接并操作异地计算机,支持文件传输、无人值守访问、会话权限控制及跨平台协作。

    WINDOWS 更多
    Maya(Autodesk Maya) Windows版
    Maya(Autodesk Maya) Windows版

    Autodesk Maya 是面向影视、电视、动画和游戏行业的专业三维制作软件,集多边形与 NURBS 建模、角色绑定、关键帧和动作捕捉动画、Bifrost 特效模拟、材质开发及 Arnold 渲染于一体,

    Aperty Windows版
    Aperty Windows版

    Aperty 是 Skylum 推出的 AI 人像修图软件,支持自然肤质修饰、瑕疵处理、面部与身体调整、预设及批量同步。

    火山引擎 网页版
    火山引擎 网页版

    火山引擎是字节跳动旗下企业级云与AI服务平台。聚焦大模型核心能力,依托字节自研豆包多模态大模型,凭借火山方舟一站式平台,提供模型精调、推理部署、智能应用搭建等全链路服务,结合高性能AI算力,助力各行业快速落地大模型数字化与智能化应用。

    立刻MV 网页版
    立刻MV 网页版

    立刻MV 面向音乐人、内容创作者和品牌团队,帮助用户低成本完成歌曲 MV、歌词视频、AI 分镜、图生视频与最终合成。

    蛙蛙写作 网页版
    蛙蛙写作 网页版

    蛙蛙写作 AI 创作工具,覆盖小说、剧本、文案,一键生成文稿,打通文字转视频全流程,高效解决创作难题。

    讯飞智作 网页版
    讯飞智作 网页版

    讯飞智作是一款基于语音合成技术、虚拟人驱动技术与数字人形象声音构建能力的 AI 数字人音视频创作平台。

    超级简历WonderCV 网页版
    超级简历WonderCV 网页版

    超级简历WonderCV是面向应届生和AI小白的智能求职平台,覆盖简历、面试与职业规划。

    音述AI 网页版
    音述AI 网页版

    音述AI,是一个以“用声音述说故事”为核心的 AI 音乐创作与声音分享社区。

    AionClaw Windows版
    AionClaw Windows版

    AionClaw 是可在桌面端运行的任务型 AI 助手,通过数字专家与技能市场组合办公、创作、数据和开发能力。

    Loomy Windows版
    Loomy Windows版

    Loomy 是科大讯飞推出的桌面 AI 助手,可通过对话、任务与工作目录协助处理办公、内容创作和资料整理。

    讯飞绘文 网页版
    讯飞绘文 网页版

    讯飞绘文网页版是科大讯飞推出的AI图文创作与内容运营工具,覆盖热点选题、文章生成、稿件校对、智能配图、排版发布和数据复盘等环节,适合自媒体创作者及内容团队在线使用。

    AirServer Windows版
    AirServer Windows版

    AirServer Windows版可把电脑变成AirPlay、Google Cast和Miracast无线投屏接收端,适合会议演示、课堂教学及家庭大屏分享。发送设备通常无需另装客户端,并可同时接收和智能排列多个镜像会话。