如何回滚以使用较旧的图像而不是使用最新的图像(外部生成的图像)​​?

时间:2019-09-06 10:09:02

标签: openshift rollback openshift-client-tools

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

我看到了由OpenShift源构建生成的图像可以正常工作,但是对于我们外部生成的图像,这些图像被推送到openshift外部docker注册表,然后oc new-app registry/foo/bar:master(为此创建了一个图像流),不起作用。

这完全可以实现吗?

我在Docker映像上是否需要额外的元数据?

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


注意:在Origin上打开https://github.com/openshift/origin/issues/23754-有关Redhat内容的开源项目-

2 个答案:

答案 0 :(得分:2)

使用immutable tags

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

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

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

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

(3)重新考虑是否需要回滚。或者,您可以将Canary部署与OpenShift 4随附的Istio一起使用,而不必回滚,而只是同时部署两个版本的应用程序,然后使用Istio将流量路由到一个或另一个,直到您将快乐。

答案 1 :(得分:0)

要回滚到特定版本,您只需指定版本,如果不指定部署版本,最新版本将自动回滚。

DOCs

  

部署配置上的映像更改触发器被禁用,因为   回滚的一部分,以防止在   回滚完成。要重新启用图像更改触发器,请执行以下操作:

$ oc deploy <deployment_config> --enable-triggers 
  

要回滚到特定版本,请执行以下操作:

$ oc rollback <deployment_config> --to-version=1