2.3.4. 方法和工具
从根本上而言,应用程序提升是一种将上述应用程序组件从一个环境移至另一个环境的过程。以下小节概述了可用于手动移动各种组件的工具,然后再讨论用于自动化应用程序提升的完整解决方案。
构建和部署过程中都提供了很多插入点。它们在 BuildConfig
和 DeploymentConfig
API 对象中定义。这些 hook 允许调用与部署的组件(如数据库和 OpenShift Container Platform 集群本身)交互的自定义脚本。
因此,可以使用这些 hook 来执行组件管理操作,在环境间有效移动应用程序,例如,从 hook 中执行镜像标签操作。但是,各种 hook 得分最适合在给定环境中管理应用程序的生命周期(例如,在部署新版本的应用程序时执行数据库架构迁移),而不是在环境之间移动应用程序组件。
2.3.4.1. 管理 API 对象
在单一环境中定义的资源将导出为 JSON 或 YAML 文件内容,以准备将其导入到新环境中。因此,当您通过应用程序管道提升 API 对象时,作为 JSON 或 YAML 的表达式作为工作单元。oc
CLI 用于导出和导入此内容。
虽然在 OpenShift Container Platform 中不需要提升流,但 JSON 或 YAML 存储在文件中,但您可以考虑从 SCM 系统中存储和检索内容。这可让您利用 SCM 的与版本相关的功能,包括创建分支,以及针对与版本关联的不同标签或标签分配和查询。
2.3.4.1.1. 导出 API 对象状态
API 对象规格应该被 oc get --export
捕获。此操作会从对象定义(如当前命名空间或分配的 IP 地址)中移除环境特定数据,允许在不同环境中重新创建它们(与 oc get
操作不同,它输出对象的不过滤状态)。
使用 oc label
,它允许在 API 对象上添加、修改或删除标签,这在组织为提升流程而收集的一组对象时很有用,因为标签允许在单一操作中选择和管理 pod 组。这样可以更轻松地导出正确组的对象,因为标签将在新环境中创建对象时向前工作,所以它们还可以更轻松地管理每个环境中的应用程序组件。
API 对象通常包含引用 Secret
的 DeploymentConfig
等。当将 API 对象从一个环境迁移到另一个环境时,您必须确保这样的引用也会移到新环境中。
同样,DeploymentConfig
等 API 对象通常包含引用外部 registry 的 ImageStream
的引用。当将 API 对象从一个环境移到另一个环境时,您必须确保在新环境中可以解析此类引用,这意味着引用必须可以被解析,并且 ImageStream
必须引用新环境中可访问的 registry。如需了解更多详细信息,请参阅 Moving Images 和 Promotion Caveats。
2.3.4.1.2. 导入 API 对象状态
2.3.4.1.2.1. 初始创建
当应用程序第一次出现在新环境中时,使用 JSON 或 YAML 来表达 API 对象规格,并运行 oc create
在适当的环境中创建它们。使用 oc create
时,请记住 --save-config
选项。在其注解列表中保存对象的配置元素有助于稍后使用 oc apply
修改对象。
2.3.4.1.2.2. 迭代修改
最初建立各种暂存环境后,在提升周期开始并且应用程序从阶段移到 stage 后,对应用程序的更新会包括修改作为应用程序一部分的 API 对象。这些 API 对象中的更改是可激活的,因为它们代表 OpenShift Container Platform 系统的配置。这种变化的动机包括:
- 衡量暂存环境之间的环境差异。
- 验证应用支持的各种场景。
API 对象传输到下一阶段的环境可以通过 oc
CLI 来完成。虽然存在修改 API 对象的多组 oc
命令,但此主题侧重于 oc apply
,其计算并应用对象之间的差别。
特别是,您可以把 oc apply
作为三向合并,在文件或 stdin 中取为输入以及现有的对象定义。它执行三向合并:
- 命令的输入,
- 对象的当前版本,以及
- 最近的用户指定的对象定义存储为当前对象中的注解。
然后,使用结果更新现有对象。
如果需要进一步自定义 API 对象,如在源和目标环境之间对象不能相同时,可以使用 oc set
等 oc
命令在应用来自上游环境的最新对象定义后修改对象。
某些特定的用途在 Scenarios 和示例中加以控制。