4.2. 在 OpenShift Container Platform 上为 Red Hat Quay 配置虚拟构建
要使用 {product-title} 为 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输入以下命令在项目中创建一个
ServiceAccount,用于运行 构建 :$ oc create sa -n virtual-builders quay-builder输出示例
serviceaccount/quay-builder created为创建的服务帐户提供编辑权限,使其可以 运行构建 :
$ 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"输入以下命令,授予 构建器 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"输入以下命令来获取 builder 服务帐户的令牌:
$ oc create token quay-builder -n virtual-builders注意当令牌过期时,您需要请求新令牌。另外,您还可以添加自定义过期。例如,使用
specify-duration 20160m来保留令牌两周。输出示例
eyJhbGciOiJSUzI1NiIsImtpZCI6IldfQUJkaDVmb3ltTHZ0dGZMYjhIWnYxZTQzN2dJVEJxcDJscldSdEUtYWsifQ...输入以下命令确定 构建器 路由:
$ 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输入以下命令,使用
.crt扩展生成自签名 SSL/TlS 证书:$ oc extract cm/kube-root-ca.crt -n openshift-apiserver输出示例
ca.crt输入以下命令将
ca.crt文件重命名为build-cluster.crt:$ mv ca.crt build-cluster.crt使用 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。 使用以下内容 添加适当的虚拟 构建配置作为参考:
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> BUILD_MANAGER: - ephemeral - ALLOWED_WORKER_COUNT: 1 ORCHESTRATOR_PREFIX: buildman/production/ JOB_REGISTRATION_TIMEOUT: 3600 ORCHESTRATOR: REDIS_HOST: <sample_redis_hostname> REDIS_PASSWORD: "" REDIS_SSL: false REDIS_SKIP_KEYSPACE_EVENT_SETUP: false EXECUTORS: - EXECUTOR: kubernetesPodman NAME: openshift BUILDER_NAMESPACE: <sample_builder_namespace> 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> K8S_API_TLS_CA: <sample_crt_file> 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: <sample_service_account_name> SERVICE_ACCOUNT_TOKEN: <sample_account_token> HTTP_PROXY: <http://10.0.0.1:80> HTTPS_PROXY: <http://10.0.0.1:80> NO_PROXY: <hostname.example.com>其中:
BUILDMAN_HOSTNAME::指定 Red Hat Quay registry 的主机名。运行以下命令:$ oc get route quayregistry-quay-builder -n ${QUAY_PROJECT} -o jsonpath='{.spec.host}'.REDIS_HOST::指定 Redis 服务的主机名。BUILDER_NAMESPACE::指定 裸机构建 命名空间的名称。本例使用bare-metal-builder。K8S_API_SERVER::通过运行$ oc cluster-info来指定K8S_API_SERVER获取。K8S_API_TLS_CA::指定自定义 CA 证书的名称,例如K8S_API_TLS_CA: /conf/stack/extra_ca_certs/build-cluster.crt。CONTAINER_MEMORY_LIMITS::指定容器的内存限值。如果未指定,则默认为5120Mi。CONTAINER_CPU_LIMITS::指定容器的 CPU 限值。如果未指定,则默认为1000m。CONTAINER_MEMORY_REQUEST::指定容器的内存请求。如果未指定,则默认为3968Mi。CONTAINER_CPU_REQUEST::指定容器的 CPU 请求。如果未指定,则默认为500m。service_account_TOKEN::指定服务帐户的令牌。运行$ oc create sa来获得此目的。SSH_AUTHORIZED_KEYS::指定构建环境的 SSH 授权密钥。此密钥或密钥应当与管理员或开发人员用来 SSH 到构建工作程序的私钥对应,用于调试目的。此密钥可以通过使用特定的 SSH 密钥和端口建立与远程主机的 SSH 连接来获取。例如:$ ssh -i /path/to/ssh/key/set/in/ssh_authorized_keys -p 9999 core@localhost.虚拟构建配置 示例
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>- 在 Edit Secret 页面上点 Save。
-
点 Operators
- 使用新配置重启 OpenShift Container Platform registry 上的 Red Hat Quay。
4.2.1. 修改 AWS S3 存储桶 复制链接链接已复制到粘贴板!
要在 {product-title} 中使用 AWS S3 存储启用构建,您可以在 S3 存储桶中配置跨原始资源共享(CORS)设置。这允许构建 worker 访问和存储 S3 存储桶中的构建工件。
流程
- 登录到位于 s3.console.aws.com 的 AWS 控制台。
-
在搜索栏中,搜索
S3,然后单击 S3。 -
单击存储桶的名称,如
myawsbucket。 - 单击权限选项卡。
在 Cross-origin 资源共享(CORS) 下,包括以下参数:
[ { "AllowedHeaders": [ "Authorization" ], "AllowedMethods": [ "GET" ], "AllowedOrigins": [ "*" ], "ExposeHeaders": [], "MaxAgeSeconds": 3000 }, { "AllowedHeaders": [ "Content-Type", "x-amz-acl", "origin" ], "AllowedMethods": [ "PUT" ], "AllowedOrigins": [ "*" ], "ExposeHeaders": [], "MaxAgeSeconds": 3000 } ]