openshift imagestream如何跟踪图像变化?

时间:2018-09-19 09:48:25

标签: openshift

我发现Openshift ImageStream概念很难理解。 Openshift引入了另一个抽象层(与Kubernetes相比),以确保:

  

但是,如果Deployment或Build使用的图像流标签是   没有更新,那么即使Docker注册表中的Docker映像是   更新后,构建或部署将继续使用之前的版本   (大概是好的)图像。

我不太了解如何实现此目标?我通读了ImageStreamImageStreamTagImageStreamImage,它们只是一个指向外部图像的指针(或元数据)。它不包含实际图像。

我可以确认,在创建ImageStream(从docker hub获取映像)之后,映像没有推送到Openshift默认注册表docker-registry.default.svc:5000,我检查了内部但找不到它。反之亦然,这意味着如果我将映像推送到默认注册表,ImageStream将自动创建。

让我们看下面的示例:

myImageStream:latest-> docker.hub / myNameSpace / myimage:latest(SHA-1234)

如果我使用SHA-5678将新图像推送到docker.hub最新标签,并且未将ImageStream设置为--scheduled,则意味着我的pod将始终使用图像SHA-1234。

假设在另一个工作节点上旋转了一个新的pod,因为该工作节点没有镜像SHA-1234,它将从docker.hub开始重新拉取,并将获得SHA- 5678。

这违反了所谓的“已知的良好映像”,甚至更糟,因为正在运行两个不同版本的映像。我对此完全感到困惑,是否有人可以进一步解释Openshift ImageStream的工作原理?

参考:

https://blog.openshift.com/image-streams-faq/

https://docs.openshift.com/container-platform/3.9/architecture/core_concepts/builds_and_image_streams.html#image-streams

1 个答案:

答案 0 :(得分:0)

我使用this访问默认注册表。我浏览图像文件夹,但图像确实不在那里。但是然后我通过

将图像拉到主节点中
Update-Database

我可以成功提取图像。之后,我再次将相同的映像推送到相同的注册表http://www.entityframeworktutorial.net/code-first/code-based-migration-in-code-first.aspx。然后在注册表路径docker pull docker-registry.default.svc:5000/NAMESPACE/REPO:TAG 中,我的图像在那里显示。

这是一个非常奇怪的现象,我只运行了一个注册表,但是看起来它以不同的方式处理图像位置。

最后,顺便说一句,Openshift确实确实将特定的映像缓存在某个地方,因此即使实际的远程docker映像(在docker hub中)发生了更改,它也将始终在缓存中使用已知良好的版本。