我发现Openshift ImageStream
概念很难理解。 Openshift引入了另一个抽象层(与Kubernetes相比),以确保:
但是,如果Deployment或Build使用的图像流标签是 没有更新,那么即使Docker注册表中的Docker映像是 更新后,构建或部署将继续使用之前的版本 (大概是好的)图像。
我不太了解如何实现此目标?我通读了ImageStream
,ImageStreamTag
和ImageStreamImage
,它们只是一个指向外部图像的指针(或元数据)。它不包含实际图像。
我可以确认,在创建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
的工作原理?
参考:
答案 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中)发生了更改,它也将始终在缓存中使用已知良好的版本。