2

我在 OpenShift 4.2 上创建了一个项目,其 ImageStream 正在从 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”版本?

4

3 回答 3

2

(但没有创建 Build 或 BuildConfig。为什么???)

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

问题是:如何更新我的应用程序(myapp)?换句话说,我怎样才能基于更新的 ImageStream 启动一个新的“myapp”版本?

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

附带说明一下,您还可以定期在 ImageStreams 中自动导入新图像版本(请参阅文档)。

于 2020-09-17T17:34:45.240 回答
0

如果您的图像流有

--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 

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

于 2020-09-21T10:37:52.620 回答
0

将此添加到您的部署配置

triggers:
- type: ConfigChange
- imageChangeParams:
    automatic: true
    containerNames:
      - <your-container-name>
    from:
      kind: ImageStreamTag
      name: '<image_name>:latest'
      namespace: <your-namespace>
  type: ImageChange
于 2020-09-25T09:16:48.630 回答