4.2. 在 OpenShift Container Platform 上为 Red Hat Quay 配置虚拟构建


本节中的步骤解释了如何在 OpenShift Container Platform 上为 Red Hat Quay 创建虚拟 构建环境。

注意
  • 如果使用 Amazon Web Service (AWS) S3 存储,则必须在运行构建器前在 AWS 控制台中修改存储桶。有关所需参数,请参阅以下部分"修改 AWS S3 存储桶"。
  • 如果使用 Google Cloud Platform (GCP)对象存储桶,您必须配置跨原始资源共享(CORS)以启用 虚拟构建

先决条件

  • 您已在运行 Red Hat Quay Operator 时置备了 OpenShift Container Platform 集群。
  • 您已将 tls 组件设置为 非受管 组件,并将自定义 SSL/TLS 证书上传到 Red Hat Quay Operator。如需更多信息,请参阅 Red Hat Quay 的 SSL 和 TLS
  • 您已为构建配置了 OpenShift Container Platform TLS 组件。
  • 以集群管理员身份登录 OpenShift Container Platform。

流程

  1. 运行以下命令,创建一个运行虚拟构建器的新项目,如 virtual-builders

    $ oc new-project virtual-builders
    Copy to Clipboard Toggle word wrap
  2. 输入以下命令在项目中创建一个 ServiceAccount,用于运行 构建

    $ oc create sa -n virtual-builders quay-builder
    Copy to Clipboard Toggle word wrap

    输出示例

    serviceaccount/quay-builder created
    Copy to Clipboard Toggle word wrap

  3. 为创建的服务帐户提供编辑权限,使其可以 运行构建

    $ oc adm policy -n virtual-builders add-role-to-user edit system:serviceaccount:virtual-builders:quay-builder
    Copy to Clipboard Toggle word wrap

    输出示例

    clusterrole.rbac.authorization.k8s.io/edit added: "system:serviceaccount:virtual-builders:quay-builder"
    Copy to Clipboard Toggle word wrap

  4. 输入以下命令,授予 构建器 worker anyuid scc 权限。这要求集群管理员特权,因为 构建器 必须以 Podman 用户身份运行,才能使非特权或无根构建正常工作。

    $ oc adm policy -n virtual-builders add-scc-to-user anyuid -z quay-builder
    Copy to Clipboard Toggle word wrap

    输出示例

    clusterrole.rbac.authorization.k8s.io/system:openshift:scc:anyuid added: "quay-builder"
    Copy to Clipboard Toggle word wrap

  5. 输入以下命令来获取 builder 服务帐户的令牌:

    $ oc create token quay-builder -n virtual-builders
    Copy to Clipboard Toggle word wrap
    注意

    当令牌过期时,您需要请求新令牌。另外,您还可以添加自定义过期。例如,使用 specify-duration 20160m 来保留令牌两周。

    输出示例

    eyJhbGciOiJSUzI1NiIsImtpZCI6IldfQUJkaDVmb3ltTHZ0dGZMYjhIWnYxZTQzN2dJVEJxcDJscldSdEUtYWsifQ...
    Copy to Clipboard Toggle word wrap

  6. 输入以下命令确定 构建器 路由:

    $ oc get route -n quay-enterprise
    Copy to Clipboard Toggle word wrap

    输出示例

    NAME: example-registry-quay-builder
    HOST/PORT: example-registry-quay-builder-quay-enterprise.apps.stevsmit-cluster-new.gcp.quaydev.org
    PATH:
    SERVICES: example-registry-quay-app
    PORT: grpc
    TERMINATION: passthrough/Redirect
    WILDCARD: None
    Copy to Clipboard Toggle word wrap

  7. 输入以下命令,使用 .crt 扩展生成自签名 SSL/TlS 证书:

    $ oc extract cm/kube-root-ca.crt -n openshift-apiserver
    Copy to Clipboard Toggle word wrap

    输出示例

    ca.crt
    Copy to Clipboard Toggle word wrap

  8. 输入以下命令将 ca.crt 文件重命名为 build-cluster.crt

    $ mv ca.crt build-cluster.crt
    Copy to Clipboard Toggle word wrap
  9. 使用 OpenShift Container Platform Web 控制台更新 OpenShift Container Platform 部署上的 Red Hat Quay 的 config.yaml 文件,使其包含适当的 虚拟 构建配置。

    1. Operators Installed Operators Red Hat Quay Quay Registry
    2. 点 registry 的名称,如 example-registry
    3. Config Bundle Secret 下,单击配置捆绑包的名称,如 extra-ca-certificate-config-bundle-secret
    4. Actions Edit Secret
    5. 使用以下内容 添加适当的虚拟 构建配置作为参考:

      FEATURE_USER_INITIALIZE: true
      BROWSER_API_CALLS_XHR_ONLY: false
      SUPER_USERS:
      - <superusername>
      FEATURE_USER_CREATION: false
      FEATURE_QUOTA_MANAGEMENT: true
      FEATURE_BUILD_SUPPORT: True
      BUILDMAN_HOSTNAME: <sample_build_route> 
      1
      
      BUILD_MANAGER:
        - ephemeral
        - ALLOWED_WORKER_COUNT: 1
          ORCHESTRATOR_PREFIX: buildman/production/
          JOB_REGISTRATION_TIMEOUT: 3600 
      2
      
          ORCHESTRATOR:
            REDIS_HOST: <sample_redis_hostname> 
      3
      
            REDIS_PASSWORD: ""
            REDIS_SSL: false
            REDIS_SKIP_KEYSPACE_EVENT_SETUP: false
          EXECUTORS:
            - EXECUTOR: kubernetesPodman
              NAME: openshift
              BUILDER_NAMESPACE: <sample_builder_namespace> 
      4
      
              SETUP_TIME: 180
              MINIMUM_RETRY_THRESHOLD: 0
              BUILDER_CONTAINER_IMAGE: quay.io/projectquay/quay-builder:{producty}
              # Kubernetes resource options
              K8S_API_SERVER: <sample_k8s_api_server> 
      5
      
              K8S_API_TLS_CA: <sample_crt_file> 
      6
      
              VOLUME_SIZE: 8G
              KUBERNETES_DISTRIBUTION: openshift
              CONTAINER_MEMORY_LIMITS: 1G 
      7
      
              CONTAINER_CPU_LIMITS: 300m 
      8
      
              CONTAINER_MEMORY_REQUEST: 1G 
      9
      
              CONTAINER_CPU_REQUEST: 300m 
      10
      
              NODE_SELECTOR_LABEL_KEY: ""
              NODE_SELECTOR_LABEL_VALUE: ""
              SERVICE_ACCOUNT_NAME: <sample_service_account_name>
              SERVICE_ACCOUNT_TOKEN: <sample_account_token> 
      11
      
              HTTP_PROXY: <http://10.0.0.1:80>
              HTTPS_PROXY: <http://10.0.0.1:80>
              NO_PROXY: <hostname.example.com>
      Copy to Clipboard Toggle word wrap
      1
      构建路由可通过在 OpenShift Container Platform 部署中使用 Red Hat Quay 的命名空间运行 $ oc get route -n 来获得。路由末尾必须提供端口,并且应使用以下格式:[ quayregistry-cr-name]-quay-builder-[ocp-namespace].[ocp-domain-name]:443
      2
      如果 JOB_REGISTRATION_TIMEOUT 参数设置过低,您可能会收到以下错误: failed to register job to build manager: rpc error: code = Unauthenticated desc = Invalid build token: Signature has expired。这个参数应至少设置为 240
      3
      如果您的 Redis 主机有密码或 SSL/TLS 证书,您必须相应地更新此字段。
      4
      设置为与 虚拟构建 命名空间的名称匹配。本例使用了 virtual-builders
      5
      K8S_API_SERVER 通过运行 $ oc cluster-info 获取。
      6
      您必须手动创建并添加自定义 CA 证书,如 K8S_API_TLS_CA: /conf/stack/extra_ca_certs/build-cluster.crt
      7
      如果未指定,则默认为 5120Mi
      8
      对于 虚拟构建,您必须确保集群中有足够的资源。如果未指定,则默认为 1000m
      9
      如果未指定,则默认为 3968Mi
      10
      如果未指定,则默认为 500m
      11
      运行 $ oc create sa 时获取。

      虚拟构建配置 示例

      FEATURE_USER_INITIALIZE: true
      BROWSER_API_CALLS_XHR_ONLY: false
      SUPER_USERS:
      - quayadmin
      FEATURE_USER_CREATION: false
      FEATURE_QUOTA_MANAGEMENT: true
      FEATURE_BUILD_SUPPORT: True
      BUILDMAN_HOSTNAME: example-registry-quay-builder-quay-enterprise.apps.docs.quayteam.org:443
      BUILD_MANAGER:
        - ephemeral
        - ALLOWED_WORKER_COUNT: 1
          ORCHESTRATOR_PREFIX: buildman/production/
          JOB_REGISTRATION_TIMEOUT: 3600
          ORCHESTRATOR:
            REDIS_HOST: example-registry-quay-redis
            REDIS_PASSWORD: ""
            REDIS_SSL: false
            REDIS_SKIP_KEYSPACE_EVENT_SETUP: false
          EXECUTORS:
            - EXECUTOR: kubernetesPodman
              NAME: openshift
              BUILDER_NAMESPACE: virtual-builders
              SETUP_TIME: 180
              MINIMUM_RETRY_THRESHOLD: 0
              BUILDER_CONTAINER_IMAGE: quay.io/projectquay/quay-builder:{producty}
              # Kubernetes resource options
              K8S_API_SERVER: api.docs.quayteam.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: ""
              NODE_SELECTOR_LABEL_VALUE: ""
              SERVICE_ACCOUNT_NAME: quay-builder
              SERVICE_ACCOUNT_TOKEN: "eyJhbGciOiJSUzI1NiIsImtpZCI6IldfQUJkaDVmb3ltTHZ0dGZMYjhIWnYxZTQzN2dJVEJxcDJscldSdEUtYWsifQ"
              HTTP_PROXY: <http://10.0.0.1:80>
              HTTPS_PROXY: <http://10.0.0.1:80>
              NO_PROXY: <hostname.example.com>
      Copy to Clipboard Toggle word wrap

    6. Edit Secret 页面上点 Save
  10. 使用新配置重启 OpenShift Container Platform registry 上的 Red Hat Quay。

4.2.1. 修改 AWS S3 存储桶

如果使用 AWS S3 存储,则必须在启动构建前更改 AWS 控制台中的存储桶。

流程

  1. 登录到位于 s3.console.aws.com 的 AWS 控制台。
  2. 在搜索栏中,搜索 S3,然后单击 S3
  3. 单击存储桶的名称,如 myawsbucket
  4. 单击权限选项卡。
  5. Cross-origin 资源共享(CORS) 下,包括以下参数:

      [
          {
              "AllowedHeaders": [
                  "Authorization"
              ],
              "AllowedMethods": [
                  "GET"
              ],
              "AllowedOrigins": [
                  "*"
              ],
              "ExposeHeaders": [],
              "MaxAgeSeconds": 3000
          },
          {
              "AllowedHeaders": [
                  "Content-Type",
                  "x-amz-acl",
                  "origin"
              ],
              "AllowedMethods": [
                  "PUT"
              ],
              "AllowedOrigins": [
                  "*"
              ],
              "ExposeHeaders": [],
              "MaxAgeSeconds": 3000
          }
      ]
    Copy to Clipboard Toggle word wrap

4.2.2. 修改 Google Cloud Platform 对象存储桶

注意

目前,IBM Power 和 IBM Z 不支持修改 Google Cloud Platform 对象存储桶。

使用以下步骤为虚拟构建器配置跨原始资源共享(CORS)。如果没有 CORS 配置,上传构建 Dockerfile 会失败。

流程

  1. 使用以下参考来为您的特定 CORS 需要创建一个 JSON 文件。例如:

    $ cat gcp_cors.json
    Copy to Clipboard Toggle word wrap

    输出示例

    [
        {
          "origin": ["*"],
          "method": ["GET"],
          "responseHeader": ["Authorization"],
          "maxAgeSeconds": 3600
        },
        {
          "origin": ["*"],
          "method": ["PUT"],
          "responseHeader": [
                  "Content-Type",
                  "x-goog-acl",
                  "origin"],
          "maxAgeSeconds": 3600
        }
    ]
    Copy to Clipboard Toggle word wrap

  2. 输入以下命令更新 GCP 存储桶:

    $ gcloud storage buckets update gs://<bucket_name> --cors-file=./gcp_cors.json
    Copy to Clipboard Toggle word wrap

    输出示例

    Updating
      Completed 1
    Copy to Clipboard Toggle word wrap

  3. 您可以运行以下命令来显示 GCP 存储桶的更新 CORS 配置:

    $ gcloud storage buckets describe gs://<bucket_name>  --format="default(cors)"
    Copy to Clipboard Toggle word wrap

    输出示例

    cors:
    - maxAgeSeconds: 3600
      method:
      - GET
      origin:
      - '*'
      responseHeader:
      - Authorization
    - maxAgeSeconds: 3600
      method:
      - PUT
      origin:
      - '*'
      responseHeader:
      - Content-Type
      - x-goog-acl
      - origin
    Copy to Clipboard Toggle word wrap

返回顶部
Red Hat logoGithubredditYoutubeTwitter

学习

尝试、购买和销售

社区

关于红帽文档

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

让开源更具包容性

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

關於紅帽

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

Theme

© 2025 Red Hat