.. _estargz_lazy_pulling:
============================================================
用于延迟拉取(Lazy Pulling)的eStargz(容器镜像层标准兼容扩展)
============================================================
在 Kubernetes 运行中,镜像拉取始终是决定容器启动速度的重要因素。特别是很多应用运维不注重 :ref:`smaller_docker_images` ,会导致容器启动时出现大量并发拉取超大镜像,阻塞网络,触发系统故障。
在 `OCI镜像规范 `_ 和 `Docker镜像规范 `_ 的 ``application/vnd.docker.image.rootfs.diff.tar.gzip`` 提供了容器镜像的 ``gzip`` 层扩展用于延迟拉取( ``lazy pulling`` ),这个扩展被称为 ``eStargz`` 。
eStargz是一个向后兼容的扩展,也就是说镜像可以被发不到无扩展感知的仓库,也可以被运行在无扩展感知能力的runtime上。 ``eStargz`` 扩展给予 ``stargz`` (可检索tar.gz标准, stands for seekable tar.gz),最初由Google CRFS项目提出。 ``eStargz`` 扩展了stargz的检查层验证以及运行时性能优化。
eStargz概述
============
``Lazy pulling`` 是一种更快冷启动的镜像拉取技术。允许一个容器启动时不需要等待整个镜像层内容完全下载到本地。相反,只要数据层的必要文件(或者大型文件的数据块)被按需下载就可以运行容器。
为了实现这一目标,runtime需要在一个无依赖层中拉取和展开美俄文件。然而,没有eStargz扩展的层不能实现这一目标,原因如下:
- 即使只是包含一个文件的层,整个数据层都需要展开
- 摘要信息(digests)不能提供每个文件信息,所以文件不能独立验证
dStargz解决了上述问题,所以能够用于 ``lazy pulling``
此外,eStargz支持文件预取( ``prefetching`` ),有助于缓解由于按需拉取每个文件导致的运行时性能不足。
eStargz扩展可以向后兼容,所以eStargz格式的镜像也能够推送到常规镜像仓库,并且能呕运行在不支持eStargz的运行时上。
eStargz结构
==============
.. figure:: ../../../_static/docker/moby/containerd/estargz-structure.png
:scale: 50
参考
=======
- `eStargz: Standard-Compatible Extension to Container Image Layers for Lazy Pulling `_