【问题标题】:openshift how imagestream track the image changes?openshift imagestream如何跟踪图像的变化?
【发布时间】:2018-09-19 09:48:25
【问题描述】:

我发现 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

【问题讨论】:

    标签: openshift


    【解决方案1】:

    我使用this 访问默认注册表。我扫描图像文件夹,我的图像确实不存在。但随后我通过

    将图像拉到我的主节点中
    docker pull docker-registry.default.svc:5000/NAMESPACE/REPO:TAG
    

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

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-01-28
      • 1970-01-01
      • 2013-06-04
      相关资源
      最近更新 更多