第11章 ビルドワーカーを使用した Dockerfile の自動ビルド
Red Hat Quay は、OpenShift または Kubernetes 上のワーカーノードのセットを使用した Dockerfile のビルドをサポートしています。GitHub webhook などのビルドトリガーを設定することで、新しいコードがコミットされたときに自動的に新しいバージョンのリポジトリーを構築できます。
このドキュメントでは、Red Hat Quay インストールでビルドを有効にし、Red Hat Quay からのビルドを受け入れるように OpenShift Container Platform または Kubernetes クラスターをもう 1 つセットアップする方法を説明します。
11.1. OpenShift Container Platform を使用した Red Hat Quay ビルダーのセットアップ
Red Hat Quay ビルダーを OpenShift Container Platform で使用する前に、事前設定する必要があります。
11.1.1. OpenShift Container Platform TLS コンポーネントの設定
tls
コンポーネントを使用すると、TLS 設定を制御できます。
TLS コンポーネントが Red Hat Quay Operator によって管理されている場合、Red Hat Quay は Builders をサポートしません。
tls
を unmanaged
に設定する場合は、独自の ssl.cert
ファイルと ssl.key
ファイルを提供します。このとき、クラスターで Builder をサポートする場合は、Quay
ルート名と Builder ルート名の両方を証明書の SAN リストに追加する必要があります。あるいは、ワイルドカードを使用することもできます。
ビルダールートを追加するには、次の形式を使用します。
[quayregistry-cr-name]-quay-builder-[ocp-namespace].[ocp-domain-name]
11.1.2. Red Hat Quay ビルダー用の OpenShift Container Platform の準備
次の手順を使用して、OpenShift Container Platform 用に Red Hat Quay ビルダーを準備します。
前提条件
- OpenShift Container Platform TLS コンポーネントが設定されている。
手順
次のコマンドを入力して、ビルドを実行するプロジェクト (
builder
など) を作成します。$ oc new-project builder
次のコマンドを入力して、
builder
namespace に新しいServiceAccount
を作成します。$ oc create sa -n builder quay-builder
次のコマンドを入力して、
builder
namespace 内のedit
ロールをユーザーに付与します。$ oc policy add-role-to-user -n builder edit system:serviceaccount:builder:quay-builder
次のコマンドを入力して、
builder
namespace のquay-builder
サービスアカウントに関連付けられたトークンを取得します。このトークンは、OpenShift Container Platform クラスターの API サーバーの認証と対話に使用されます。$ oc sa get-token -n builder quay-builder
- OpenShift Container Platform クラスターの API サーバーの URL を特定します。これは、OpenShift Container Platform Web コンソールで確認できます。
ビルド
jobs
をスケジュールするときに使用するワーカーノードラベルを特定します。ビルド pods はベアメタルのワーカーノードで実行する必要があるため、通常、これらは特定のラベルで識別されます。どのノードラベルを使用すべきかは、クラスター管理者に確認してください。
オプション: クラスターが自己署名証明書を使用している場合は、Kube API Server の認証局 (CA) を取得して Red Hat Quay の追加証明書に追加する必要があります。
次のコマンドを入力して、CA を含むシークレットの名前を取得します。
$ 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 コンソールで、シークレットから
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 ビルダーの設定
Red Hat Quay ビルダーを有効にするには、次の手順を実行します。
手順
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: 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
各設定フィールドの詳細は、を参照してください。