Coursera 笔记

Module 04 · The Kubernetes Ecosystem: OpenShift, Istio, etc.

BuildsOpenShift 构建(Builds)

Coursera ↗

构建的定义与配置

什么是构建(Build)?

构建是用于将输入转换为结果对象的过程,例如将源代码转换为容器镜像。

  • 核心要求:构建需要一个构建配置文件(Build Configuration File,简称 BuildConfig)。
    • BuildConfig 定义了构建策略(Build Strategy)和输入源(Input Sources)。

常见构建策略

常用的构建策略有三种:

  1. Source-to-Image (S2I)
  2. Docker
  3. Custom

构建输入源(Build Input Sources)

构建输入源为构建提供了内容。您可以组合使用多个输入源,它们的优先级顺序如下:

  1. 内联 Dockerfile 定义(Inline Dockerfile definitions):优先级最高,会覆盖任何外部 Dockerfile。
  2. 从现有镜像中提取的内容。
  3. Git 仓库(Git repositories)。
  4. 二进制或本地输入(Binary or local inputs)。
  5. 输入 Secret(Input secrets)。
  6. 外部工件(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 和所需工件的仓库。

  • 工作原理:
    1. OpenShift 获取输入。
    2. 调用 Docker build 命令并创建镜像。
    3. 新镜像随后被推送到内部 OpenShift 注册表。
  • 实现方式 (4 种):
    1. 从镜像中替换 Dockerfile。
    2. 使用 Dockerfile 路径。
    3. 使用 Docker 环境变量。
    4. 添加 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。