第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 にログインしている。

手順

  1. ビルドが実行されるプロジェクト (例: bare-metal-builder) を作成するには、次のコマンドを入力します。

    $ oc new-project bare-metal-builder
  2. 次のコマンドを入力して、bare-metal-builder namespace に新しい ServiceAccount を作成します。

    $ oc create sa -n bare-metal-builder quay-builder
  3. 次のコマンドを入力して、ユーザーに bare-metal-builder namespace 内での edit ロールを付与します。

    $ oc policy add-role-to-user -n bare-metal-builder edit system:serviceaccount:bare-metal-builder:quay-builder
  4. 次のコマンドを入力して、bare-metal-builder namespace の quay-builder サービスアカウントに関連付けられたトークンを取得します。このトークンは、OpenShift Container Platform クラスターの API サーバーの認証と対話に使用されます。

    1. OpenShift Container Platform クラスターのバージョンが 4.11 以上の場合は、次のコマンドを入力します。

      oc create token quay-builder  -n bare-metal-builder --duration 24h
    2. OpenShift Container Platform クラスターがバージョン 4.11 より前 (たとえばバージョン 4.10) の場合は、次のコマンドを入力します。

      $ oc sa get-token -n bare-metal-builder quay-builder
  5. OpenShift Container Platform クラスターの API サーバーの URL を特定します。これは、OpenShift Container Platform Web コンソールで確認できます。
  6. ビルドジョブ をスケジュールするときに使用するワーカーノードラベルを識別します。ビルド Pod はベアメタルワーカーノード上で実行する必要があるため、これらは通常、特定のラベルで識別されます。

    どのノードラベルを使用すべきかは、クラスター管理者に確認してください。

  7. Red Hat Quay の追加証明書に追加するには、Kube API Server の認証局 (CA) を取得します。

    1. OpenShift Container Platform バージョン 4.15 以降では、次のコマンドを入力して、CA を含むシークレットの名前を取得します。

      $ oc extract cm/kube-root-ca.crt -n openshift-apiserver
      $ mv ca.crt build_cluster.crt
    2. OpenShift 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
    3. OpenShift Container Platform Web コンソールで、シークレットから ca.crt キーの値を取得します。値は "-----BEGIN CERTIFICATE-----"` で始まります。
    4. CA を Red Hat Quay にインポートします。このファイルの名前が、手順 9 で使用した K8S_API_TLS_CA フィールドと一致していることを確認します。
  8. 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-scc
  9. OpenShift Container Platform Web コンソールを使用して、Red Hat Quay on OpenShift Container Platform デプロイメントの config.yaml ファイルを更新し、適切な ベアメタルビルド 設定を含めます。

    1. Operators Installed Operators Red Hat Quay Quay Registry をクリックします。
    2. レジストリーの名前 (例: example-registry) をクリックします。
    3. Config Bundle Secret の下で、設定バンドルの名前 (例: extra-ca-certificate-config-bundle-secret) をクリックします。
    4. Actions Edit Secret をクリックします。
    5. 以下の情報を 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}:443 1
      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: 1G 6
          CONTAINER_CPU_LIMITS: 300m 7
          CONTAINER_MEMORY_REQUEST: 1G 8
          CONTAINER_CPU_REQUEST: 300m 9
          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: quay.io/quay/quay-builder-qemu-fedoracoreos:latest
          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
  10. ビルド 機能を有効にするには、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 または oc CLI ツールが動作するように設定されていること、および QuayRegistry が存在することを確認します。QuayRegistry は、ビルダー が実行されるのと同じベアメタルクラスター上にある必要はありません。
  • こちらの手順 に従って、OpenShift クラスター上で HTTP/2 ingress が有効になっていることを確認します。
  • Red Hat Quay Operator は、既存の Quay Pod 内で実行されているビルドマネージャーサーバーに 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 を使用して、QuayRegistryspec.configBundleSecret によって参照される Secretビルド クラスター CA 証明書で更新します。キーに extra_ca_cert_build_cluster.cert という名前を付けます。Red Hat Quay ビルド の設定時に作成した ビルド 設定で参照されている正しい値で config.yaml ファイルのエントリーを更新し、BUILDMAN_HOSTNAME CONFIGURATION 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 と同じです。OpenShift route リソースの場合、これは status.ingress[0].host か、カスタムホスト名を使用している場合は CNAME エントリーのいずれかになります。BUILDMAN_HOSTNAME には、ポート番号を含める必要があります (例: OpenShift Container Platform route の場合は somehost:443)。これは、ビルドマネージャー との通信に使用される gRPC クライアントが、ポートを省略すると推測しないためです。
Red Hat logoGithubRedditYoutubeTwitter

詳細情報

試用、購入および販売

コミュニティー

Red Hat ドキュメントについて

Red Hat をお使いのお客様が、信頼できるコンテンツが含まれている製品やサービスを活用することで、イノベーションを行い、目標を達成できるようにします。

多様性を受け入れるオープンソースの強化

Red Hat では、コード、ドキュメント、Web プロパティーにおける配慮に欠ける用語の置き換えに取り組んでいます。このような変更は、段階的に実施される予定です。詳細情報: Red Hat ブログ.

会社概要

Red Hat は、企業がコアとなるデータセンターからネットワークエッジに至るまで、各種プラットフォームや環境全体で作業を簡素化できるように、強化されたソリューションを提供しています。

© 2024 Red Hat, Inc.