第 6 章 使用构建 worker 自动构建 Dockerfile
Red Hat Quay 支持使用 OpenShift 或 Kubernetes 上的一组 worker 节点构建 Dockerfile。构建触发器(如 GitHub Webhook)可以配置为在新代码提交时自动构建新版本的存储库。本文档将指导您使用 Red Hat Quay 安装启用构建,并设置一个或多个 OpenShift/K8s 集群,以接受来自 Red Hat Quay 的构建。使用 Red Hat Quay 3.4 时,底层构建管理器已作为 Red Hat Quay 2 从 Python 2 迁移到 Python 3 的一部分进行了彻底重写。现在,构建程序节点会动态创建为 Kubernetes 作业与在 Red Hat Quay 3.3 及更早版本中持续运行的构建器节点。这大大简化了 Red Hat Quay 如何管理构建,并提供相同的机制 quay.io,用于每天处理数千个容器镜像构建。目前在 Red Hat Quay 3.3 下运行静态("企业"构建器的客户,则需要迁移到基于 Kubernetes 的构建机制。
6.1. 架构概述
Red Hat Quay 构建系统专为可扩展性而设计(因为它用于在 quay.io 上托管所有构建)。Red Hat Quay 的 Build Manager 组件提供了一个编配层,用于跟踪构建请求,并确保 Build Executor (OpenShift/K8s 集群)将执行每个请求。每个构建都由 Kubernetes 作业处理,它启动一个小虚拟机来完全隔离和包含镜像构建过程。这样可确保容器构建不会相互或底层构建系统的影响。可以配置多个可执行文件,以确保在基础架构失败时执行构建。Red Hat Quay 将自动将构建发送到不同的执行者(如果其检测到一个执行者有困难)。
Red Hat Quay 的上游版本提供了如何配置基于 AWS/EC2 的可执行文件的说明。Red Hat Quay 客户不支持此配置。
6.1.1. 构建管理器
构建管理器负责调度的构建的生命周期。需要更新构建队列、构建阶段和运行作业状态的操作由构建管理器处理。
6.1.2. 构建 worker 的 control plane
构建作业在不同的 worker 节点上运行,并调度到单独的 control plane (executor)上。目前,Red Hat Quay 支持在 AWS 和 Kubernetes 上运行作业。使用 quay.io/quay/quay-builder 执行构建。在 AWS 上,构建调度到 EC2 实例。在 k8s 上,构建被调度为作业资源。
6.1.3. Orchestrator
编配器用于存储当前运行的构建作业的状态,并发布构建管理器要使用的事件。例如,到期事件。目前,支持的编配器后端是 Redis。