第 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 Builders。
11.1.1. 配置 OpenShift Container Platform TLS 组件
tls
组件允许您控制 TLS 配置。
当 TLS 组件由 Red Hat Quay Operator 管理时,Red Hat Quay 不支持 Builder。
如果将 tls
设置为非受管状态
,您可以提供自己的 ssl.cert
和 ssl.key
文件。在本实例中,如果希望集群支持 Builder,您必须将 Quay
路由和 Builder 路由名称添加到证书中的 SAN 列表中;也可以使用通配符。
要添加构建器路由,请使用以下格式:
[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 组件。
流程
输入以下命令来创建运行 Builds 的项目,如
builder
:$ oc new-project builder
输入以下命令在
构建器
命名空间中创建一个新的ServiceAccount
:$ oc create sa -n builder quay-builder
输入以下命令在
builder
命名空间中授予用户edit
角色:$ oc policy add-role-to-user -n builder edit system:serviceaccount:builder:quay-builder
输入以下命令来检索与
builder
命名空间中quay-builder
服务帐户关联的令牌。此令牌用于身份验证并与 OpenShift Container Platform 集群的 API 服务器交互。$ oc sa get-token -n builder quay-builder
- 识别 OpenShift Container Platform 集群的 API 服务器的 URL。这可以在 OpenShift Container Platform Web 控制台中找到。
识别调度构建作业时要使用的 worker
节点标签
。因为构建 pod 需要在裸机 worker 节点上运行,所以通常它们使用特定的标签标识。检查您的集群管理员,以确定应使用哪个节点标签。
可选。如果集群使用自签名证书,则必须获取 Kube API 服务器的证书颁发机构(CA)以添加到 Red Hat Quay 的额外证书。
输入以下命令获取包含 CA 的 secret 的名称:
$ oc get sa openshift-apiserver-sa --namespace=openshift-apiserver -o json | jq '.secrets[] | select(.name | contains("openshift-apiserver-sa-token"))'.name
-
从 OpenShift Container Platform Web 控制台中的 secret 获取
ca.crt
键值。该值以 "-----BEGIN CERTIFICATE-----"' 开头。 -
将 CA 导入到 Red Hat Quay。确保此文件的名称与
K8S_API_TLS_CA
匹配。
为
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 Builders
使用以下步骤启用 Red Hat Quay Builders。
流程
确保您的 Red Hat Quay
config.yaml
文件启用了 Builds,例如:FEATURE_BUILD_SUPPORT: True
在 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: 5120Mi CONTAINER_CPU_LIMITS: 1000m CONTAINER_MEMORY_REQUEST: 3968Mi CONTAINER_CPU_REQUEST: 500m 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
有关每个配置字段的更多信息,请参阅