2

有人可以解释什么是 openshift镜像流以及它与常规docker镜像有何不同。

我已经阅读了这个(了解容器、图像和图像流)文档,但它并没有解释太多关于图像流的内容。

我知道 docker 镜像是创建容器的蓝图。只是想知道imagesteam是什么?

4

1 回答 1

4

就像 Kubernetes 中的许多(所有?)种类一样,anImageStream是一种抽象。如果您可以想象一个Pod正在运行的容器概念的抽象,那么您可以想象ImageStream一个镜像注册表(例如 quay.io 或内部容器注册表)中的存储库概念的抽象。 OpenShift 集群)。

以下是镜像注册表中实际存储库的示例,您可以在其中看到它包含与不同版本的镜像相对应的标签列表。 在此处输入图像描述

这是一个 的示例ImageStream,如 OpenShift Web 控制台中所示。您可以看到它包含一个标签列表,就像前面的外部注册表中的存储库示例一样。 在此处输入图像描述

在这里您可以看到ImageStreamTags实际指向不同的存储库,例如注册表中的rhscl/python-27-rhel7、 和。ubi8/python-38甚至还有一个ImageStreamTag指向ImageStreamTag列表底部的另一个示例。因此,它不完全是与图像注册表的 1:1 映射,它是一种更高级别的抽象。

作为您何时可能选择使用一个的示例,假设您想在 OpenShift 集群中运行您的 Python 应用程序。您可以BuildConfig通过从 Git 存储库中获取源代码、构建它并将其分层到 Python 3.8 基础镜像之上来知道如何构建您的镜像。然后在构建时,您希望这个新版本替换集群中正在运行的版本。

您可以从ImageStreams这里受益的几个地方:

  1. 如果您引用的基础 Python 3.8 图像BuildConfig是一个ImageStreamTag(如python:3.8上面的示例图片)而不是直接在注册表中的存储库中的图像标记;那么您可以对ImageStreamTag.

  2. 如果您的构建输出到您ImageStreamTag的 中引用的Deployment,那么您Deployment可以自动(或不)更新以推出您的应用程序的新版本。

  3. 如果您想更改基础 Python 3.8 映像以指向不同的映像(例如来自不同注册表中的不同供应商,或者您自己的自定义映像),那么您只需要更新ImageStreamTag其中ImageStream可能导致重建的您的应用程序映像(以及您为引用 的其他映像而拥有的任何其他构建ImageStreamTag),以及您的应用程序(以及来自其他此类构建的任何其他应用程序)的新推出。

^这只是您如何使用 的一个示例,ImageStream并不意味着详尽无遗。

于 2021-03-13T01:04:26.070 回答