OpenShift:如何更新基于 ImageStream 的应用程序

OpenShift: How to update app based on ImageStream

我使用 ImageStream 在 OpenShift 4.2 上创建了一个项目,该项目从 Quay.io:

中提取图像
oc new-project xxx-imagestream
oc import-image is:1.0 --from quay.io/xxx/myimage:latest --confirm --reference-policy local 

现在我创建一个新项目来托管基于该 ImageStream 的应用程序

oc new-project xxx-app
oc new-app --name myapp -i xxx-imagestream/is:1.0

应用程序已构建,我可以通过公开它来使用它。 (但没有创建 Build 或 BuildConfig。为什么???)

现在我将 Quay.io 上的图像更新为新版本,并将新版本导入到 xxx-imagestream 项目中:

oc import-image is:2.0 --from quay.io/xxx/myimage:latest --confirm --reference-policy local

问题是:如何更新我的应用程序 (myapp)?换句话说,如何基于更新后的 ImageStream 启动新构建的“myapp”?

(But no Build or BuildConfig is created. Why???)

A BuildConfig 仅在您使用“源到映像”(S2I) 功能时创建,并且仅在您要从源创建容器映像时才需要。在您的情况下,图像已经存在,因此无需构建任何东西。 oc new-app 唯一要做的就是部署您现有的映像,无需构建。

The question is: how do I update my app (myapp)? In other words, how can I launch a new build of "myapp" based on the updated ImageStream?

您正在寻找“Deployment triggers”,特别是“ImageChange 部署触发器”。每当 imagestreamtag 的内容发生变化时(推送新版本的图像时),ImageChange 触发器都会产生新的 ReplicationController

在 side-note 上,您还可以定期在 ImageStreams 中自动导入新图像版本(请参阅 documentation)。

如果您的图像流有

,构建会自动开始
--reference-policy source

在那种情况下,使用

更新图像流是正确的
oc -import-image [...]

要更新“本地”ImageStream,而不是

oc import-image is:2.0 --from quay.io/xxx/myimage:latest --confirm --reference-policy local

您应该更新现有的本地 ImageStream 标签

oc tag quay.io/xxx/myimage:latest is:2.0 --reference-policy local 

此命令会自动触发您的应用程序的新部署。

将此添加到您的部署配置

triggers:
- type: ConfigChange
- imageChangeParams:
    automatic: true
    containerNames:
      - <your-container-name>
    from:
      kind: ImageStreamTag
      name: '<image_name>:latest'
      namespace: <your-namespace>
  type: ImageChange