diff --git a/content/k3s/latest/en/advanced/_index.md b/content/k3s/latest/en/advanced/_index.md index 6a8325cb456..42bab14103c 100644 --- a/content/k3s/latest/en/advanced/_index.md +++ b/content/k3s/latest/en/advanced/_index.md @@ -22,6 +22,7 @@ This section contains advanced information describing the different ways you can - [Enabling cgroups for Raspbian Buster](#enabling-cgroups-for-raspbian-buster) - [SELinux Support](#selinux-support) - [Additional preparation for (Red Hat/CentOS) Enterprise Linux](#additional-preparation-for-red-hat-centos-enterprise-linux) +- [Enabling Lazy Pulling of eStargz (Experimental)](#enabling-lazy-pulling-of-estargz-experimental) # Certificate Rotation @@ -394,3 +395,57 @@ If enabled, it is required to disable nm-cloud-setup and reboot the node: systemctl disable nm-cloud-setup.service nm-cloud-setup.timer reboot ``` + +# Enabling Lazy Pulling of eStargz (Experimental) + +## What's lazy pulling and eStargz? + +Pulling images is known as one of the time-consuming steps in the container lifecycle. +According to [Harter, et al.](https://www.usenix.org/conference/fast16/technical-sessions/presentation/harter), + +> pulling packages accounts for 76% of container start time, but only 6.4% of that data is read + +To address this issue, k3s experimentally supports *lazy pulling* of image contents. +This allows k3s to start a container before the entire image has been pulled. +Instead, the necessary chunks of contents (e.g. individual files) are fetched on-demand. +Especially for large images, this technique can shorten the container startup latency. + +To enable lazy pulling, the target image needs to be formatted as [*eStargz*](https://github.com/containerd/stargz-snapshotter/blob/main/docs/stargz-estargz.md). +This is an OCI-alternative but 100% OCI-compatible image format for lazy pulling. +Because of the compatibility, eStargz can be pushed to standard container registries (e.g. ghcr.io) as well as this is *still runnable* even on eStargz-agnostic runtimes. + +eStargz is developed based on the [stargz format proposed by Google CRFS project](https://github.com/google/crfs) but comes with practical features including content verification and performance optimization. +For more details about lazy pulling and eStargz, please refer to [Stargz Snapshotter project repository](https://github.com/containerd/stargz-snapshotter). + +## Configure k3s for lazy pulling of eStargz + +As shown in the following, `--snapshotter=stargz` option is needed for k3s server and agent. + +``` +k3s server --snapshotter=stargz +``` + +With this configuration, you can perform lazy pulling for eStargz-formatted images. +The following Pod manifest uses eStargz-formatted `node:13.13.0` image (`ghcr.io/stargz-containers/node:13.13.0-esgz`). +k3s performs lazy pulling for this image. + +``` +apiVersion: v1 +kind: Pod +metadata: + name: nodejs +spec: + containers: + - name: nodejs-estargz + image: ghcr.io/stargz-containers/node:13.13.0-esgz + command: ["node"] + args: + - -e + - var http = require('http'); + http.createServer(function(req, res) { + res.writeHead(200); + res.end('Hello World!\n'); + }).listen(80); + ports: + - containerPort: 80 +```