导入镜像

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

按需镜像拉取

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

预导入镜像

版本门控

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

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

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

  • 在线镜像导入

  • 离线镜像导入

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

例如:

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

example.txt 包含:

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

几秒钟后,`redis`和`mysql`的镜像将在节点的containerd镜像存储中可用。

使用`ctr -a /run/k3s/containerd/containerd.sock -n k8s.io images list`查询containerd镜像存储。

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

例如:

mkdir /var/lib/rancher/rke2/agent/images
curl https://github.com/rancher/rke2/releases/download/v1.33.1%2Brke2r1/rke2-images.linux-amd64.tar.zst -O /var/lib/rancher/rke2/agent/images/rke2-images-amd64.tar.zst

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

使用`ctr -a /run/k3s/containerd/containerd.sock -n k8s.io images list`查询containerd镜像存储。

这是在Airgap中使用的方法。请遵循[Airgap安装文档](install/airgap.md)以获取详细信息。

设置镜像注册表

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

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

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