本文档采用自动化机器翻译技术翻译。 尽管我们力求提供准确的译文,但不对翻译内容的完整性、准确性或可靠性作出任何保证。 若出现任何内容不一致情况,请以原始 英文 版本为准,且原始英文版本为权威文本。

导入镜像

容器镜像在每个节点上由 containerd 镜像存储本地缓存。镜像可以根据需要从注册表中拉取、通过镜像拉取进行预加载,或从镜像归档文件中导入。

按需镜像拉取

Kubernetes默认情况下,当Pod需要镜像而节点上尚不存在该镜像时,会自动拉取镜像。可以通过使用Pod的https://kubernetes.io/docs/concepts/containers/images/#image-pull-policy[镜像拉取策略]字段来更改此行为。使用默认的`IfNotPresent`策略时,containerd将从上游(默认)或您的私有注册表拉取镜像,并将其存储在其镜像存储中。用户无需为按需镜像拉取工作应用任何额外配置。

预导入镜像

版本门控

在K3s运行时预导入镜像的功能自2025年1月的版本开始可用:v1.32.0+k3s1,v1.31.5+k3s1,v1.30.9+k3s1,v1.29.13+k3s1。在此之前,K3s仅在启动时预导入镜像。

如果将 Kubernetes 的 imagePullPolicy 配置为 Never,则在节点上预导入镜像是必不可少的。您可能出于安全原因或为了减少K3s节点启动所需的时间而这样做。

K3s包含两种机制将镜像预导入到containerd镜像存储中:

  • 在线镜像导入

  • 离线镜像导入

用户可以通过在 /var/lib/rancher/k3s/agent/images 目录中放置一个包含镜像名称(每行一个)的文本文件,来触发将镜像拉取至 containerd 镜像存储中。文本文件可以在K3s启动之前放置,也可以在K3s运行时创建或修改。K3s通过CRI API顺序拉取镜像,选择性地使用registries.yaml配置。

例如:

mkdir /var/lib/rancher/k3s/agent/images
cp example.txt /var/lib/rancher/k3s/agent/images

example.txt 包含:

docker.io/library/redis:latest
docker.io/library/mysql:latest

几秒钟后,redismysql 的镜像在节点的 containerd 镜像存储中可用。

使用 sudo k3s ctr images list 查询 containerd 镜像存储。

用户可以通过将镜像归档文件放置在 /var/lib/rancher/k3s/agent/images 目录中,直接将镜像导入到 containerd 镜像存储中。镜像归档文件可以在 K3s 启动之前放置,也可以在 K3s 运行时创建或修改。K3s 会在必要时解压镜像归档文件,提取镜像,并将其加载到 containerd 镜像存储中。

例如:

mkdir /var/lib/rancher/k3s/agent/images
curl  https://github.com/k3s-io/k3s/releases/download/v1.33.1%2Bk3s1/k3s-airgap-images-amd64.tar.zst -O  /var/lib/rancher/k3s/agent/images/k3s-airgap-images-amd64.tar.zst

几秒钟后,镜像归档文件中包含的镜像在节点的 containerd 镜像存储中可用。

使用 sudo k3s ctr images list 查询 containerd 镜像存储。

这是在隔离的环境中使用的方法。请遵循 隔离安装文档 获取详细信息。

设置镜像注册表

K3s 支持两种镜像注册表的替代方案:

  • 私有注册表配置 涉及使用 registries.yaml 配置容器镜像注册表的身份验证和镜像同步。

  • 嵌入式注册表镜像 显示如何启用嵌入式分布式镜像注册表,以便实现节点之间镜像的点对点共享。