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。
流程
- 运行以下命令,创建一个运行虚拟构建器的新项目,如 - virtual-builders:- oc new-project virtual-builders - $ oc new-project virtual-builders- Copy to Clipboard Copied! - Toggle word wrap Toggle overflow 
- 输入以下命令在项目中创建一个 - ServiceAccount,用于运行 构建 :- oc create sa -n virtual-builders quay-builder - $ oc create sa -n virtual-builders quay-builder- Copy to Clipboard Copied! - Toggle word wrap Toggle overflow - 输出示例 - serviceaccount/quay-builder created - serviceaccount/quay-builder created- Copy to Clipboard Copied! - Toggle word wrap Toggle overflow 
- 为创建的服务帐户提供编辑权限,使其可以 运行构建 : - oc adm policy -n virtual-builders add-role-to-user edit system:serviceaccount:virtual-builders:quay-builder - $ oc adm policy -n virtual-builders add-role-to-user edit system:serviceaccount:virtual-builders:quay-builder- Copy to Clipboard Copied! - Toggle word wrap Toggle overflow - 输出示例 - clusterrole.rbac.authorization.k8s.io/edit added: "system:serviceaccount:virtual-builders:quay-builder" - clusterrole.rbac.authorization.k8s.io/edit added: "system:serviceaccount:virtual-builders:quay-builder"- Copy to Clipboard Copied! - Toggle word wrap Toggle overflow 
- 输入以下命令,授予 构建器 worker - anyuid scc权限。这要求集群管理员特权,因为 构建器 必须以 Podman 用户身份运行,才能使非特权或无根构建正常工作。- oc adm policy -n virtual-builders add-scc-to-user anyuid -z quay-builder - $ oc adm policy -n virtual-builders add-scc-to-user anyuid -z quay-builder- Copy to Clipboard Copied! - Toggle word wrap Toggle overflow - 输出示例 - clusterrole.rbac.authorization.k8s.io/system:openshift:scc:anyuid added: "quay-builder" - clusterrole.rbac.authorization.k8s.io/system:openshift:scc:anyuid added: "quay-builder"- Copy to Clipboard Copied! - Toggle word wrap Toggle overflow 
- 输入以下命令来获取 builder 服务帐户的令牌: - oc create token quay-builder -n virtual-builders - $ oc create token quay-builder -n virtual-builders- Copy to Clipboard Copied! - Toggle word wrap Toggle overflow 注意- 当令牌过期时,您需要请求新令牌。另外,您还可以添加自定义过期。例如,使用 - specify-duration 20160m来保留令牌两周。- 输出示例 - eyJhbGciOiJSUzI1NiIsImtpZCI6IldfQUJkaDVmb3ltTHZ0dGZMYjhIWnYxZTQzN2dJVEJxcDJscldSdEUtYWsifQ... - eyJhbGciOiJSUzI1NiIsImtpZCI6IldfQUJkaDVmb3ltTHZ0dGZMYjhIWnYxZTQzN2dJVEJxcDJscldSdEUtYWsifQ...- Copy to Clipboard Copied! - Toggle word wrap Toggle overflow 
- 输入以下命令确定 构建器 路由: - oc get route -n quay-enterprise - $ oc get route -n quay-enterprise- Copy to Clipboard Copied! - Toggle word wrap Toggle overflow - 输出示例 - Copy to Clipboard Copied! - Toggle word wrap Toggle overflow 
- 输入以下命令,使用 - .crt扩展生成自签名 SSL/TlS 证书:- oc extract cm/kube-root-ca.crt -n openshift-apiserver - $ oc extract cm/kube-root-ca.crt -n openshift-apiserver- Copy to Clipboard Copied! - Toggle word wrap Toggle overflow - 输出示例 - ca.crt - ca.crt- Copy to Clipboard Copied! - Toggle word wrap Toggle overflow 
- 输入以下命令将 - ca.crt文件重命名为- build-cluster.crt:- mv ca.crt build-cluster.crt - $ mv ca.crt build-cluster.crt- Copy to Clipboard Copied! - Toggle word wrap Toggle overflow 
- 使用 OpenShift Container Platform Web 控制台更新 OpenShift Container Platform 部署上的 Red Hat Quay 的 - config.yaml文件,使其包含适当的 虚拟 构建配置。- 
								点 Operators Installed Operators Red Hat Quay Quay Registry。 
- 点 registry 的名称,如 example-registry。
- 在 Config Bundle Secret 下,单击配置捆绑包的名称,如 extra-ca-certificate-config-bundle-secret。
- 
								点 Actions Edit Secret。 
- 使用以下内容 添加适当的虚拟 构建配置作为参考: - Copy to Clipboard Copied! - Toggle word wrap Toggle overflow - 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时获取。
 - 虚拟构建配置 示例 - Copy to Clipboard Copied! - Toggle word wrap Toggle overflow 
- 在 Edit Secret 页面上点 Save。
 
- 
								点 Operators 
- 使用新配置重启 OpenShift Container Platform registry 上的 Red Hat Quay。
4.2.1. 修改 AWS S3 存储桶
如果使用 AWS S3 存储,则必须在启动构建前更改 AWS 控制台中的存储桶。
流程
- 登录到位于 s3.console.aws.com 的 AWS 控制台。
- 
							在搜索栏中,搜索 S3,然后单击 S3。
- 
							单击存储桶的名称,如 myawsbucket。
- 单击权限选项卡。
- 在 Cross-origin 资源共享(CORS) 下,包括以下参数: - Copy to Clipboard Copied! - Toggle word wrap Toggle overflow 
4.2.2. 修改 Google Cloud Platform 对象存储桶
目前,IBM Power 和 IBM Z 不支持修改 Google Cloud Platform 对象存储桶。
使用以下步骤为虚拟构建器配置跨原始资源共享(CORS)。如果没有 CORS 配置,上传构建 Dockerfile 会失败。
流程
- 使用以下参考来为您的特定 CORS 需要创建一个 JSON 文件。例如: - cat gcp_cors.json - $ cat gcp_cors.json- Copy to Clipboard Copied! - Toggle word wrap Toggle overflow - 输出示例 - Copy to Clipboard Copied! - Toggle word wrap Toggle overflow 
- 输入以下命令更新 GCP 存储桶: - gcloud storage buckets update gs://<bucket_name> --cors-file=./gcp_cors.json - $ gcloud storage buckets update gs://<bucket_name> --cors-file=./gcp_cors.json- Copy to Clipboard Copied! - Toggle word wrap Toggle overflow - 输出示例 - Updating Completed 1 - Updating Completed 1- Copy to Clipboard Copied! - Toggle word wrap Toggle overflow 
- 您可以运行以下命令来显示 GCP 存储桶的更新 CORS 配置: - gcloud storage buckets describe gs://<bucket_name> --format="default(cors)" - $ gcloud storage buckets describe gs://<bucket_name> --format="default(cors)"- Copy to Clipboard Copied! - Toggle word wrap Toggle overflow - 输出示例 - Copy to Clipboard Copied! - Toggle word wrap Toggle overflow