6.4. 使用 OpenShift 设置 Red Hat Quay Builder


6.4.1. OpenShift TLS 组件

tls 组件允许您控制 TLS 配置。

注意

当 TLS 组件由 Operator 管理时,Red Hat Quay 3.7 不支持构建器。

如果将 tls 设置为 非受管,则提供自己的 ssl.certssl.key 文件。在本例中,如果希望集群支持构建器,您必须将 Quay 路由和构建器路由名称添加到证书中的 SAN 列表中,或使用通配符。要添加构建器路由,请使用以下格式:

[quayregistry-cr-name]-quay-builder-[ocp-namespace].[ocp-domain-name]
Copy to Clipboard Toggle word wrap

6.4.2. Prepare OpenShift for Red Hat Quay Builds

在 OpenShift 集群中接受 Red Hat Quay 构建前,需要一些操作。

  1. 创建一个将运行构建的项目(如 'builder')

    $ oc new-project builder
    Copy to Clipboard Toggle word wrap
  2. 在此项目中创建一个 ServiceAccount,它将用于运行构建。确保有足够的权限来创建 作业和 Pod。复制 ServiceAccount的令牌,以便稍后使用。

    $ oc create sa -n builder quay-builder
    $ oc policy add-role-to-user -n builder edit system:serviceaccount:builder:quay-builder
    $ oc sa get-token -n builder quay-builder
    Copy to Clipboard Toggle word wrap
  3. 识别 OpenShift 集群 API 服务器的 URL。这可以通过 OpenShift 控制台找到。
  4. 识别调度构建作业时使用的 worker 节点标签。因为构建 pod 需要在裸机 worker 节点上运行,因此通常使用特定标签来标识这些 pod。检查您的集群管理员,以确定应使用哪个节点标签。
  5. 如果集群使用自签名证书,获取 kube apiserver 的 CA 来添加到 Red Hat Quay 的额外证书中。

    1. 获取包含 CA 的 secret 名称:

      $ oc get sa openshift-apiserver-sa --namespace=openshift-apiserver -o json | jq '.secrets[] | select(.name | contains("openshift-apiserver-sa-token"))'.name
      Copy to Clipboard Toggle word wrap
    2. 从 Openshift 控制台中的 secret 获取 ca.crt 键值。该值应该以"-----BEGIN CERTIFICATE-----"开头。
    3. 使用 ConfigTool 在 Red Hat Quay 中导入 CA。确保此文件的名称匹配 K8S_API_TLS_CA
  6. ServiceAccount 创建所需的安全上下文/角色绑定:
apiVersion: security.openshift.io/v1
kind: SecurityContextConstraints
metadata:
  name: quay-builder
priority: null
readOnlyRootFilesystem: false
requiredDropCapabilities: null
runAsUser:
  type: RunAsAny
seLinuxContext:
  type: RunAsAny
seccompProfiles:
- '*'
supplementalGroups:
  type: RunAsAny
volumes:
- '*'
allowHostDirVolumePlugin: true
allowHostIPC: true
allowHostNetwork: true
allowHostPID: true
allowHostPorts: true
allowPrivilegeEscalation: true
allowPrivilegedContainer: true
allowedCapabilities:
- '*'
allowedUnsafeSysctls:
- '*'
defaultAddCapabilities: null
fsGroup:
  type: RunAsAny
---
apiVersion: rbac.authorization.k8s.io/v1
kind: Role
metadata:
  name: quay-builder-scc
  namespace: builder
rules:
- apiGroups:
  - security.openshift.io
  resourceNames:
  - quay-builder
  resources:
  - securitycontextconstraints
  verbs:
  - use
---
apiVersion: rbac.authorization.k8s.io/v1
kind: RoleBinding
metadata:
  name: quay-builder-scc
  namespace: builder
subjects:
- kind: ServiceAccount
  name: quay-builder
roleRef:
  apiGroup: rbac.authorization.k8s.io
  kind: Role
  name: quay-builder-scc
Copy to Clipboard Toggle word wrap
  1. 确保已在 Red Hat Quay 配置中启用了 Builds。
FEATURE_BUILD_SUPPORT: True
Copy to Clipboard Toggle word wrap
  1. 将以下内容添加到 Red Hat Quay 配置捆绑包中,使用特定于安装的值替换每个值。
注意

目前,只能通过 Red Hat Quay Config Tool 启用构建功能。必须在 config.yaml 文件中手动进行 Build Manager 和 Executors 的实际配置。

BUILD_MANAGER:
- ephemeral
- ALLOWED_WORKER_COUNT: 1
  ORCHESTRATOR_PREFIX: buildman/production/
  ORCHESTRATOR:
    REDIS_HOST: quay-redis-host
    REDIS_PASSWORD: quay-redis-password
    REDIS_SSL: true
    REDIS_SKIP_KEYSPACE_EVENT_SETUP: false
  EXECUTORS:
  - EXECUTOR: kubernetes
    BUILDER_NAMESPACE: builder
    K8S_API_SERVER: api.openshift.somehost.org:6443
    K8S_API_TLS_CA: /conf/stack/extra_ca_certs/build_cluster.crt
    VOLUME_SIZE: 8G
    KUBERNETES_DISTRIBUTION: openshift
    CONTAINER_MEMORY_LIMITS: 5120Mi
    CONTAINER_CPU_LIMITS: 1000m
    CONTAINER_MEMORY_REQUEST: 3968Mi
    CONTAINER_CPU_REQUEST: 500m
    NODE_SELECTOR_LABEL_KEY: beta.kubernetes.io/instance-type
    NODE_SELECTOR_LABEL_VALUE: n1-standard-4
    CONTAINER_RUNTIME: podman
    SERVICE_ACCOUNT_NAME: *****
    SERVICE_ACCOUNT_TOKEN: *****
    QUAY_USERNAME: quay-username
    QUAY_PASSWORD: quay-password
    WORKER_IMAGE: <registry>/quay-quay-builder
    WORKER_TAG: some_tag
    BUILDER_VM_CONTAINER_IMAGE: <registry>/quay-quay-builder-qemu-rhcos:v3.4.0
    SETUP_TIME: 180
    MINIMUM_RETRY_THRESHOLD: 0
    SSH_AUTHORIZED_KEYS:
    - ssh-rsa 12345 someuser@email.com
    - ssh-rsa 67890 someuser2@email.com
Copy to Clipboard Toggle word wrap

每个配置字段都如下所述。

ALLOWED_WORKER_COUNT
定义每个 Red Hat Quay Pod 的 Build Worker 数。通常这是 '1'。
ORCHESTRATOR_PREFIX
定义要添加到所有 Redis 密钥的唯一前缀(使用等同于将 Orchestrator 值与其他 Redis 密钥隔离)。
REDIS_HOST
Redis 服务的主机名。
REDIS_PASSWORD
在 Redis 服务中进行身份验证的密码。
REDIS_SSL
定义您的 Redis 连接是否使用 SSL。
REDIS_SKIP_KEYSPACE_EVENT_SETUP
默认情况下,Red Hat Quay 不会在运行时设置关键事件所需的关键空间事件。为此,请将 REDIS_SKIP_KEYSPACE_EVENT_SETUP 设置为 false
EXECUTOR
启动此类型的执行者定义。有效值为 'kubernetes' 和 'ec2'
BUILDER_NAMESPACE
Red Hat Quay 构建要放置的 Kubernetes 命名空间
K8S_API_SERVER
构建所需的 OpenShift 集群的 API 服务器主机名
K8S_API_TLS_CA
构建集群的 CA 证书的 Quay 容器中的文件路径,以便在发出 API 调用时信任它。
KUBERNETES_DISTRIBUTION
指明正在使用的 Kubernetes 类型。有效值为 'openshift' 和 'k8s'。
CONTAINER_*
定义每个构建 Pod 的资源请求和限值。
NODE_SELECTOR_*
定义节点选择器标签名称/值对,其中应调度构建 Pod。
CONTAINER_RUNTIME
指定构建器是否应该运行 dockerpodman。使用红帽 quay-builder 镜像的客户应将其设置为 podman
SERVICE_ACCOUNT_NAME/SERVICE_ACCOUNT_TOKEN
定义将由构建 Pod 使用的服务帐户名称/令牌。
QUAY_USERNAME/QUAY_PASSWORD
定义拉取 WORKER_IMAGE 字段中指定的 Red Hat Quay 构建 worker 镜像所需的 registry 凭证。客户应提供一个 Red Hat Service Account 凭证,如 https://access.redhat.com/RegistryAuthentication 文章中的针对 registry.redhat.io 的"创建 Registry 服务账户"部分。
WORKER_IMAGE
Red Hat Quay 构建器镜像的镜像引用。registry.redhat.io/quay/quay-builder
WORKER_TAG
所需构建器镜像的标签。最新版本为 v3.4.0。
BUILDER_VM_CONTAINER_IMAGE
对包含运行每个 Red Hat Quay 构建所需的内部虚拟机(registry.redhat.io/quay/quay-builder-qemu-rhcos:v3.4.0)所需的容器镜像的完整引用。
SETUP_TIME
指定构建在构建管理器尚未注册到自身(默认为 500 秒)时超时的秒数。尝试超时的构建三次重启。如果构建在三次尝试失败后没有注册,则认为失败。
MINIMUM_RETRY_THRESHOLD
此设置与多个 Executors 一起使用;它指示在选择其他可执行文件之前尝试启动构建的次数。设置为 0 意味着构建作业需要有多少个限制。此值应有意保持 small (三个或更少),以确保在基础架构发生故障时迅速发生故障转移。您必须为此设置指定一个值。例如,Kubernetes 被设置为第一个 executor 和 EC2 作为第二个 executor。如果我们希望最终试图运行的作业总在 EC2 上而不是在 Kubernetes 上运行时,应该将 Kubernetes executor 的 MINIMUM_RETRY_THRESHOLD 设置为 1,EC2 的 MINIMUM_RETRY_THRESHOLD 设置为 0 (如果没有设置,默认为 0)。在本例中,kubernetes 的 MINIMUM_RETRY_THRESHOLD > retries_remaining (1)将评估为 False,因此回退到配置的第二个执行过程
SSH_AUTHORIZED_KEYS
ignition 配置中到 bootstrap 的 ssh 密钥列表。这允许其他密钥用于 ssh 到 EC2 实例或 QEMU 虚拟机
返回顶部
Red Hat logoGithubredditYoutubeTwitter

学习

尝试、购买和销售

社区

关于红帽文档

通过我们的产品和服务,以及可以信赖的内容,帮助红帽用户创新并实现他们的目标。 了解我们当前的更新.

让开源更具包容性

红帽致力于替换我们的代码、文档和 Web 属性中存在问题的语言。欲了解更多详情,请参阅红帽博客.

關於紅帽

我们提供强化的解决方案,使企业能够更轻松地跨平台和环境(从核心数据中心到网络边缘)工作。

Theme

© 2025 Red Hat