【发布时间】:2018-09-19 09:48:25
【问题描述】:
我发现 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 的工作原理?
参考:
【问题讨论】:
标签: openshift