第3章 Red Hat Quay on OpenShift Container Platform を使用したベアメタルビルド
このセクションの手順では、OpenShift Container Platform 上で Red Hat Quay の ベアメタルビルド 環境を作成する方法を説明します。
3.1. Red Hat Quay on OpenShift Container Platform のベアメタルビルドの設定 リンクのコピーリンクがクリップボードにコピーされました!
Red Hat Quay on OpenShift Container Platform の ベアメタルビルド を設定するには、次の手順に従います。
QuayRegistry CRD でマネージド route コンポーネントを使用して Red Hat Quay Operator on OpenShift Container Platform を使用している場合は、「自己管理 ルート を使用した Red Hat Quay on OpenShift Container Platform ビルド 制限」を参照してください。
前提条件
- Red Hat Quay Operator が実行されている状態でプロビジョニングされた OpenShift Container Platform クラスターがある。
-
tlsコンポーネントをunmanagedに設定し、カスタム SSL/TLS 証明書を Red Hat Quay Operator にアップロードしている。詳細は、Red Hat Quay の SSL および TLS を参照してください。 - クラスター管理者として OpenShift Container Platform にログインしている。
手順
ビルドが実行されるプロジェクト (例:
bare-metal-builder) を作成するには、次のコマンドを入力します。$ oc new-project bare-metal-builder次のコマンドを入力して、
bare-metal-buildernamespace に新しいServiceAccountを作成します。$ oc create sa -n bare-metal-builder quay-builder次のコマンドを入力して、ユーザーに
bare-metal-buildernamespace 内でのeditロールを付与します。$ oc policy add-role-to-user -n bare-metal-builder edit system:serviceaccount:bare-metal-builder:quay-builder次のコマンドを入力して、
bare-metal-buildernamespace のquay-builderサービスアカウントに関連付けられたトークンを取得します。このトークンは、OpenShift Container Platform クラスターの API サーバーの認証と対話に使用されます。OpenShift Container Platform クラスターのバージョンが 4.11 以上の場合は、次のコマンドを入力します。
oc create token quay-builder -n bare-metal-builder --duration 24hOpenShift Container Platform クラスターがバージョン 4.11 より前 (たとえばバージョン 4.10) の場合は、次のコマンドを入力します。
$ oc sa get-token -n bare-metal-builder quay-builder
- OpenShift Container Platform クラスターの API サーバーの URL を特定します。これは、OpenShift Container Platform Web コンソールで確認できます。
ビルドジョブ をスケジュールするときに使用するワーカーノードラベルを識別します。ビルド Pod はベアメタルワーカーノード上で実行する必要があるため、これらは通常、特定のラベルで識別されます。
どのノードラベルを使用すべきかは、クラスター管理者に確認してください。
Red Hat Quay の追加証明書に追加するには、Kube API Server の認証局 (CA) を取得します。
OpenShift Container Platform バージョン 4.15 以降では、次のコマンドを入力して、CA を含むシークレットの名前を取得します。
$ oc extract cm/kube-root-ca.crt -n openshift-apiserver$ mv ca.crt build_cluster.crtOpenShift Container Platform バージョン 4.15 より前 (例: 4.14) の場合は、次のコマンドを入力します。
$ 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 にインポートします。このファイルの名前が、手順 9 で使用した
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: bare-metal-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: bare-metal-builder subjects: - kind: ServiceAccount name: quay-builder roleRef: apiGroup: rbac.authorization.k8s.io kind: Role name: quay-builder-sccOpenShift 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 をクリックします。 以下の情報を Red Hat Quay の
config.yamlファイルに追加し、各値をお客様のインストールに関連する情報に置き換えます。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: ${BUILDMAN_HOSTNAME}:4431 BUILD_MANAGER: - ephemeral - ALLOWED_WORKER_COUNT: 10 ORCHESTRATOR_PREFIX: buildman/production/ ORCHESTRATOR: REDIS_HOST: <sample_redis_hostname>2 REDIS_PASSWORD: "" REDIS_SSL: false REDIS_SKIP_KEYSPACE_EVENT_SETUP: false EXECUTORS: - EXECUTOR: kubernetes BUILDER_NAMESPACE: <sample_builder_namespace>3 K8S_API_SERVER: <sample_k8s_api_server>4 K8S_API_TLS_CA: <sample_crt_file>5 VOLUME_SIZE: 8G KUBERNETES_DISTRIBUTION: openshift CONTAINER_MEMORY_LIMITS: 1G6 CONTAINER_CPU_LIMITS: 300m7 CONTAINER_MEMORY_REQUEST: 1G8 CONTAINER_CPU_REQUEST: 300m9 NODE_SELECTOR_LABEL_KEY: beta.kubernetes.io/instance-type NODE_SELECTOR_LABEL_VALUE: n1-standard-4 CONTAINER_RUNTIME: podman SERVICE_ACCOUNT_NAME: <sample_service_account_name> SERVICE_ACCOUNT_TOKEN: <sample_account_token>10 QUAY_USERNAME: <quay_username> QUAY_PASSWORD: <quay_password> WORKER_IMAGE: <registry>/quay-quay-builder WORKER_TAG: <some_tag> BUILDER_VM_CONTAINER_IMAGE: registry.redhat.io/quay/quay-builder-qemu-rhcos-rhel8:v3.9.10-4 SETUP_TIME: 180 MINIMUM_RETRY_THRESHOLD: 0 SSH_AUTHORIZED_KEYS:11 - <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>- 1
- 次のコマンドを実行して取得します:
$ oc get route quayregistry-quay-builder -n ${QUAY_PROJECT} -o jsonpath='{.spec.host}' - 2
- Redis サービスのホスト名。
- 3
- ベアメタルビルド namespace の名前と一致するように設定します。この例では
bare-metal-builderを使用しました。 - 4
K8S_API_SERVERは、$ oc cluster-infoを実行して取得します。- 5
- カスタム CA 証明書を手動で作成して追加する必要があります (例
K8S_API_TLS_CA: /conf/stack/extra_ca_certs/build-cluster.crt)。 - 6
- 指定しないと、デフォルトは
5120Miです。 - 7
- 指定しないと、デフォルトは
1000mです。 - 8
- 指定しないと、デフォルトは
3968Miです。 - 9
- 指定しないと、デフォルトは
500mです。 - 10
$ oc create saの実行時に取得します。- 11
- リモートトラブルシューティングアクセス用に、ビルド環境に公開 SSH キーを追加できるようにします。このキーは、管理者または開発者がデバッグの目的でビルドワーカーに SSH 接続するために使用する秘密鍵に対応している必要があります。このキーは、特定の SSH キーとポートを使用してリモートホストへの SSH 接続を確立することによって取得できます。例:
$ ssh -i /path/to/ssh/key/set/in/ssh_authorized_keys -p 9999 core@localhost
-
Operators
- ビルド 機能を有効にするには、Red Hat Quay レジストリーを再起動します。
3.1.1. 自己管理 ルート を使用した Red Hat Quay on OpenShift Container Platform ビルド 制限 リンクのコピーリンクがクリップボードにコピーされました!
OpenShift Container Platform 上で Red Hat Quay Operator をマネージド route コンポーネントとともに使用する場合、次の制限が適用されます。
- 現在、OpenShift Container Platform の ルート は、単一ポートへのトラフィックのみを処理できます。Red Hat Quay ビルドをセットアップするには追加の手順が必要です。
-
Red Hat Quay Operator がインストールされているクラスターで
kubectlまたはocCLI ツールが動作するように設定されていること、およびQuayRegistryが存在することを確認します。QuayRegistryは、ビルダー が実行されるのと同じベアメタルクラスター上にある必要はありません。 - こちらの手順 に従って、OpenShift クラスター上で HTTP/2 ingress が有効になっていることを確認します。
Red Hat Quay Operator は、既存の
QuayPod 内で実行されているビルドマネージャーサーバーに gRPC トラフィックを送信するRouteリソースを作成します。カスタムホスト名、または<builder-registry.example.com>などのサブドメインを使用する場合は、作成したRouteリソースのstatus.ingress[0].hostを参照する DNS プロバイダーで CNAME レコードを作成してください。以下に例を示します。$ kubectl get -n <namespace> route <quayregistry-name>-quay-builder -o jsonpath={.status.ingress[0].host}OpenShift Container Platform UI または CLI を使用して、
QuayRegistryのspec.configBundleSecretによって参照されるSecretを ビルド クラスター CA 証明書で更新します。キーにextra_ca_cert_build_cluster.certという名前を付けます。Red Hat Quay ビルド の設定時に作成した ビルド 設定で参照されている正しい値でconfig.yamlファイルのエントリーを更新し、BUILDMAN_HOSTNAMECONFIGURATION FIELD を追加します。BUILDMAN_HOSTNAME: <build-manager-hostname>1 BUILD_MANAGER: - ephemeral - ALLOWED_WORKER_COUNT: 1 ORCHESTRATOR_PREFIX: buildman/production/ JOB_REGISTRATION_TIMEOUT: 600 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 ...- 1
- ビルドジョブ が ビルドマネージャー と通信するために使用する、外部からアクセス可能なサーバーホスト名です。デフォルトは
SERVER_HOSTNAMEと同じです。OpenShiftrouteリソースの場合、これはstatus.ingress[0].hostか、カスタムホスト名を使用している場合は CNAME エントリーのいずれかになります。BUILDMAN_HOSTNAMEには、ポート番号を含める必要があります (例: OpenShift Container Platformrouteの場合はsomehost:443)。これは、ビルドマネージャー との通信に使用される gRPC クライアントが、ポートを省略すると推測しないためです。