OpenShift ImageStream 如何跟踪图像更改?



我发现OpenshiftImageStream概念非常难以理解。Openshift 引入了一个抽象层(与 Kubernetes 相比(来确保:

但是,如果部署或生成使用的映像流标记是 没有更新,那么即使 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。

这违反了所谓的"已知良好的映像",甚至最糟糕的是,因为正在运行两个不同版本的映像。我对此完全感到困惑,任何人都可以进一步解释 OpenshiftImageStream的工作原理吗?

参考:

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

我使用它访问默认注册表。我扫描了图像文件夹,我的图像确实不存在。但是后来我通过以下方式在我的主节点中提取图像

docker pull docker-registry.default.svc:5000/NAMESPACE/REPO:TAG

我可以成功拉取图像。之后,我再次将相同的映像推送到同一注册表docker-registry.default.svc:5000。然后在注册表路径/registry/docker/registry/v2中,我的图像显示在那里。

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

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

最新更新