openshift - 如何回滚以使用较旧的镜像而不是保留最新的(外部构建的)?

标签 openshift rollback openshift-client-tools

我们正在将构建过程移至 OpenShift 3.11 集群之外,并注意到,当想要回滚到较旧的部署时,使用的 docker 镜像不是旧的,而是 OpenShift 已知的最新版本。

我看到 OpenShift 源代码构建构建的图像是有效的,但对于我们外部构建的图像,这些图像被推送到 openshift 外部 docker 注册表,然后 oc new-appregistry/foo/bar:master (为此创建图像流)这不起作用。

这能实现吗?

我的 Docker 镜像需要额外的元数据吗?

我需要告诉 OpenShift 有关我的镜像的更多信息吗?

<小时/>

注意:已打开 https://github.com/openshift/origin/issues/23754在 Origin - Redhat 下的开源项目 - 关于这个

最佳答案

使用immutable tags .

当您使用名为 master 的标签来处理图像时,我假设您当前正在使用可变标签,这些标签会随着每个图像构建而更新。这样,您可以通过恢复提交并重新构建旧镜像来“回滚”,但您仍然可以获得更新的基础镜像和不同的元数据。

如果您围绕不可变标签设计整个发布流程,您就可以完全按照您的意愿行事。为此,请使用以下方法之一:

(1) 通过 image digest 处理您的图像。在这种情况下,您需要一个注册表来保存您的图像,即使它们没有标记。例如,Quay.io 不会保留未标记的镜像,您只能拉取最新版本。为了避免这种情况,只需添加一个虚拟标签,例如图像摘要。

(2) 通过语义版本控制发布您的图像,例如通过使用 Angular commit messages并添加 semantic-release到您的构建管道。确保您使用的基础镜像也是不可变的。要将镜像部署到我们的集群,请使用 GitOps使用 Flux CD 等工具的工作流程。现在,您可以通过恢复 GitOps 存储库中的提交来轻松回滚。

(3) 重新考虑是否需要回滚。或者,您可以使用 OpenShift 4 附带的 Istio 进行金丝雀部署。您只需同时部署应用程序的两个版本,而不是回滚,然后使用 Istio 将流量路由到其中一个版本,直到您成功为止。快乐。

关于openshift - 如何回滚以使用较旧的镜像而不是保留最新的(外部构建的)?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57819979/

相关文章:

mysql - 在 Openshift 上使用 Sequel 连接到 mysql

mercurial - 如何在 Mercurial 上进行 "rollback"上次提交?

java - 交易回滚和网络服务

maven - 如何在 OpenShift3 中通知 S2I 构建的 Maven/JVM 选项

在 openshift 中运行时 python websocket 失败

php - 如何更改我的 openshift 应用程序中的现有环境变量?

hibernate - Spring集成测试不回滚

openshift - 无法登录到 Openshift

docker - 将 docker 容器添加到正在运行的 OpenShift pod

logging - 在 OpenShift 上安装 ELK 堆栈