第 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 Builder 之前,您必须预先配置 Red Hat Quay Builder。
11.1.1. 配置 OpenShift Container Platform TLS 组件
tls
组件允许您控制 TLS 配置。
当 TLS 组件由 Red Hat Quay Operator 管理时,Red Hat Quay 不支持 Builder。
如果将 tls
设置为 unmanaged
,则提供自己的 ssl.cert
和 ssl.key
文件。在本实例中,如果您希望集群支持构建器,您必须将 Quay
路由和 Builder 路由名称添加到证书中的 SAN 列表中,也可以使用通配符。
要添加 builder 路由,请使用以下格式:
[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 组件。
流程
输入以下命令创建一个运行构建的项目,如
builder
:$ oc new-project builder
输入以下命令在
builder
命名空间中创建新ServiceAccount
:$ oc create sa -n builder quay-builder
输入以下命令在
构建器
命名空间中授予用户edit
角色:$ oc policy add-role-to-user -n builder edit system:serviceaccount:builder:quay-builder
输入以下命令检索与构建器命名空间中的
quay-
服务帐户关联的令牌。此令牌用于对 OpenShift Container Platform 集群的 API 服务器进行身份验证并与之交互。builder
$ oc sa get-token -n builder quay-builder
- 识别 OpenShift Container Platform 集群的 API 服务器的 URL。这可在 OpenShift Container Platform Web 控制台中找到。
识别调度构建作业时使用的 worker
节点标签
。由于构建 pod 需要在裸机 worker 节点上运行,因此通常使用特定标签来标识这些 pod。使用集群管理员检查,确定应该使用哪个节点标签。
可选。如果集群使用自签名证书,您必须获取 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 Builder
使用以下步骤启用 Red Hat Quay Builder。
流程
确保您的 Red Hat Quay
config.yaml
文件启用了构建,例如: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: 1G CONTAINER_CPU_LIMITS: 300m CONTAINER_MEMORY_REQUEST: 1G CONTAINER_CPU_REQUEST: 300m 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 HTTP_PROXY: <http://10.0.0.1:80> HTTPS_PROXY: <http://10.0.0.1:80> NO_PROXY: <hostname.example.com>
有关每个配置字段的更多信息,请参阅