Nydus 在约苗平台的容器镜像加速实践

本文介绍了Nydus,一个由蚂蚁集团、阿里云和字节等共建的开源项目,用于加速容器启动速度。Nydus通过新的镜像格式,实现按需下载和块级别数据去重,解决了OCI镜像的启动慢和存储成本高的问题。在约苗平台的Kubernetes生产环境中,Nydus显著减少了镜像拉取时间和容器启动时间,提升了运维效率。

在这里插入图片描述

文 | 向申
约苗平台运维工程师 关注云原生领域

本文字数 9574阅读时间24分钟

本文是来自向申同学的分享,介绍了其在 K8s 生产环境集群部署 Nydus 的相关实践。

Nydus 是蚂蚁集团,阿里云和字节等共建的开源容器镜像加速项目,是 CNCF Dragonfly 的子项目,Nydus 在 OCI Image Spec 基础上重新设计了镜像格式和底层文件系统,从而加速容器启动速度,提高大规模集群中的容器启动成功率。详情文档请参考如下地址:

Nydus 官方网站:https://nydus.dev/
Nydus Github:https://github.com/dragonflyoss/image-service

PART.1
容器镜像的概念

  1. 容器镜像

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

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

  1. 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.

  1. 容器的工作流程

在这里插入图片描述

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

PART.2
OCI 镜像格式

通常所说的镜像文件其实指的是一个包含了多个文件的“包”,“包”中的这些文件提供了启动一个容器所需要的所有需要信息,其中包括但不限于,容器所使用的文件系统等数据文件,镜像所适用的平台、数据完整性校验信息等配置文件。当我们使用 Docker pull 或者 Nerdctl pull 从镜像中心拉取镜像时,其实就是在依次拉取该镜像所包含的这些文件。

Nerdctl 依次拉取了一个 Index 文件、一个 Manifest 文件、一个 Config 文件和若干个 Layer 数据文件。实际上,一个标准的 OCI 镜像通常就是由这几部分构成的。

其中,Layer 文件一般是 tar 包或者压缩后的 tar 包,其包含着镜像具体的数据文件。这些 Layer 文件会共同组成一个完整的文件系统(也就是从该镜像启动容器后,进入容器中看到的文件系统) 。

Config 文件是一个 JSON 文件。其中包含镜像的一些配置信息,比如镜像时间、修改记录、环境变量、镜像的启动命令等等。

Manifest 文件也是一个 JSON 文件。它可以看作是镜像文件的清单,即说明了该镜像包含了哪些 Layer 文件和哪个 Config 文件。

下面是一个 Manifest 文件的典型例子:

"schemaVersion": 2,
  "mediaType": "application/vnd.oci.image.manifest.v1+json",
  "config": {
   "mediaType": "application/vnd.oci.image.config.v1+json",
   "digest": "sha256:0584b370e957bf9d09e10f424859a02ab0fda255103f75b3f8c7d410a4e96ed5",
   "size": 7636
 },
  "layers": [
 {
    "mediaType": "application/vnd.oci.image.layer.v1.tar+gzip",
    "digest": "sha256:214ca5fb90323fe769c63a12af092f2572bf1c6b300263e09883909fc865d260",
    "size": 31379476
 },
 {
    "mediaType": "application/vnd.oci.image.layer.v1.tar+gzip",
    "digest": "sha256:50836501937ff210a4ee8eedcb17b49b3b7627c5b7104397b2a6198c569d9231",
    "size": 25338790
 },
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值