2.3.2. 应用程序组件
2.3.2.1. API 对象
对于 OpenShift Container Platform 和 Kubernetes 资源定义(新向应用程序清单引入的项目),这些 API 对象有几个关键设计点,在考虑应用程序提升主题时,需要重新查看这些 API 对象。
首先,作为在 OpenShift Container Platform 文档中突出显示的,每个 API 对象可以通过 JSON 或 YAML 来表达,从而可以通过传统的源控制和脚本管理这些资源定义。
另外,API 对象也被设计为设计为存在部分对象,用于指定系统所需状态,其他部分则反映了系统的状态或当前状态。这可以被认为为输入和输出。以 JSON 或 YAML 格式表示的输入部分,特别是作为源控制管理(SCM)工件自然而符合的项目。
注意
请记住,API 对象的输入或规格部分可以全面静态或动态,该变量在实例化时 可以通过模板处理替换。
与 API 对象相关的结果是,其表达式用作 JSON 或 YAML 文件,您可以将应用程序的配置视为代码。
可以说,几乎所有 API 对象都可能会被视为您的机构的应用程序工件。下面是与部署和管理应用程序最常见相关的对象:
- BuildConfig
-
在应用程序提升的情况下是一个特殊情况资源。虽然
BuildConfig
是应用程序的一部分,特别是开发人员透视图中,但通常BuildConfig
不会通过管道来提升。它会生成通过管道提升(以及其他项目)的镜像
。 - 模板
-
在应用程序提升方面,
模板
可以充当在给定暂存环境中设置资源的起点,特别是参数化功能。当应用程序通过提升管道进行移动时,额外的后后修改会非常有效。有关此方面的更多信息,请参阅场景和示例。 - Routes
-
这些是应用程序提升管道中阶段阶段的最典型资源,作为通过其
Route
对应用程序的不同阶段进行测试。另外,请记住,您拥有与手动规格或自动生成主机名相关的选项,以及Route
的 HTTP 级别的安全性。 - 服务
-
对于给定应用程序提升阶段存在避免
Routers
和Routes
的原因(例如在开发的早期阶段为开发人员提供简便),可以通过集群
IP 地址和端口访问应用程序。如果是这种情况,则在不同阶段之间的地址和端口的某些管理可能需要保证。 - Endpoints
-
某些应用程序级别服务(例如,许多企业中的数据库实例)可能无法由 OpenShift Container Platform 管理。如果是这样,则自行创建这些
端点
,以及对相关服务
(忽略Service
上的选择器字段)的修改已启用(基于您的具体环境,在不同阶段之间重复或共享)。 - Secrets
-
当相应实体(由 OpenShift Container Platform 管理的
服务
或 OpenShift Container Platform 之外的外部服务管理的服务)时,由Secret
封装的敏感信息是在暂存环境之间共享的。如果您的应用程序提升管道的不同阶段有不同版本的实体,则可能需要在管道的每个阶段维护不同的Secret
,或者在它遍历管道时对其进行修改。另外,请注意,如果您在 SCM 中将Secret
存储为 JSON 或 YAML,则可能会对一些加密格式进行加密,以保护敏感信息。 - DeploymentConfig
- 此对象是用于定义和缩进给定应用程序提升管道阶段的环境的主要资源;它控制应用程序启动的方式。虽然所有不同阶段都很常见,但为了加快应用程序的提升管道进行,但撤销会对这个对象进行修改,以反映每个阶段的不同环境的不同,或者系统行为的变化,以协助测试应用程序必须支持的不同场景。
- ImageStream、ImageStreamTags 和 ImageStreamImage
- 在 Images 和 Image Streams 部分中详述,这些对象是管理容器镜像的 OpenShift Container Platform 补充。
- ServiceAccounts 和 RoleBindings
-
OpenShift Container Platform 中其他 API 对象的权限管理以及外部服务,用于管理您的应用程序。与
Secrets
类似,ServiceAccounts
和RoleBindings
对象可能会因您需要共享或隔离这些不同环境的需求在应用程序提升管道的不同阶段之间共享的不同而有所不同。 - PersistentVolumeClaims
- 与数据库等有状态服务相关,不同的应用程序提升阶段将共享量与您的组织共享或隔离应用程序数据副本的关联。
- ConfigMaps
-
从
Pod
本身分离Pod
配置的一个实用性(思考环境变量风格配置)可在需要一致的Pod
行为时由各种暂存环境共享。它们也可以在阶段修改,以更改Pod
行为(通常因为应用程序的不同方面被检查到不同的阶段)。