【问题标题】:OpenShift: How to update app based on ImageStreamOpenShift:如何基于 ImageStream 更新应用程序
【发布时间】:2020-09-17 09:38:20
【问题描述】:

我在 OpenShift 4.2 上创建了一个带有从 Quay.io 提取图像的 ImageStream 的项目:

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”的新版本?

【问题讨论】:

    标签: openshift quay.io openshift-4


    【解决方案1】:

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

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

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

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

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

    【讨论】:

    • 非常感谢,西蒙。我理解触发器是“自动化”部署的东西。如果我现在想部署和更新镜像怎么办? “oc推出”?
    • @Guildenstern70 是的,您可以使用oc rollout 重新运行部署。请注意,这将简单地推出Deployment 的当前定义,这意味着如果您指定了“旧”图像标签,它仍将推出旧图像标签。因此,您可能需要更新 Deployment 使用的标签,然后使用 oc rollout。当然,如果您使用latest 或类似标签作为标签,这将按预期工作。
    【解决方案2】:

    如果您的图像流有,则构建会自动开始

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

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

    【讨论】:

      【解决方案3】:

      将此添加到您的部署配置中

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

      【讨论】:

      • 谢谢。据我了解,通过这种配置,我可以在图像更改时自动部署。但我想决定何时部署。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-06-17
      • 1970-01-01
      相关资源
      最近更新 更多