6.4. Red Hat Quay ビルダーと OpenShift のセットアップ
6.4.1. OpenShift TLS コンポーネント
tls
コンポーネントを使用すると、TLS 設定を制御できます。
TLS コンポーネントが Operator によって管理されていると、Red Hat Quay 3.7 はビルダーをサポートしません。
tls
を unmanaged
に設定する場合は、独自の ssl.cert
ファイルと ssl.key
ファイルを提供します。このとき、クラスターでビルダーをサポートする場合は、Quay ルートとビルダールート名の両方を証明書の SAN リストに追加するか、ワイルドカードを使用する必要があります。ビルダールートを追加するには、次の形式を使用します。
[quayregistry-cr-name]-quay-builder-[ocp-namespace].[ocp-domain-name]
6.4.2. Red Hat Quay のビルド用 OpenShift の準備
OpenShift クラスターが Red Hat Quay からのビルドを受け入れる前に、OpenShift クラスター上で必要なアクションがいくつかあります。
ビルドを実行するプロジェクトを作成します (例: ‘builder')。
$ oc new-project builder
ビルドの実行に使用する
ServiceAccount
をこのProject
に作成します。Jobs
やPod
を作成するのに十分な権限を持っていることを確認してください。後で使用するために、ServiceAccount
のトークンをコピーします。$ oc create sa -n builder quay-builder $ oc policy add-role-to-user -n builder edit system:serviceaccount:builder:quay-builder $ oc sa get-token -n builder quay-builder
- OpenShift クラスターの API サーバーの URL を特定します。これは、OpenShift Console から確認できます。
-
Jobs
のビルドをスケジューリングする際に使用するワーカーノードのラベルを特定します。ビルド Pod はベアメタルのワーカーノードで実行する必要があるため、通常、これらは特定のラベルで識別されます。どのノードラベルを使用すべきかについては、クラスター管理者に確認してください。 クラスターが自己署名証明書を使用している場合は、kube apiserver の 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 のコンソールで、secret から
ca.crt
キーの値を取得します。値は、"-----BEGIN CERTIFICATE-----" で始まります。 -
ConfigTool を使用して Red Hat Quay に CA をインポートします。このファイルの名前が
K8S_API_TLS_CA
と一致することを確認してください。
-
ServiceAccount
に必要なセキュリティーコンテキスト/ロールバインディングを作成します。
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
6.4.3. ビルダーの有効化および Red Hat Quay 設定バンドルへのビルド設定の追加
- Red Hat Quay の設定で Builds が有効になっていることを確認してください。
FEATURE_BUILD_SUPPORT: True
- Red Hat Quay の設定バンドルに以下を追加し、各値をインストールに固有の値で置き換えます。
現在、Red Hat Quay Config Tool を介して有効にできるのは Build 機能自体のみです。Build Manager と Executor の実際の設定は、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: SSH_AUTHORIZED_KEYS: - ssh-rsa 12345 someuser@email.com - ssh-rsa 67890 someuser2@email.com
各設定項目の説明は以下のとおりです。
- ALLOWED_WORKER_COUNT
- Red Hat Quay Pod ごとにインスタンス化される Build Worker の数を定義します。通常、これは ‘1' です。
- ORCHESTRATOR_PREFIX
- すべての Redis キーに追加される一意の接頭辞を定義します (Orchestrator の値を他の Redis キーから分離するのに便利です)。
- REDIS_HOST
- Redis サービスのホスト名。
- REDIS_PASSWORD
- Redis サービスに認証されるためのパスワード。
- REDIS_SSL
- Redis の接続に SSL を使用するかどうかを定義します。
- REDIS_SKIP_KEYSPACE_EVENT_SETUP
-
デフォルトでは、Red Hat Quay はランタイム時のキーイベントに必要なキースペースイベントを設定しません。これを行うには、REDIS_SKIP_KEYSPACE_EVENT_SETUP を
false
に設定します。 - EXECUTOR
- このタイプのエグゼキュータの定義を開始します。有効な値は ‘kubernetes' および ‘ec2' です。
- BUILDER_NAMESPACE
- Red Hat Quay のビルドが行われる Kubernetes 名前空間
- K8S_API_SERVER
- ビルドが行われる OpenShift クラスターの API サーバーのホスト名
- K8S_API_TLS_CA
-
API 呼び出しの実行時に Quay アプリケーションが信頼するビルドクラスターの CA 証明書の
Quay
コンテナーのファイルパス。 - KUBERNETES_DISTRIBUTION
- 使用している Kubernetes の種類を示します。有効な値は‘openshift' および ‘k8s' です。
- CONTAINER_*
- 各ビルド Pod のリソース要求および制限を定義します。
- NODE_SELECTOR_*
- ビルド Pod がスケジューリングされるノードセレクターラベル名と値のペアを定義します。
- CONTAINER_RUNTIME
-
ビルダーが
docker
とpodman
のどちらを実行するかを指定します。Red Hat のquay-builder
イメージを使用しているお客様は、これをpodman
に設定してください。 - SERVICE_ACCOUNT_NAME/SERVICE_ACCOUNT_TOKEN
- ビルド Pod で使用されるサービスアカウント名/トークンを定義します。
- QUAY_USERNAME/QUAY_PASSWORD
- WORKER_IMAGE フィールドで指定された Red Hat Quay ビルドワーカーイメージをプルするために必要なレジストリー認証情報を定義します。お客様は、registry.redhat.io に対して https://access.redhat.com/RegistryAuthentication の記事のレジストリーサービスアカウントの作成セクションで定義されている Red Hat Service Account の認証情報を提供する必要があります。
- WORKER_IMAGE
- Red Hat Quay ビルダーイメージのイメージ参照。registry.redhat.io/quay/quay-builder
- WORKER_TAG
- 希望するビルダーイメージのタグ。最新バージョンは v3.4.0 です。
- BUILDER_VM_CONTAINER_IMAGE
-
各 Red Hat Quay ビルドの実行に必要な内部仮想マシンを保持するコンテナーイメージの完全な参照 (
registry.redhat.io/quay/quay-builder-qemu-rhcos:v3.4.0
)。 - SETUP_TIME
- ビルドがまだ Build Manager に登録されていない場合に、タイムアウトする秒数を指定します (デフォルトは 500 秒)。タイムアウトしたビルドは、3 回再起動が試みられます。3 回試してもビルドが登録されない場合は、失敗とみなされます。
- MINIMUM_RETRY_THRESHOLD
-
この設定は、複数のエグゼキューターで使用されます。別のエグゼキューターが選択されるまでに、ビルドの開始を何回再試行するかを示します。0 に設定すると、ビルドジョブの試行回数に制限はありません。この値は意図的に小さく (3 以下) しておくことで、インフラストラクチャーに障害が発生した際にも迅速にフェイルオーバーを行うことができます。たとえば、Kubernetes を第 1 のエグゼキューター、EC2 を第 2 のエグゼキューターとして設定します。ジョブ実行の最後の試行を常に Kubernetes ではなく EC2 で実行したい場合は、Kubernetes のエグゼキューターの
MINIMUM_RETRY_THRESHOLD
を 1 に、EC2 のMINIMUM_RETRY_THRESHOLD
を 0 に設定します (設定していない場合はデフォルトで 0 になります)。この場合、kubernetes のMINIMUM_RETRY_THRESHOLD
> retries_remaining(1) は False と評価され、設定された 2 番目のエクゼキュータにフォールバックされます。 - SSH_AUTHORIZED_KEYS
- ignition 設定でのブートストラップする ssh キーのリスト。これにより、他の鍵を使用して EC2 インスタンスや QEMU 仮想マシンに ssh 接続することができます。