Module 04 · The Kubernetes Ecosystem: OpenShift, Istio, etc.
BuildsOpenShift 构建(Builds)
构建的定义与配置
什么是构建(Build)?
构建是用于将输入转换为结果对象的过程,例如将源代码转换为容器镜像。
- 核心要求:构建需要一个构建配置文件(Build Configuration File,简称 BuildConfig)。
- BuildConfig 定义了构建策略(Build Strategy)和输入源(Input Sources)。
常见构建策略
常用的构建策略有三种:
- Source-to-Image (S2I)
- Docker
- Custom
构建输入源(Build Input Sources)
构建输入源为构建提供了内容。您可以组合使用多个输入源,它们的优先级顺序如下:
- 内联 Dockerfile 定义(Inline Dockerfile definitions):优先级最高,会覆盖任何外部 Dockerfile。
- 从现有镜像中提取的内容。
- Git 仓库(Git repositories)。
- 二进制或本地输入(Binary or local inputs)。
- 输入 Secret(Input secrets)。
- 外部工件(External artifacts)。
镜像流(Image Streams)
镜像流是 OpenShift 中用于引用容器镜像的一种抽象概念。
核心特性
- 持续更新:镜像流持续创建和更新容器镜像,但它不包含实际的镜像数据。
- 引用机制:它指向存储在内部或外部注册表中的镜像,或指向其他镜像流。
- 标签管理:单个镜像流可以包含多个不同的标签(例如:
latest、dev、test),每个标签指向注册表中的特定镜像。 - 部署引用:部署应用程序时,您应该引用镜像流标签,而不是硬编码注册表 URL 和标签。
- 集中更新:如果源镜像位置发生变化,您只需更新镜像流定义,而不必单独更新所有 Deployment。
- 触发器能力:镜像流提供触发器功能,当新版本的镜像可用时,它会自动调用构建和部署。
构建自动化与触发器
为了实现自动化,而不是手动运行构建,您可以使用构建触发器(Build Triggers):
| 触发器类型 | 描述 | 应用场景 |
|---|---|---|
| Webhook 触发器 | 向 API 端点发送请求。 | 支持通用 Webhook 和更常用的 GitHub Webhook,当有新提交(commit)、拉取请求(pull request)或特定事件发生时发送触发请求。 |
| 镜像变更触发器 | 当新版本的镜像可用时触发构建。 | 例如,当应用程序使用的 Node.js 基础镜像发布安全补丁或其他更新时,触发应用程序的重新构建。 |
| 配置变更触发器 | 当您创建新的 BuildConfig 资源时,触发新的构建运行。 | 新配置生效时。 |
BuildConfig 配置过程
BuildConfig 文件定义了构建过程的各项细节 .
示例配置字段
spec:创建新的 BuildConfig(例如:名为Ruby-Sample-build)。runPolicy:控制由该构建配置创建的构建应如何运行。- 可选值包括:
Serial(默认,顺序)、Simultaneously(并行)。
- 可选值包括:
triggers:指定创建新构建的触发器列表。source:定义构建的源。source type决定了主要的输入,如 Git 仓库、内联 Dockerfile 或二进制 Payload。
strategy:显示用于执行构建的策略(例如:source、docker,或custom)。- 示例中使用了
ruby-20-centos7容器镜像和 S2I 策略。
- 示例中使用了
output:定义容器镜像构建完成后推送到的存储库。postCommit:定义可选的构建钩子(build hook)。

构建策略详解
1. Source-to-Image (S2I) 策略
S2I 工具用于构建可重现的容器镜像。
- 工作原理:将应用源代码注入到构建器镜像(builder image)中,从而生成一个可立即运行的镜像。
- 优势:通过整合构建器镜像 + 源代码来构建新镜像,避免使用 Dockerfile,从而在单一步骤内实现从源代码到镜像的转换。
- OpenShift 提供了各种可用构建器镜像,节省开发时间和精力。

2. Docker 策略
使用 Docker 构建策略需要一个包含 Dockerfile 和所需工件的仓库。
- 工作原理:
- OpenShift 获取输入。
- 调用
Docker build命令并创建镜像。 - 新镜像随后被推送到内部 OpenShift 注册表。
- 实现方式 (4 种):
- 从镜像中替换 Dockerfile。
- 使用 Dockerfile 路径。
- 使用 Docker 环境变量。
- 添加 Docker 构建参数(build arguments)。

3. Custom (自定义) 策略
在自定义构建策略中,您必须定义并创建自己的构建器镜像。
- 构建器镜像:是包含将输入转换为预期输出逻辑的常规 Docker 镜像。
- 构建结果:
- Docker 和 S2I 策略的结果是可运行的镜像。
- 自定义构建策略可以创建额外对象(如 JAR 文件)或执行 CI/CD 部署(例如执行单元测试或集成测试)。
- 权限限制:自定义构建由于运行权限较高,仅对集群管理员可用。
持续集成/持续交付 (CI/CD)
- 目的:云原生开发需要在整个容器生命周期中实现更大的自动化。
- CI/CD:通过持续集成和持续交付管道实现自动化。
- OpenShift CI/CD 流程:例如,OpenShift 的 CI/CD 流程可以自动合并新的代码请求到仓库,然后进行构建、测试、批准,并将新版本部署到不同的环境中。
总结要点
- 构建是将输入转换为对象的流程,需要 BuildConfig 文件来定义策略和输入源。
- 构建输入优先级:内联 Dockerfile > 现有镜像内容 > Git 仓库 > 二进制/本地输入 > 输入 Secret > 外部工件。
- 镜像流是 OpenShift 中用于引用容器镜像的抽象层。
- 构建自动化可通过 Webhook、镜像变更或配置变更触发器实现。
- 常见构建策略:S2I、Docker 和 Custom。