5.2. OpenShift Container Platform を使用した Red Hat Quay ビルダー環境の作成
このセクションの手順では、OpenShift Container Platform で Red Hat Quay 仮想ビルダー環境を作成する方法を説明します。
5.2.1. OpenShift Container Platform TLS コンポーネント リンクのコピーリンクがクリップボードにコピーされました!
tls
コンポーネントを使用すると、TLS 設定を制御できます。
TLS コンポーネントが Operator によって管理されている場合、Red Hat Quay 3.10 はビルダーをサポートしません。
tls
を unmanaged
に設定する場合は、独自の ssl.cert
ファイルと ssl.key
ファイルを提供します。このとき、クラスターでビルダーをサポートする場合は、Quay ルートとビルダールート名の両方を証明書の SAN リストに追加するか、ワイルドカードを使用する必要があります。
ビルダールートを追加するには、次の形式を使用します。
[quayregistry-cr-name]-quay-builder-[ocp-namespace].[ocp-domain-name]:443
[quayregistry-cr-name]-quay-builder-[ocp-namespace].[ocp-domain-name]:443
5.2.2. OpenShift Container Platform ビルダー向けの Red Hat Quay の使用 リンクのコピーリンクがクリップボードにコピーされました!
ビルダーには SSL/TLS 証明書が必要です。SSL/TLS 証明書の詳細は Red Hat Quay コンテナーへの TLS 証明書の追加 を参照してください。
Amazon Webservice (AWS) S3 ストレージを使用している場合は、ビルダーを実行する前に、AWS コンソールでストレージバケットを変更する必要があります。必要なパラメーターは、次のセクションの「AWS S3 ストレージバケットの変更」を参照してください。
5.2.2.1. 仮想ビルダー向けの OpenShift Container Platform の準備 リンクのコピーリンクがクリップボードにコピーされました!
以下の手順を使用して、Red Hat Quay 仮想ビルダー用に OpenShift Container Platform を準備します。
- この手順は、クラスターがすでにプロビジョニングされており、Quay Operator が実行されていることを前提とします。
- この手順は、OpenShift Container Platform で仮想 namespace を設定するためのものです。
手順
- クラスター管理者アカウントを使用して Red Hat Quay クラスターにログインします。
次のコマンドを実行して、仮想ビルダーが実行される新しいプロジェクト (
virtual-builders
など) を作成します。oc new-project virtual-builders
$ oc new-project virtual-builders
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 次のコマンドを入力して、ビルドの実行に使用されるプロジェクトに
ServiceAccount
を作成します。oc create sa -n virtual-builders quay-builder
$ oc create sa -n virtual-builders quay-builder
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 作成したサービスアカウントに編集権限を付与して、ビルドを実行できるようにします。
oc adm policy -n virtual-builders add-role-to-user edit system:serviceaccount:virtual-builders:quay-builder
$ oc adm policy -n virtual-builders add-role-to-user edit system:serviceaccount:virtual-builders:quay-builder
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 次のコマンドを入力して、Quay ビルダーに
anyuid scc
権限を付与します。oc adm policy -n virtual-builders add-scc-to-user anyuid -z quay-builder
$ oc adm policy -n virtual-builders add-scc-to-user anyuid -z quay-builder
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 注記このアクションには、クラスター管理者特権が必要です。非特権ビルドまたはルートレスビルドを機能させるには、ビルダーを Podman ユーザーとして実行する必要があるため、これが必要です。
Quay ビルダーサービスアカウントのトークンを取得します。
OpenShift Container Platform 4.10 以前のバージョンを使用している場合は、以下のコマンドを入力します。
oc sa get-token -n virtual-builders quay-builder
oc sa get-token -n virtual-builders quay-builder
Copy to Clipboard Copied! Toggle word wrap Toggle overflow OpenShift Container Platform 4.11 以降を使用している場合は、以下のコマンドを入力します。
oc create token quay-builder -n virtual-builders
$ oc create token quay-builder -n virtual-builders
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 注記トークンの有効期限が切れたら、新しいトークンを要求する必要があります。必要に応じて、カスタムの有効期限を追加することもできます。たとえば、トークンを 2 週間保持するには、
--duration 20160m
と指定します。出力例
eyJhbGciOiJSUzI1NiIsImtpZCI6IldfQUJkaDVmb3ltTHZ0dGZMYjhIWnYxZTQzN2dJVEJxcDJscldSdEUtYWsifQ...
eyJhbGciOiJSUzI1NiIsImtpZCI6IldfQUJkaDVmb3ltTHZ0dGZMYjhIWnYxZTQzN2dJVEJxcDJscldSdEUtYWsifQ...
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
次のコマンドを入力してビルダールートを決定します。
oc get route -n quay-enterprise
$ oc get route -n quay-enterprise
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 出力例
NAME HOST/PORT PATH SERVICES PORT TERMINATION WILDCARD ... example-registry-quay-builder example-registry-quay-builder-quay-enterprise.apps.docs.quayteam.org example-registry-quay-app grpc edge/Redirect None ...
NAME HOST/PORT PATH SERVICES PORT TERMINATION WILDCARD ... example-registry-quay-builder example-registry-quay-builder-quay-enterprise.apps.docs.quayteam.org example-registry-quay-app grpc edge/Redirect None ...
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 次のコマンドを入力して、拡張子が .crt の自己署名 SSL/TlS 証明書を生成します。
oc extract cm/kube-root-ca.crt -n openshift-apiserver
$ oc extract cm/kube-root-ca.crt -n openshift-apiserver
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 出力例
ca.crt
ca.crt
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 次のコマンドを入力して、
ca.crt
ファイルの名前をextra_ca_cert_build_cluster.crt
に変更します。mv ca.crt extra_ca_cert_build_cluster.crt
$ mv ca.crt extra_ca_cert_build_cluster.crt
Copy to Clipboard Copied! Toggle word wrap Toggle overflow Console で設定バンドルのシークレットを見つけ、Actions
Edit Secret を選択して、適切なビルダー設定を追加します。 Copy to Clipboard Copied! Toggle word wrap Toggle overflow - 1
- ビルドルートは、OpenShift Operator の namespace の名前で
oc get route -n
を実行することにより取得されます。ルートの最後にポートを指定する必要があり、[quayregistry-cr-name]-quay-builder-[ocp-namespace].[ocp-domain-name]:443
の形式を使用する必要があります。 - 2
JOB_REGISTRATION_TIMEOUT
パラメーターの設定が低すぎると、failed to register job to build manager: rpc error: code = Unauthenticated desc = Invalid build token: Signature has expired
エラーが発生する可能性があります。このパラメーターは少なくとも 240 に設定することを推奨します。- 3
- Redis ホストにパスワードまたは SSL/TLS 証明書がある場合は、それに応じて更新する必要があります。
- 4
- 仮想ビルダーの namespace の名前と一致するように設定します (例:
virtual-builders
)。 - 5
- 早期アクセスの場合、
BUILDER_CONTAINER_IMAGE
は現在quay.io/projectquay/quay-builder:3.7.0-rc.2
です。ただし、早期アクセス期間中に変更される可能性があります。これが発生した場合は、顧客に警告が表示されます。 - 6
K8S_API_SERVER
は、oc cluster-info
を実行して取得します。- 7
- カスタム CA 証明書を手動で作成して追加する必要があります (例
K8S_API_TLS_CA: /conf/stack/extra_ca_certs/build_cluster.crt
)。 - 8
- 指定しないと、デフォルトは
5120Mi
です。 - 9
- 仮想ビルドの場合は、クラスターに十分なリソースがあることを確認する必要があります。指定しないと、デフォルトは
1000m
です。 - 10
- 指定しないと、デフォルトは
3968Mi
です。 - 11
- 指定しないと、デフォルトは
500m
です。 - 12
oc create sa
の実行時に取得します。
設定サンプル
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
5.2.2.2. SSL/TLS 証明書の手動追加 リンクのコピーリンクがクリップボードにコピーされました!
設定ツールの既知の問題のため、ビルダーを適切に実行するには、カスタム SSL/TLS 証明書を手動で追加する必要があります。次の手順を使用して、カスタム SSL/TLS 証明書を手動で追加します。
SSL/TLS 証明書の作成の詳細は、Red Hat Quay コンテナーへの TLS 証明書の追加 を参照してください。
5.2.2.2.1. 証明書の作成と署名 リンクのコピーリンクがクリップボードにコピーされました!
SSL/TLS 証明書を作成して署名するには、次の手順を実行します。
手順
認証局を作成し、証明書に署名します。詳細は、認証局の作成と証明書への署名 を参照してください。
openssl.cnf
Copy to Clipboard Copied! Toggle word wrap Toggle overflow サンプルコマンド
openssl genrsa -out rootCA.key 2048 openssl req -x509 -new -nodes -key rootCA.key -sha256 -days 1024 -out rootCA.pem openssl genrsa -out ssl.key 2048 openssl req -new -key ssl.key -out ssl.csr openssl x509 -req -in ssl.csr -CA rootCA.pem -CAkey rootCA.key -CAcreateserial -out ssl.cert -days 356 -extensions v3_req -extfile openssl.cnf
$ openssl genrsa -out rootCA.key 2048 $ openssl req -x509 -new -nodes -key rootCA.key -sha256 -days 1024 -out rootCA.pem $ openssl genrsa -out ssl.key 2048 $ openssl req -new -key ssl.key -out ssl.csr $ openssl x509 -req -in ssl.csr -CA rootCA.pem -CAkey rootCA.key -CAcreateserial -out ssl.cert -days 356 -extensions v3_req -extfile openssl.cnf
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
5.2.2.2.2. TLS の管理対象外への設定 リンクのコピーリンクがクリップボードにコピーされました!
次の手順を使用して、king:tls
を管理対象外に設定します。
手順
Red Hat Quay Registry YAML で、
kind: tls
をmanaged: false
に設定します。- kind: tls managed: false
- kind: tls managed: false
Copy to Clipboard Copied! Toggle word wrap Toggle overflow Events ページでは、適切な
config.yaml
ファイルを設定するまで変更がブロックされます。以下に例を示します。Copy to Clipboard Copied! Toggle word wrap Toggle overflow
5.2.2.2.3. 一時的なシークレットの作成 リンクのコピーリンクがクリップボードにコピーされました!
次の手順を使用して、CA 証明書の一時的なシークレットを作成します。
手順
CA 証明書のデフォルトの namespace にシークレットを作成します。
oc create secret generic -n quay-enterprise temp-crt --from-file extra_ca_cert_build_cluster.crt
$ oc create secret generic -n quay-enterprise temp-crt --from-file extra_ca_cert_build_cluster.crt
Copy to Clipboard Copied! Toggle word wrap Toggle overflow ssl.key
ファイルおよびssl.cert
ファイルのデフォルトの namespace にシークレットを作成します。oc create secret generic -n quay-enterprise quay-config-ssl --from-file ssl.cert --from-file ssl.key
$ oc create secret generic -n quay-enterprise quay-config-ssl --from-file ssl.cert --from-file ssl.key
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
5.2.2.2.4. シークレットデータの設定 YAML へのコピー リンクのコピーリンクがクリップボードにコピーされました!
次の手順を使用して、シークレットデータを config.yaml
ファイルにコピーします。
手順
-
コンソール UI の Workloads
Secrets で新しいシークレットを見つけます。 シークレットごとに、YAML ビューを見つけます。
Copy to Clipboard Copied! Toggle word wrap Toggle overflow Copy to Clipboard Copied! Toggle word wrap Toggle overflow UI で Red Hat Quay レジストリー設定バンドルのシークレットを見つけるか、以下のようなコマンドを実行してコマンドラインから見つけます。
oc get quayregistries.quay.redhat.com -o jsonpath="{.items[0].spec.configBundleSecret}{'\n'}" -n quay-enterprise
$ oc get quayregistries.quay.redhat.com -o jsonpath="{.items[0].spec.configBundleSecret}{'\n'}" -n quay-enterprise
Copy to Clipboard Copied! Toggle word wrap Toggle overflow OpenShift Container Platform コンソールで、設定バンドルのシークレットの YAML タブを選択し、作成した 2 つのシークレットからデータを追加します。
Copy to Clipboard Copied! Toggle word wrap Toggle overflow - Save をクリックします。
次のコマンドを入力して、Pod が再起動しているかどうかを確認します。
oc get pods -n quay-enterprise
$ oc get pods -n quay-enterprise
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 出力例
Copy to Clipboard Copied! Toggle word wrap Toggle overflow Red Hat Quay レジストリーが再設定されたら、次のコマンドを入力して、Red Hat Quay アプリの Pod が実行されているかどうかを確認します。
oc get pods -n quay-enterprise
$ oc get pods -n quay-enterprise
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 出力例
Copy to Clipboard Copied! Toggle word wrap Toggle overflow ブラウザーで、レジストリーエンドポイントにアクセスし、証明書が適切に更新されていることを確認します。以下に例を示します。
Common Name (CN) example-registry-quay-quay-enterprise.apps.docs.quayteam.org Organisation (O) DOCS Organisational Unit (OU) QUAY
Common Name (CN) example-registry-quay-quay-enterprise.apps.docs.quayteam.org Organisation (O) DOCS Organisational Unit (OU) QUAY
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
5.2.2.3. UI を使用してビルドトリガーを作成 リンクのコピーリンクがクリップボードにコピーされました!
UI を使用してビルドトリガーを作成するには、次の手順に従います。
手順
- Red Hat Quay リポジトリーにログインします。
-
Create New Repository をクリックして、
testrepo
などの新しいレジストリーを作成します。 Repositories ページで、ナビゲーションペインの Builds タブをクリックします。または、対応する URL を直接使用します。
https://example-registry-quay-quay-enterprise.apps.docs.quayteam.org/repository/quayadmin/testrepo?tab=builds
https://example-registry-quay-quay-enterprise.apps.docs.quayteam.org/repository/quayadmin/testrepo?tab=builds
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 重要場合によっては、ビルダーでホスト名の解決に問題が発生することがあります。この問題は、ジョブオブジェクトで
default
に設定されているdnsPolicy
に関連している可能性があります。現在、この問題に対する回避策はありません。これは、Red Hat Quay の将来のバージョンで解決される予定です。-
Create Build Trigger
Custom Git Repository Push をクリックします。 Git リポジトリーのクローン作成に使用する HTTPS または SSH スタイルの URL を入力し、Continue をクリックします。以下に例を示します。
https://github.com/gabriel-rh/actions_test.git
https://github.com/gabriel-rh/actions_test.git
Copy to Clipboard Copied! Toggle word wrap Toggle overflow - Tag manifest with the branch or tag name を確認し、Continue をクリックします。
-
トリガーが呼び出されたときにビルドする Dockerfile の場所 (たとえば
/Dockerfile
) を入力し、Continue をクリックします。 -
Docker ビルドのコンテキストの場所 (たとえば
/
) を入力し、Continue をクリックします。 - 必要に応じて、ロボットアカウントを作成します。それ以外の場合は、Continue をクリックします。
- Continue をクリックして、パラメーターを確認します。
- Builds ページで、トリガー名の Options アイコンをクリックし、Run Trigger Now をクリックします。
- Git リポジトリーからコミット SHA を入力し、Start Build をクリックします。
ビルドのステータスを確認するには、Build History ページで commit をクリックするか、
oc get pods -n virtual-builders
を実行します。以下に例を示します。oc get pods -n virtual-builders
$ oc get pods -n virtual-builders
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 出力例
NAME READY STATUS RESTARTS AGE f192fe4a-c802-4275-bcce-d2031e635126-9l2b5-25lg2 1/1 Running 0 7s
NAME READY STATUS RESTARTS AGE f192fe4a-c802-4275-bcce-d2031e635126-9l2b5-25lg2 1/1 Running 0 7s
Copy to Clipboard Copied! Toggle word wrap Toggle overflow oc get pods -n virtual-builders
$ oc get pods -n virtual-builders
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 出力例
NAME READY STATUS RESTARTS AGE f192fe4a-c802-4275-bcce-d2031e635126-9l2b5-25lg2 1/1 Terminating 0 9s
NAME READY STATUS RESTARTS AGE f192fe4a-c802-4275-bcce-d2031e635126-9l2b5-25lg2 1/1 Terminating 0 9s
Copy to Clipboard Copied! Toggle word wrap Toggle overflow oc get pods -n virtual-builders
$ oc get pods -n virtual-builders
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 出力例
No resources found in virtual-builders namespace.
No resources found in virtual-builders namespace.
Copy to Clipboard Copied! Toggle word wrap Toggle overflow ビルドが完了したら、ナビゲーションペインのタグで Tags のステータスを確認できます。
注記早期アクセスにより、完全なビルドログとビルドのタイムスタンプは現在利用できません。
5.2.2.4. AWS S3 ストレージバケットの変更 リンクのコピーリンクがクリップボードにコピーされました!
現在、AWS S3 ストレージバケットの変更は、IBM Power および IBM Z ではサポートされていません。
AWS S3 ストレージを使用している場合は、ビルダーを実行する前に、AWS コンソールでストレージバケットを変更する必要があります。
手順
- s3.console.aws.com で AWS コンソールにログインします。
-
検索バーで
S3
を検索し、S3 をクリックします。 -
バケットの名前 (
myawsbucket
など) をクリックします。 - Permissions タブをクリックします。
Cross-origin resource sharing (CORS) の下に、次のパラメーターを含めます。
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
5.2.2.5. Google Cloud Platform オブジェクトバケットの変更 リンクのコピーリンクがクリップボードにコピーされました!
現在、Google Cloud Platform オブジェクトバケットの変更は、IBM Power および IBM Z ではサポートされていません。
仮想ビルダーの Cross Origin Resource Sharing (CORS) を設定するには、次の手順を実行します。
CORS 設定がないと、ビルド Dockerfile のアップロードは失敗します。
手順
次のリファレンスを使用して、特定の CORS ニーズに合わせた JSON ファイルを作成します。以下に例を示します。
cat gcp_cors.json
$ cat gcp_cors.json
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 出力例
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 次のコマンドを入力して、GCP ストレージバケットを更新します。
gcloud storage buckets update gs://<bucket_name> --cors-file=./gcp_cors.json
$ gcloud storage buckets update gs://<bucket_name> --cors-file=./gcp_cors.json
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 出力例
Updating Completed 1
Updating Completed 1
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 次のコマンドを実行すると、GCP バケットの更新された CORS 設定を表示できます。
gcloud storage buckets describe gs://<bucket_name> --format="default(cors)"
$ gcloud storage buckets describe gs://<bucket_name> --format="default(cors)"
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 出力例
Copy to Clipboard Copied! Toggle word wrap Toggle overflow