从Google容器注册表中删除图像并上传另一个具有相同标签的图像后,仍然会拉取已删除的图像



我不知道这是GCR中的预期行为还是错误。 基本上我尝试这样做:

  1. 在Windows上使用Docker从本地文件创建映像(基于Linux的映像(。
  2. 在创建映像之前,我删除了所有具有相同名称/标签的本地映像。
  3. 图像被标记为 repostiory/project/name:v1
  4. 在本地测试映像时,具有正确版本的可执行文件(docker run imageID(。
  5. 在将图像推送到 GCR 之前,我会从 GCR 中删除具有相同标签/名称的所有图像。
  6. 当尝试从 GCR 拉取新映像到示例 kubernetes 时,它会提取在特定标签下上传的第一个(曾经(图像。

我想重复使用相同的标签,以免每次测试都更改配置文件,并且我真的不需要存储以前版本的图像。

听起来你遇到了 kubernetes/kubernetes#42171 中描述的问题。

tl;DR,Kubernetes 的默认拉取策略在设计上被破坏,因此您无法重复使用标签(latest除外(。我相信 k8s 社区的指导是使用"不可变标签",这有点矛盾。

您有以下几种选择:

  1. 切换到使用latest标签,因为 kubernetes 已在其默认拉取策略逻辑中对此进行了硬编码(我相信试图缓解您遇到的问题(。
  2. 切勿重复使用标记。
  3. 切换到显式使用PullAlwaysImagePullPolicy。如果这样做,将产生少量开销,因为您的节点必须与注册表核对标记是否未更改。
  4. 切换到使用PullIfNotPresentImagePullPolicy 按映像摘要进行部署。更详细的解释在我链接的 PR 中,但这可以让您两全其美。

最新更新