我不知道这是GCR中的预期行为还是错误。 基本上我尝试这样做:
- 在Windows上使用Docker从本地文件创建映像(基于Linux的映像(。
- 在创建映像之前,我删除了所有具有相同名称/标签的本地映像。
- 图像被标记为 repostiory/project/name:v1
- 在本地测试映像时,具有正确版本的可执行文件(docker run imageID(。
- 在将图像推送到 GCR 之前,我会从 GCR 中删除具有相同标签/名称的所有图像。
- 当尝试从 GCR 拉取新映像到示例 kubernetes 时,它会提取在特定标签下上传的第一个(曾经(图像。
我想重复使用相同的标签,以免每次测试都更改配置文件,并且我真的不需要存储以前版本的图像。
听起来你遇到了 kubernetes/kubernetes#42171 中描述的问题。
tl;DR,Kubernetes 的默认拉取策略在设计上被破坏,因此您无法重复使用标签(latest
除外(。我相信 k8s 社区的指导是使用"不可变标签",这有点矛盾。
您有以下几种选择:
- 切换到使用
latest
标签,因为 kubernetes 已在其默认拉取策略逻辑中对此进行了硬编码(我相信试图缓解您遇到的问题(。 - 切勿重复使用标记。
- 切换到显式使用
PullAlways
ImagePullPolicy。如果这样做,将产生少量开销,因为您的节点必须与注册表核对标记是否未更改。 - 切换到使用
PullIfNotPresent
ImagePullPolicy 按映像摘要进行部署。更详细的解释在我链接的 PR 中,但这可以让您两全其美。