第 11 章 使用构建 worker 自动构建 Dockerfile


Red Hat Quay 支持使用 OpenShift Container Platform 或 Kubernetes 上的一组 worker 节点构建 Dockerfile。构建触发器(如 GitHub Webhook)可以配置为在提交新代码时自动构建存储库的新版本。

本文档演示了如何使用 Red Hat Quay 安装启用构建,并设置多个 OpenShift Container Platform 或 Kubernetes 集群来接受来自 Red Hat Quay 的构建。

11.1. 使用 OpenShift Container Platform 设置 Red Hat Quay Builder

在 OpenShift Container Platform 中使用 Red Hat Quay Builder 之前,您必须预先配置 Red Hat Quay Builder。

11.1.1. 配置 OpenShift Container Platform TLS 组件

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

注意

当 TLS 组件由 Red Hat Quay Operator 管理时,Red Hat Quay 不支持 Builder。

如果将 tls 设置为 unmanaged,则提供自己的 ssl.certssl.key 文件。在本实例中,如果您希望集群支持构建器,您必须将 Quay 路由和 Builder 路由名称添加到证书中的 SAN 列表中,也可以使用通配符。

要添加 builder 路由,请使用以下格式:

[quayregistry-cr-name]-quay-builder-[ocp-namespace].[ocp-domain-name]

11.1.2. 为 Red Hat Quay Builder 准备 OpenShift Container Platform

使用以下步骤为 OpenShift Container Platform 准备 Red Hat Quay Builders。

先决条件

  • 您已配置了 OpenShift Container Platform TLS 组件。

流程

  1. 输入以下命令创建一个运行构建的项目,如 builder

    $ oc new-project builder
  2. 输入以下命令在 builder 命名空间中创建新 ServiceAccount

    $ oc create sa -n builder quay-builder
  3. 输入以下命令在 构建器 命名空间中授予用户 edit 角色:

    $ oc policy add-role-to-user -n builder edit system:serviceaccount:builder:quay-builder
  4. 输入以下命令检索与构建器命名空间中的 quay- builder 服务帐户关联的令牌。此令牌用于对 OpenShift Container Platform 集群的 API 服务器进行身份验证并与之交互。

    $ oc sa get-token -n builder quay-builder
  5. 识别 OpenShift Container Platform 集群的 API 服务器的 URL。这可在 OpenShift Container Platform Web 控制台中找到。
  6. 识别调度构建作业时使用的 worker 节点标签。由于构建 pod 需要在裸机 worker 节点上运行,因此通常使用特定标签来标识这些 pod。

    使用集群管理员检查,确定应该使用哪个节点标签。

  7. 可选。如果集群使用自签名证书,您必须获取 Kube API 服务器的证书颁发机构(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
    2. 从 OpenShift Container Platform Web 控制台中的 secret 获取 ca.crt 键值。该值以 "-----BEGIN CERTIFICATE-----"' 开头。
    3. 将 CA 导入到 Red Hat Quay。确保此文件的名称与 K8S_API_TLS_CA 匹配。
  8. ServiceAccount 创建以下 SecurityContextConstraints 资源:

    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

11.1.3. 配置 Red Hat Quay Builder

使用以下步骤启用 Red Hat Quay Builder。

流程

  1. 确保您的 Red Hat Quay config.yaml 文件启用了构建,例如:

    FEATURE_BUILD_SUPPORT: True
  2. 在您的 Red Hat Quay config.yaml 文件中添加以下信息,将每个值替换为与您特定安装相关的信息:

    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: 1G
        CONTAINER_CPU_LIMITS: 300m
        CONTAINER_MEMORY_REQUEST: 1G
        CONTAINER_CPU_REQUEST: 300m
        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
        HTTP_PROXY: <http://10.0.0.1:80>
        HTTPS_PROXY: <http://10.0.0.1:80>
        NO_PROXY: <hostname.example.com>

    有关每个配置字段的更多信息,请参阅

Red Hat logoGithubRedditYoutubeTwitter

学习

尝试、购买和销售

社区

关于红帽文档

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

让开源更具包容性

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

關於紅帽

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

© 2024 Red Hat, Inc.