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
  2. 输入以下命令在项目中创建一个 ServiceAccount,用于运行 构建

    $ oc create sa -n virtual-builders quay-builder

    输出示例

    serviceaccount/quay-builder created

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

    $ oc adm policy -n virtual-builders add-role-to-user edit system:serviceaccount:virtual-builders:quay-builder

    输出示例

    clusterrole.rbac.authorization.k8s.io/edit added: "system:serviceaccount:virtual-builders:quay-builder"

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

    $ oc adm policy -n virtual-builders add-scc-to-user anyuid -z quay-builder

    输出示例

    clusterrole.rbac.authorization.k8s.io/system:openshift:scc:anyuid added: "quay-builder"

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

    $ oc create token quay-builder -n virtual-builders
    注意

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

    输出示例

    eyJhbGciOiJSUzI1NiIsImtpZCI6IldfQUJkaDVmb3ltTHZ0dGZMYjhIWnYxZTQzN2dJVEJxcDJscldSdEUtYWsifQ...

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

    $ oc get route -n quay-enterprise

    输出示例

    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

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

    $ oc extract cm/kube-root-ca.crt -n openshift-apiserver

    输出示例

    ca.crt

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

    $ mv ca.crt build-cluster.crt
  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>
      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>

    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
          }
      ]

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

注意

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

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

流程

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

    $ cat gcp_cors.json

    输出示例

    [
        {
          "origin": ["*"],
          "method": ["GET"],
          "responseHeader": ["Authorization"],
          "maxAgeSeconds": 3600
        },
        {
          "origin": ["*"],
          "method": ["PUT"],
          "responseHeader": [
                  "Content-Type",
                  "x-goog-acl",
                  "origin"],
          "maxAgeSeconds": 3600
        }
    ]

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

    $ gcloud storage buckets update gs://<bucket_name> --cors-file=./gcp_cors.json

    输出示例

    Updating
      Completed 1

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

    $ gcloud storage buckets describe gs://<bucket_name>  --format="default(cors)"

    输出示例

    cors:
    - maxAgeSeconds: 3600
      method:
      - GET
      origin:
      - '*'
      responseHeader:
      - Authorization
    - maxAgeSeconds: 3600
      method:
      - PUT
      origin:
      - '*'
      responseHeader:
      - Content-Type
      - x-goog-acl
      - origin

Red Hat logoGithubRedditYoutubeTwitter

学习

尝试、购买和销售

社区

关于红帽文档

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

让开源更具包容性

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

關於紅帽

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

© 2024 Red Hat, Inc.