4.2. Red Hat Quay on OpenShift Container Platform の仮想ビルドの設定
このセクションの手順では、OpenShift Container Platform 上で Red Hat Quay の 仮想ビルド 環境を作成する方法を説明します。
- Amazon Web Service (AWS) S3 ストレージを使用している場合は、ビルダーを実行する前に、AWS コンソールでストレージバケットを変更する必要があります。必要なパラメーターは、次のセクションの「AWS S3 ストレージバケットの変更」を参照してください。
- Google Cloud Platform (GCP) オブジェクトバケットを使用している場合は、仮想ビルド を有効にするために、クロスオリジンリソース共有 (CORS) を設定する必要があります。
前提条件
- Red Hat Quay Operator が実行されている状態でプロビジョニングされた OpenShift Container Platform クラスターがある。
-
tls
コンポーネントをunmanaged
に設定し、カスタム SSL/TLS 証明書を Red Hat Quay Operator にアップロードしている。詳細は、Red Hat Quay の SSL および TLS を参照してください。 - ビルド用に OpenShift Container Platform TLS コンポーネントを設定している。
- クラスター管理者として OpenShift Container Platform にログインしている。
手順
次のコマンドを実行して、仮想ビルダーが実行される新しいプロジェクト (
virtual-builders
など) を作成します。$ oc new-project virtual-builders
次のコマンドを入力して、ビルド の実行に使用されるプロジェクトに
ServiceAccount
を作成します。$ oc create sa -n virtual-builders quay-builder
出力例
serviceaccount/quay-builder created
作成されたサービスアカウントに編集権限を付与して、ビルド を実行できるようにします。
$ oc adm policy -n virtual-builders add-role-to-user edit system:serviceaccount:virtual-builders:quay-builder
出力例
clusterrole.rbac.authorization.k8s.io/edit added: "system:serviceaccount:virtual-builders:quay-builder"
次のコマンドを入力して、ビルダー ワーカーに
anyuid scc
権限を付与します。これにはクラスター管理者権限が必要です。これは、権限のないビルドまたはルートレスビルドが機能するためには、ビルダー を Podman ユーザーとして実行する必要があるために必要です。$ oc adm policy -n virtual-builders add-scc-to-user anyuid -z quay-builder
出力例
clusterrole.rbac.authorization.k8s.io/system:openshift:scc:anyuid added: "quay-builder"
次のコマンドを入力して、builder サービスアカウントのトークンを取得します。
$ oc create token quay-builder -n virtual-builders
注記トークンの有効期限が切れたら、新しいトークンを要求する必要があります。必要に応じて、カスタムの有効期限を追加することもできます。たとえば、トークンを 2 週間保持するには、
--duration 20160m
と指定します。出力例
eyJhbGciOiJSUzI1NiIsImtpZCI6IldfQUJkaDVmb3ltTHZ0dGZMYjhIWnYxZTQzN2dJVEJxcDJscldSdEUtYWsifQ...
次のコマンドを入力して、ビルダー ルートを決定します。
$ oc get route -n quay-enterprise
出力例
NAME: example-registry-quay-builder HOST/PORT: example-registry-quay-builder-quay-enterprise.apps.stevsmit-cluster-new.gcp.quaydev.org PATH: SERVICES: example-registry-quay-app PORT: grpc TERMINATION: passthrough/Redirect WILDCARD: None
次のコマンドを入力して、
.crt
エクステンションを持つ自己署名 SSL/TLS 証明書を生成します。$ oc extract cm/kube-root-ca.crt -n openshift-apiserver
出力例
ca.crt
次のコマンドを入力して、
ca.crt
ファイルの名前をbuild-cluster.crt
に変更します。$ mv ca.crt build-cluster.crt
OpenShift Container Platform Web コンソールを使用して、Red Hat Quay on OpenShift Container Platform デプロイメントの
config.yaml
ファイルを更新し、適切な 仮想ビルド 設定を含めます。-
Operators
Installed Operators Red Hat Quay Quay Registry をクリックします。 - レジストリーの名前 (例: example-registry) をクリックします。
- Config Bundle Secret の下で、設定バンドルの名前 (例: extra-ca-certificate-config-bundle-secret) をクリックします。
-
Actions
Edit Secret をクリックします。 以下を参考にして適切な 仮想ビルド 設定を追加します。
FEATURE_USER_INITIALIZE: true BROWSER_API_CALLS_XHR_ONLY: false SUPER_USERS: - <superusername> FEATURE_USER_CREATION: false FEATURE_QUOTA_MANAGEMENT: true FEATURE_BUILD_SUPPORT: True BUILDMAN_HOSTNAME: <sample_build_route> 1 BUILD_MANAGER: - ephemeral - ALLOWED_WORKER_COUNT: 1 ORCHESTRATOR_PREFIX: buildman/production/ JOB_REGISTRATION_TIMEOUT: 3600 2 ORCHESTRATOR: REDIS_HOST: <sample_redis_hostname> 3 REDIS_PASSWORD: "" REDIS_SSL: false REDIS_SKIP_KEYSPACE_EVENT_SETUP: false EXECUTORS: - EXECUTOR: kubernetesPodman NAME: openshift BUILDER_NAMESPACE: <sample_builder_namespace> 4 SETUP_TIME: 180 MINIMUM_RETRY_THRESHOLD: 0 BUILDER_CONTAINER_IMAGE: quay.io/projectquay/quay-builder:{producty} # Kubernetes resource options K8S_API_SERVER: <sample_k8s_api_server> 5 K8S_API_TLS_CA: <sample_crt_file> 6 VOLUME_SIZE: 8G KUBERNETES_DISTRIBUTION: openshift CONTAINER_MEMORY_LIMITS: 1G 7 CONTAINER_CPU_LIMITS: 300m 8 CONTAINER_MEMORY_REQUEST: 1G 9 CONTAINER_CPU_REQUEST: 300m 10 NODE_SELECTOR_LABEL_KEY: "" NODE_SELECTOR_LABEL_VALUE: "" SERVICE_ACCOUNT_NAME: <sample_service_account_name> SERVICE_ACCOUNT_TOKEN: <sample_account_token> 11 HTTP_PROXY: <http://10.0.0.1:80> HTTPS_PROXY: <http://10.0.0.1:80> NO_PROXY: <hostname.example.com>
- 1
- ビルドルートは、OpenShift Container Platform デプロイメント上の Red Hat Quay の 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
K8S_API_SERVER
は、$ oc cluster-info
を実行して取得します。- 6
- カスタム CA 証明書を手動で作成して追加する必要があります (例
K8S_API_TLS_CA: /conf/stack/extra_ca_certs/build-cluster.crt
)。 - 7
- 指定しないと、デフォルトは
5120Mi
です。 - 8
- 仮想ビルド の場合、クラスター内に十分なリソースがあることを確認する必要があります。指定しないと、デフォルトは
1000m
です。 - 9
- 指定しないと、デフォルトは
3968Mi
です。 - 10
- 指定しないと、デフォルトは
500m
です。 - 11
$ oc create sa
の実行時に取得します。
仮想ビルド 設定の例
FEATURE_USER_INITIALIZE: true BROWSER_API_CALLS_XHR_ONLY: false SUPER_USERS: - quayadmin FEATURE_USER_CREATION: false FEATURE_QUOTA_MANAGEMENT: true FEATURE_BUILD_SUPPORT: True BUILDMAN_HOSTNAME: example-registry-quay-builder-quay-enterprise.apps.docs.quayteam.org:443 BUILD_MANAGER: - ephemeral - ALLOWED_WORKER_COUNT: 1 ORCHESTRATOR_PREFIX: buildman/production/ JOB_REGISTRATION_TIMEOUT: 3600 ORCHESTRATOR: REDIS_HOST: example-registry-quay-redis REDIS_PASSWORD: "" REDIS_SSL: false REDIS_SKIP_KEYSPACE_EVENT_SETUP: false EXECUTORS: - EXECUTOR: kubernetesPodman NAME: openshift BUILDER_NAMESPACE: virtual-builders SETUP_TIME: 180 MINIMUM_RETRY_THRESHOLD: 0 BUILDER_CONTAINER_IMAGE: quay.io/projectquay/quay-builder:{producty} # Kubernetes resource options K8S_API_SERVER: api.docs.quayteam.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: "" NODE_SELECTOR_LABEL_VALUE: "" SERVICE_ACCOUNT_NAME: quay-builder SERVICE_ACCOUNT_TOKEN: "eyJhbGciOiJSUzI1NiIsImtpZCI6IldfQUJkaDVmb3ltTHZ0dGZMYjhIWnYxZTQzN2dJVEJxcDJscldSdEUtYWsifQ" HTTP_PROXY: <http://10.0.0.1:80> HTTPS_PROXY: <http://10.0.0.1:80> NO_PROXY: <hostname.example.com>
- Edit Secret ページで Save をクリックします。
-
Operators
- 新しい設定を使用して、OpenShift Container Platform レジストリー上の Red Hat Quay を再起動します。
4.2.1. AWS S3 ストレージバケットの変更
AWS S3 ストレージを使用している場合は、ビルド を開始する前に AWS コンソールでストレージバケットを変更する必要があります。
手順
- s3.console.aws.com で AWS コンソールにログインします。
-
検索バーで
S3
を検索し、S3 をクリックします。 -
バケットの名前 (
myawsbucket
など) をクリックします。 - Permissions タブをクリックします。
Cross-origin resource sharing (CORS) の下に、次のパラメーターを含めます。
[ { "AllowedHeaders": [ "Authorization" ], "AllowedMethods": [ "GET" ], "AllowedOrigins": [ "*" ], "ExposeHeaders": [], "MaxAgeSeconds": 3000 }, { "AllowedHeaders": [ "Content-Type", "x-amz-acl", "origin" ], "AllowedMethods": [ "PUT" ], "AllowedOrigins": [ "*" ], "ExposeHeaders": [], "MaxAgeSeconds": 3000 } ]
4.2.2. Google Cloud Platform オブジェクトバケットの変更
現在、Google Cloud Platform オブジェクトバケットの変更は、IBM Power および IBM Z ではサポートされていません。
仮想ビルダーの CORS (Cross-Origin Resource Sharing) を設定するには、次の手順を実行します。CORS 設定がないと、ビルド Dockerfile のアップロードは失敗します。
手順
次のリファレンスを使用して、特定の CORS ニーズに合わせた JSON ファイルを作成します。以下に例を示します。
$ cat gcp_cors.json
出力例
[ { "origin": ["*"], "method": ["GET"], "responseHeader": ["Authorization"], "maxAgeSeconds": 3600 }, { "origin": ["*"], "method": ["PUT"], "responseHeader": [ "Content-Type", "x-goog-acl", "origin"], "maxAgeSeconds": 3600 } ]
次のコマンドを入力して、GCP ストレージバケットを更新します。
$ gcloud storage buckets update gs://<bucket_name> --cors-file=./gcp_cors.json
出力例
Updating Completed 1
次のコマンドを実行すると、GCP バケットの更新された CORS 設定を表示できます。
$ gcloud storage buckets describe gs://<bucket_name> --format="default(cors)"
出力例
cors: - maxAgeSeconds: 3600 method: - GET origin: - '*' responseHeader: - Authorization - maxAgeSeconds: 3600 method: - PUT origin: - '*' responseHeader: - Content-Type - x-goog-acl - origin