1.7. ホステッドコントロールプレーン (テクノロジープレビュー)


マルチクラスターエンジン Operator クラスター管理では、スタンドアロンまたはホステッドコントロールプレーンの 2 つの異なるコントロールプレーン設定を使用して、OpenShift Container Platform クラスターをデプロイできます。スタンドアロン設定では、専用の仮想マシンまたは物理マシンを使用して、OpenShift Container Platform のコントロールプレーンをホストします。OpenShift Container Platform の Hosted Control Plane を使用すると、コントロールプレーンごとに専用の物理マシンを必要とせずに、ホスティングクラスター上にコントロールプレーンを Pod として作成できます。

OpenShift Container Platform ホステッドコントロールプレーンは、Amazon Web Services (AWS)、ベアメタル環境、および Red Hat OpenShift Virtualization のテクノロジープレビュー機能として利用できます。コントロールプレーンは、OpenShift Container Platform バージョン 4.13 以降でホスティングできます。

注記: Hosted Control Plane の同じプラットフォームで、ハブクラスターとワーカーを実行します。

コントロールプレーンは、単一の namespace に含まれる Pod として実行され、Hosted Control Plane クラスターに関連付けられます。OpenShift Container Platform がこのタイプのホステッドクラスターを作成すると、コントロールプレーンから独立したワーカーノードが作成されます。

Hosted Control Plane クラスターには、いくつかの利点があります。

  • 専用コントロールプレーンノードをホストする必要がなくなるため、コストを節約できます。
  • コントロールプレーンとワークロードを分離することで、分離が改善され、変更が必要になる設定エラーが減少します。
  • コントロールプレーンノードのブートストラップの要件をなくすことで、クラスターの作成時間を短縮します。
  • ターンキーデプロイメントまたは完全にカスタマイズされた OpenShift Container Platform プロビジョニングをサポートします。

OpenShift Container Platform バージョン 4.12.9 以降でテストされた、次の高可用性ホステッドコントロールプレーン要件を参照してください。

  • 78 pods
  • Etcd の場合は 3 つの 4 Gi PV、OVN の場合は 3 つの 1 Gi PV
  • 最小 CPU: 約 5.5 コア
  • 最小メモリー: 約 19 GB

ホステッドコントロールプレーンの詳細については、以下のトピックを参照してください。

1.7.1. AWS でのホスティングクラスターの設定 (テクノロジープレビュー)

Hosted control plane を設定するには、ホスティングクラスターとホステッドクラスターが必要です。hypershift-addon マネージドクラスターアドオンを使用して既存のマネージドクラスターに HyperShift Operator をデプロイすることにより、そのクラスターをホスティングクラスターとして有効にして、ホステッドクラスターを作成し始めることができます。

マルチクラスターエンジン Operator 2.4 は、デフォルトの local-cluster とハブクラスターのみをホスティングクラスターとしてサポートします。

ホステッドコントロールプレーンはテクノロジープレビュー機能であるため、関連コンポーネントはデフォルトで無効になっています。

既存のクラスターをホスティングクラスターとして機能するように設定することで、Hosted control plane をデプロイできます。ホスティングクラスターは、コントロールプレーンがホストされている Red Hat OpenShift Container Platform クラスターです。Red Hat Advanced Cluster Management 2.9 は、local-cluster とも呼ばれるハブクラスターをホスティングクラスターとして使用できます。local-cluster をホスティングクラスターとして設定する方法については、次のトピックを参照してください。

ベストプラクティス: ホステッドコントロールプレーンでは、必ず同じプラットフォームでハブクラスターとワーカーを実行してください。

1.7.1.1. 前提条件

ホスティングクラスターを設定するには、次の前提条件を満たす必要があります。

  • OpenShift Container Platform クラスターにインストールされた Kubernetes Operator 2.5 以降のマルチクラスターエンジン。マルチクラスターエンジン Operator は、Red Hat Advanced Cluster Management をインストールすると自動的にインストールされます。マルチクラスターエンジン Operator は、Red Hat Advanced Cluster Management を使用せずに OpenShift Container Platform OperatorHub から Operator としてインストールすることもできます。
  • マルチクラスターエンジン Operator には、少なくとも 1 つのマネージド OpenShift Container Platform クラスターが必要です。multicluster engine Operator バージョン 2.5 以降では、local-cluster が自動的にインポートされます。local-cluster の詳細については、詳細設定 を参照してください。次のコマンドを実行して、ハブクラスターの状態を確認できます。

    oc get managedclusters local-cluster
    Copy to Clipboard Toggle word wrap
  • HyperShift Operator を実行するための少なくとも 3 つのワーカーノードを含むホスティングクラスター。
  • AWS コマンドラインインターフェイス。

1.7.1.2. Amazon Web Services S3 バケットと S3 OIDC シークレットの作成

AWS でホステッドクラスターを作成および管理する予定の場合は、次の手順を実行します。

  1. クラスターの OIDC 検出ドキュメントをホストするためのパブリックアクセスを持つ S3 バケットを作成します。

    • us-east-1 リージョンにバケットを作成するには、次のコードを入力します。

      BUCKET_NAME=<your_bucket_name>
      aws s3api create-bucket --bucket $BUCKET_NAME
      aws s3api delete-public-access-block --bucket $BUCKET_NAME
      echo '{
          "Version": "2012-10-17",
          "Statement": [
              {
                  "Effect": "Allow",
                  "Principal": "*",
                  "Action": "s3:GetObject",
                  "Resource": "arn:aws:s3:::${BUCKET_NAME}/*"
              }
          ]
      }' | envsubst > policy.json
      aws s3api put-bucket-policy --bucket $BUCKET_NAME --policy file://policy.json
      Copy to Clipboard Toggle word wrap
    • us-east-1 リージョン以外のリージョンにバケットを作成するには、次のコードを入力します。

      BUCKET_NAME=your-bucket-name
      REGION=us-east-2
      aws s3api create-bucket --bucket $BUCKET_NAME \
        --create-bucket-configuration LocationConstraint=$REGION \
        --region $REGION
      aws s3api delete-public-access-block --bucket $BUCKET_NAME
      echo '{
          "Version": "2012-10-17",
          "Statement": [
              {
                  "Effect": "Allow",
                  "Principal": "*",
                  "Action": "s3:GetObject",
                  "Resource": "arn:aws:s3:::${BUCKET_NAME}/*"
              }
          ]
      }' | envsubst > policy.json
      aws s3api put-bucket-policy --bucket $BUCKET_NAME --policy file://policy.json
      Copy to Clipboard Toggle word wrap
  2. HyperShift Operator 用に hypershift-operator-oidc-provider-s3-credentials という名前の OIDC S3 シークレットを作成します。
  3. シークレットを local-cluster namespace に保存します。
  4. 次の表を参照して、シークレットに次のフィールドが含まれていることを確認します。

    Expand
    フィールド名説明

    bucket

    HyperShift クラスターの OIDC 検出ドキュメントをホストするためのパブリックアクセスを備えた S3 バケットが含まれます。

    credentials

    バケットにアクセスできる default プロファイルの認証情報を含むファイルへの参照。デフォルトでは、HyperShift は default プロファイルのみを使用して バケット を操作します。

    region

    S3 バケットのリージョンを指定します。

    次の例は、サンプルの AWS シークレットテンプレートを示しています。

    oc create secret generic hypershift-operator-oidc-provider-s3-credentials --from-file=credentials=$HOME/.aws/credentials --from-literal=bucket=<s3-bucket-for-hypershift> --from-literal=region=<region> -n local-cluster
    Copy to Clipboard Toggle word wrap

    注記: シークレットのリカバリーバックアップは自動的に有効になりません。以下のコマンドを実行して、障害復旧用に hypershift-operator-oidc-provider-s3-credentials シークレットのバックアップを有効にするラベルを追加します。

    oc label secret hypershift-operator-oidc-provider-s3-credentials -n local-cluster cluster.open-cluster-management.io/backup=true
    Copy to Clipboard Toggle word wrap

1.7.1.3. ルーティング可能なパブリックゾーンの作成

ゲストクラスター内のアプリケーションにアクセスするには、パブリックゾーンがルーティング可能である必要があります。パブリックゾーンが存在する場合は、この手順を省略します。省力しない場合は、パブリックゾーンが既存の機能に影響を及ぼします。

次のコマンドを実行して、クラスター DNS レコードのパブリックゾーンを作成します。

BASE_DOMAIN=www.example.com
aws route53 create-hosted-zone --name $BASE_DOMAIN --caller-reference $(whoami)-$(date --rfc-3339=date)
Copy to Clipboard Toggle word wrap

1.7.1.4. 外部 DNS の有効化

Hosted control plane ではコントロールプレーンとデータプレーンが分離されているため、次の 2 つの独立した領域で DNS を設定できます。

  • 次のドメインなど、ホステッドクラスター内のワークロードの Ingress: *.apps.service-consumer-domain.com
  • サービスプロバイダードメインを介した API または OAUTH エンドポイントなど、管理クラスター内のサービスエンドポイントの受信: *.service-provider-domain.com

hostedCluster.spec.dns の入力は、ホステッドクラスター内のワークロードの Ingress を決定します。hostedCluster.spec.services.servicePublishingStrategy.route.hostname の入力は、管理クラスター内のサービスエンドポイントの Ingress を決定します。

外部 DNS は、LoadBalancer または Route の公開タイプを指定し、その公開タイプのホスト名を提供するホステッドクラスター Services の名前レコードを作成します。Private または PublicAndPrivate エンドポイントアクセスタイプを持つホステッドクラスターの場合、APIServer サービスと OAuth サービスのみがホスト名をサポートします。Private ホストクラスターの場合、DNS レコードは VPC 内の Virtual Private Cloud (VPC) エンドポイントのプライベート IP に解決されます。

Hosted control plane は、次の 4 つのサービスを公開します。

  • APIServer
  • OAuthServer
  • Konnectivity
  • Ignition

これらの各サービスは、HostedCluster 仕様の servicePublishingStrategy を使用して公開されます。デフォルトでは、servicePublishingStrategyLoadBalancer および Route タイプの場合、次の 2 つの方法のいずれかでサービスを公開します。

  • LoadBalancer タイプの Service ステータスにあるロードバランサーのホスト名を使用する
  • Routestatus.host フィールド

ただし、Hosted control plane をマネージドサービスコンテキストにデプロイメントする場合、これらの方法では、基盤となる管理クラスターの Ingress サブドメインが公開され、管理クラスターのライフサイクルとディザスターリカバリーのオプションが制限される可能性があります。

DNS 間接化が LoadBalancer および Route 公開タイプに階層化されている場合、マネージドサービスオペレーターは、サービスレベルドメインを使用してすべてのパブリックホステッドクラスターサービスを公開できます。このアーキテクチャーでは、DNS 名を新しい LoadBalancer または Route に再マッピングできますが、管理クラスターの Ingress ドメインは公開されません。Hosted control plane は、外部 DNS を使用して間接層を実現します。

管理クラスターの hypershift namespace に hypershift Operator と一緒に external-dns をデプロイできます。外部 DNS は、external-dns.alpha.kubernetes.io/hostname アノテーションを持つ Services または Routes を監視します。このアノテーションは、レコードなどの Service、または CNAME レコードなどの Route を指す DNS レコードを作成するために使用されます。

1.7.1.4.1. 前提条件

Hosted control plane の外部 DNS を設定する前に、次の前提条件を満たす必要があります。

  • 指定できる外部パブリックドメイン
  • AWS Route53 管理コンソールへのアクセス
1.7.1.4.2. Hosted control plane の外部 DNS の設定

Hosted control plane クラスターをサービスレベル DNS (外部 DNS) でプロビジョニングする予定の場合は、次の手順を実行します。

  1. HyperShift Operator の AWS 認証情報シークレットを作成し、local-cluster namespace で hypershift-operator-external-dns-credentials という名前を付けます。
  2. 次の表を参照して、シークレットに必須フィールドが含まれていることを確認してください。

    Expand
    フィールド名説明任意または必須

    provider

    サービスレベル DNS ゾーンを管理する DNS プロバイダー。

    必須

    domain-filter

    サービスレベルドメイン。

    必須

    credentials

    すべての外部 DNS タイプをサポートする認証情報ファイル。

    AWS キーを使用する場合はオプション

    aws-access-key-id

    認証情報アクセスキー ID。

    AWS DNS サービスを使用する場合はオプション

    aws-secret-access-key

    認証情報アクセスキーのシークレット。

    AWS DNS サービスを使用する場合はオプション

    次の例は、サンプルの hypershift-operator-external-dns-credentials シークレットテンプレートを示しています。

    oc create secret generic hypershift-operator-external-dns-credentials --from-literal=provider=aws --from-literal=domain-filter=service.my.domain.com --from-file=credentials=<credentials-file> -n local-cluster
    Copy to Clipboard Toggle word wrap

    注記: シークレットのリカバリーバックアップは自動的に有効になりません。hypershift-operator-external-dns-credentials シークレットを災害復旧用にバックアップできるようにするラベルを追加するには、次のコマンドを入力します。

    oc label secret hypershift-operator-external-dns-credentials -n local-cluster cluster.open-cluster-management.io/backup=""
    Copy to Clipboard Toggle word wrap
1.7.1.4.3. パブリック DNS ホストゾーンの作成

AWS Route 53 管理コンソールで外部 DNS ドメインフィルターとして使用するパブリック DNS ホストゾーンを作成できます。

  1. Route 53 管理コンソールで、Create hosted zone をクリックします。
  2. Hosted zone configuration ページでドメイン名を入力し、タイプとして Publish hosted zone が選択されていることを確認し、Create hosted zone をクリックします。
  3. ゾーンが作成されたら、Records タブの Value/Route traffic to 列の値をメモします。
  4. メインドメインで、DNS 要求を委任ゾーンにリダイレクトするための NS レコードを作成します。Value フィールドに、前の手順でメモした値を入力します。
  5. Create records をクリックします。
  6. 新しいサブゾーンにテストエントリーを作成し、次の例のような dig コマンドでテストすることにより、DNS ホストゾーンが機能していることを確認します。

    dig +short test.user-dest-public.aws.kerberos.com
    192.168.1.1
    Copy to Clipboard Toggle word wrap
  7. LoadBalancer サービスと Route サービスのホスト名を設定するホストクラスターを作成するには、次のコマンドを入力します。ここで、external-dns-domain は作成したパブリックホストゾーンと一致します。

    hypershift create cluster aws --name=example --endpoint-access=PublicAndPrivate --external-dns-domain=service-provider-domain.com ...
    Copy to Clipboard Toggle word wrap

この例は、ホステッドクラスターの結果として生じる services ブロックを示しています。

  platform:
    aws:
      endpointAccess: PublicAndPrivate
...
  services:
  - service: APIServer
    servicePublishingStrategy:
      route:
        hostname: api-example.service-provider-domain.com
      type: Route
  - service: OAuthServer
    servicePublishingStrategy:
      route:
        hostname: oauth-example.service-provider-domain.com
      type: Route
  - service: Konnectivity
    servicePublishingStrategy:
      type: Route
  - service: Ignition
    servicePublishingStrategy:
      type: Route
Copy to Clipboard Toggle word wrap

コントロールプレーンオペレーターは、ServicesRoutes を作成するときに、external-dns.alpha.kubernetes.io/hostname アノテーションを付けます。値は、そのタイプの servicePublishingStrategyhostname フィールドです。コントロールプレーンオペレーターは、その名前をサービスエンドポイントに使用し、ホスト名が設定されている場合、external-dns などの DNS レコードを作成できるメカニズムが存在することを期待します。

サービスレベルの DNS 間接化を使用できるのはパブリックサービスのみです。プライベートサービスは hypershift.local プライベートゾーンを使用します。特定のエンドポイントアクセスタイプに対してプライベートなサービスに hostname を設定することは無効です。

次の表は、サービスとエンドポイントの組み合わせに対して hostname を設定することが有効な場合を示しています。

Expand
サービスPublicPublicAndPrivatePrivate

APIServer

Y

Y

N

OAuthServer

Y

Y

N

Konnectivity

Y

N

N

Ignition

Y

N

N

1.7.1.4.4. コマンドラインインターフェイスと外部 DNS を使用したクラスターのデプロイ

外部パブリックホストゾーンがすでに存在する場合は、hypershift operator と external-dns operator をデプロイする必要があります。次のコマンドを入力して、external-dns Operator が実行中であり、内部フラグがパブリックホストゾーンを指していることを確認します。

export KUBECONFIG=<path_to_management_cluster_kubeconfig>
export AWS_CREDS=~/.aws/credentials
export REGION=<region>

hypershift create cluster aws \
    --aws-creds ${AWS_CREDS} \
    --instance-type m6i.xlarge \
    --region ${REGION} \
    --auto-repair \
    --generate-ssh \
    --name <cluster_name> \
    --namespace clusters \
    --base-domain service-consumer-domain.com \ 
1

    --node-pool-replicas 2 \
    --pull-secret ${HOME}/pull_secret.json \
    --release-image quay.io/openshift-release-dev/ocp-release:4.12.0-ec.3-x86_64 \
    --external-dns-domain=service-provider-domain.com \ 
2

    --endpoint-access=PublicAndPrivate 
3
Copy to Clipboard Toggle word wrap
1
パブリックホストゾーン service-consumer-domain.com を指します。これは通常、サービス利用者が所有する AWS アカウント内にあります。
2
パブリック外部 DNS ホストゾーン service-provider-domain.com を指します。これは通常、サービスプロバイダーが所有する AWS アカウント内にあります。
3
PublicAndPrivate として設定します。外部 DNS は、Public または PublicAndPrivate 設定でのみ使用できます。

1.7.1.6. ホステッドコントロールプレーン機能の有効化

ホステッドコントロールプレーン機能はデフォルトで無効になっています。この機能を自動的に有効にすると、hypershift-addon マネージドクラスターアドオンも有効になります。

  1. 次のコマンドを実行して、以下の機能を有効にすることができます。

    oc patch mce multiclusterengine --type=merge -p '{"spec":{"overrides":{"components":[{"name":"hypershift-preview","enabled": true}]}}}' 
    1
    Copy to Clipboard Toggle word wrap
    1
    デフォルトの MultiClusterEngine リソースインスタンス名は multiclusterengine ですが、$ oc get mce コマンドを実行し、クラスターから MultiClusterEngine 名を取得できます。
    oc patch mce multiclusterengine --type=merge -p '{"spec":{"overrides":{"components":[{"name":"hypershift-local-hosting","enabled": true}]}}}' 
    1
    Copy to Clipboard Toggle word wrap
    1
    デフォルトの MultiClusterEngine リソースインスタンス名は multiclusterengine ですが、$ oc get mce コマンドを実行し、クラスターから MultiClusterEngine 名を取得できます。
  2. 次のコマンドを実行して、hypershift-preview および hypershift-local-hosting 機能が MultiClusterEngine カスタムリソースで有効になっていることを確認します。

    oc get mce multiclusterengine -o yaml 
    1
    Copy to Clipboard Toggle word wrap
    1
    デフォルトの MultiClusterEngine リソースインスタンス名は multiclusterengine ですが、$ oc get mce コマンドを実行し、クラスターから MultiClusterEngine 名を取得できます。

    出力は以下の例のようになります。

    apiVersion: multicluster.openshift.io/v1
    kind: MultiClusterEngine
    metadata:
      name: multiclusterengine
    spec:
      overrides:
        components:
        - name: hypershift-preview
          enabled: true
        - name: hypershift-local-hosting
          enabled: true
    Copy to Clipboard Toggle word wrap
1.7.1.6.1. local-cluster の hypershift-addon マネージドクラスターアドオンを手動で有効にする

Hosted Control Plane 機能を有効にすると、hypershift-addon マネージドクラスターアドオンが自動的に有効になります。hypershift-addon マネージドクラスターアドオンを手動で有効にする必要がある場合は、次の手順を実行して hypershift-addon を使用し、HyperShift Operator を local-cluster にインストールします。

  1. 以下の例のようなファイルを作成して、ManagedClusterAddon HyperShift アドオンを作成します。

    apiVersion: addon.open-cluster-management.io/v1alpha1
    kind: ManagedClusterAddOn
    metadata:
      name: hypershift-addon
      namespace: local-cluster
    spec:
      installNamespace: open-cluster-management-agent-addon
    Copy to Clipboard Toggle word wrap
  2. 以下のコマンドを実行してこのファイルを適用します。

    oc apply -f <filename>
    Copy to Clipboard Toggle word wrap

    filename は、作成したファイル名に置き換えます。

  3. 以下のコマンドを実行して、hypershift-addon がインストールされていることを確認します。

    oc get managedclusteraddons -n local-cluster hypershift-addon
    Copy to Clipboard Toggle word wrap

    アドオンがインストールされている場合、出力は以下の例のようになります。

    NAME               AVAILABLE   DEGRADED   PROGRESSING
    hypershift-addon   True
    Copy to Clipboard Toggle word wrap

HyperShift アドオンがインストールされ、ホスティングクラスターを使用してホステッドクラスターを作成および管理できるようになります。

1.7.1.7. ホステッドコントロールプレーンのコマンドラインインターフェイスのインストール

ホステッドコントロールプレーン (hypershift) コマンドラインインターフェイスは、OpenShift Container Platform のホステッドコントロールプレーンクラスターの作成と管理に使用されます。ホステッドコントロールプレーン機能を有効にした後、次の手順を実行して、ホステッドコントロールプレーンのコマンドラインインターフェイスをインストールできます。

  1. OpenShift Container Platform コンソールから、Help icon > Command Line Tools をクリックします。
  2. お使いのプラットフォームの Download hypershift CLI をクリックします。

    注記: ダウンロードは hypershift-preview 機能を有効にしている場合にのみ表示されます。

  3. 次のコマンドを実行して、ダウンロードしたアーカイブを解凍します。

    tar xvzf hypershift.tar.gz
    Copy to Clipboard Toggle word wrap
  4. 次のコマンドを実行して、バイナリーファイルを実行可能にします。

    chmod +x hypershift
    Copy to Clipboard Toggle word wrap
  5. 次のコマンドを実行して、バイナリーファイルをパス内のディレクトリーに移動します。

    sudo mv hypershift /usr/local/bin/.
    Copy to Clipboard Toggle word wrap

hypershift create cluster コマンドを使用して、ホステッドクラスターを作成および管理できるようになりました。次のコマンドを使用して、使用可能なパラメーターを一覧表示します。

hypershift create cluster aws --help
Copy to Clipboard Toggle word wrap

1.7.1.8. ホステッドクラスターのディザスタリカバリー

Hosted Control Plane は、マルチクラスターエンジン Operator ハブクラスター上で実行されます。データプレーンは、選択した別のプラットフォーム上で実行されます。マルチクラスターエンジンの operator ハブクラスターを災害から復旧する場合、ホストされているコントロールプレーンも復旧する必要がある場合があります。

ホステッドコントロールプレーンクラスターをバックアップし、別のクラスターに復元する方法は、AWS リージョン内のホステッドクラスターのディザスターリカバリー を参照してください。

重要: ホステッドクラスターの障害復旧は AWS でのみ利用できます。

1.7.1.9. 関連情報

AWS でホストされるコントロールプレーンの詳細については、次のリソースを参照してください。

1.7.2. AWS での Hosted control plane クラスターの管理 (テクノロジープレビュー)

Kubernetes Operator コンソール用のマルチクラスターエンジンを使用して、Red Hat OpenShift Container Platform がホストするクラスターを作成できます。ホステッドコントロールプレーンは、Amazon Web Services (AWS) でテクノロジープレビューとして利用できます。AWS でホストされたコントロールプレーンを使用する場合は、コンソールを使用してホストされたクラスターを作成したり、コンソールまたはコマンドラインインターフェイスを使用してホストされたクラスターをインポートしたりできます。

1.7.2.1. 前提条件

ホステッドコントロールプレーンクラスターを作成する前に、ホステッドコントロールプレーンを設定する必要があります。詳細については、ホステッドコントロールプレーンの設定 (テクノロジープレビュー) を参照してください。

1.7.2.2. コンソールを使用した AWS でのホステッドコントロールプレーンクラスターの作成

マルチクラスターエンジン Operator コンソールからホステッドコントロールプレーンクラスターを作成するには、Infrastructure > Clusters に移動します。クラスター ページで、Create cluster > Amazon Web Services > Hosted をクリックし、コンソールで手順を完了します。

重要: クラスターを作成すると、マルチクラスターエンジン Operator コントローラーは、クラスターとそのリソースのための名前空間を作成します。その namespace には、そのクラスターインスタンスのリソースのみを含めるようにしてください。クラスターを破棄すると、namespace とその中のすべてのリソースが削除されます。

クラスターを既存のクラスターセットに追加する場合は、そのクラスターセットで追加できる適切なパーミッションが必要です。クラスターの作成時に cluster-admin 権限がない場合に、clusterset-admin 権限があるクラスターセットを選択する必要があります。指定されたクラスターセットに対して適切なパーミッションがないと、クラスターの作成に失敗します。選択するクラスターセットオプションがない場合には、クラスター管理者に連絡して、clusterset-admin 権限を受け取ってください。

マネージドクラスターはすべて、マネージドクラスターセットに関連付けられている必要があります。マネージドクラスターを ManagedClusterSet に割り当てない場合は、デフォルト のマネージドクラスターセットに自動的に追加されます。

このリリースイメージで、クラスターの作成に使用される OpenShift Container Platform イメージのバージョンを特定します。ホステッドコントロールプレーンクラスターは、提供されたリリースイメージのいずれかを使用する必要があります。

インフラストラクチャー環境で提供されるプロキシー情報は、プロキシーフィールドに自動的に追加されます。既存の情報を使用することも、それを上書きすることも、プロキシーを有効にする場合に情報を追加することもできます。次のリストには、プロキシーの作成に必要な情報が含まれています。

  • HTTP プロキシー URL: HTTP トラフィックのプロキシーとして使用する URL。
  • HTTPS プロキシー URL: HTTPS トラフィックに使用するセキュアなプロキシー URL。値の指定がない場合は、HTTP Proxy URL と同じ値が HTTP および HTTPS の両方に使用されます。
  • プロキシードメインなし: プロキシーをバイパスする必要のあるドメインのコンマ区切りリスト。ドメイン名をピリオド (.) で開始し、そのドメインにあるすべてのサブドメインを組み込みます。アステリスク (*) を追加し、すべての宛先のプロキシーをバイパスします。
  • 追加のトランスとバンドル: ミラーレジストリーへのアクセスに必要な証明書ファイルのコンテンツ。

注記: クラスターのインポートには、クラスターの詳細で提示された oc コマンドを実行する必要があります。クラスターを作成すると、Red Hat Advanced Cluster Management で管理されるように自動的に設定されません。

1.7.2.3. AWS 上の複数のゾーンにホストされたクラスターを作成する

次のコマンドを入力して、パブリックゾーンの BASE_DOMAIN を指定してクラスターを作成します。

REGION=us-east-1
ZONES=us-east-1a,us-east-1b
CLUSTER_NAME=example
BASE_DOMAIN=example.com
AWS_CREDS="$HOME/.aws/credentials"
PULL_SECRET="$HOME/pull-secret"

hypershift create cluster aws \
--name $CLUSTER_NAME \
--node-pool-replicas=3 \
--base-domain $BASE_DOMAIN \
--pull-secret $PULL_SECRET \
--aws-creds $AWS_CREDS \
--region $REGION \
--zones $ZONES 
1
Copy to Clipboard Toggle word wrap
1
--zones フラグは、--region フラグで指定されたリージョン内のアベイラビリティーゾーンを指定する必要があります。--zones フラグは、インフラストラクチャーを個別に作成するために使用される hypershift create infra aws コマンドでも使用できます。

次のゾーンごとのインフラストラクチャーが、指定されたすべてのゾーンに対して作成されます。

  • パブリックサブネット
  • プライベートサブネット
  • NAT ゲートウェイ
  • プライベートルートテーブル (パブリックルートテーブルはパブリックサブネット間で共有されます)

ゾーンごとに 1 つの NodePool リソースが作成されます。ノードプール名の末尾にはゾーン名が付けられます。ゾーンのプライベートサブネットは spec.platform.aws.subnet.id に設定されます。

1.7.2.4. ホステッドクラスターの AWS へのデプロイ

ホステッドコントロールプレーン (hypershift) コマンドラインインターフェイスを設定し、local-cluster ホスティングクラスターとして有効にしたら、次の手順を実行して、AWS にホステッドクラスターをデプロイできます。プライベートホストクラスターをデプロイするには、AWS でのプライベートホストクラスターのデプロイ を参照してください。

  1. 環境変数を次のように設定し、必要に応じて変数を認証情報に置き換えます。

    export REGION=us-east-1
    export CLUSTER_NAME=clc-name-hs1
    export INFRA_ID=clc-name-hs1
    export BASE_DOMAIN=dev09.red-chesterfield.com
    export AWS_CREDS=$HOME/name-aws
    export PULL_SECRET=/Users/username/pull-secret.txt
    export BUCKET_NAME=acmqe-hypershift
    export BUCKET_REGION=us-east-1
    Copy to Clipboard Toggle word wrap
  2. CLUSTER_NAMEINFRA_ID の値が同じであることを確認してください。そうしないと、クラスターが Kubernetes Operator コンソールのマルチクラスターエンジンに正しく表示されない可能性があります。各変数の説明を表示するには、次のコマンドを実行します。

    hypershift create cluster aws --help
    Copy to Clipboard Toggle word wrap
  3. ハブクラスターにログインしていることを確認します。
  4. 次のコマンドを実行して、ホステッドクラスターを作成します。

    hypershift create cluster aws \
        --name $CLUSTER_NAME \
        --infra-id $INFRA_ID \
        --base-domain $BASE_DOMAIN \
        --aws-creds $AWS_CREDS \
        --pull-secret $PULL_SECRET \
        --region $REGION \
        --generate-ssh \
        --node-pool-replicas 3 \
        --namespace <hypershift-hosting-service-cluster>
    Copy to Clipboard Toggle word wrap

    注記: デフォルトでは、HostedClusterNodePool のすべてのカスタムリソースが clusters namespace に作成されます。--namespace <namespace> パラメーターを指定すると、選択した namespace に HostedCluster および NodePool カスタムリソースが作成されます。

  5. 以下のコマンドを実行して、ホステッドクラスターのステータスを確認することもできます。

    oc get hostedclusters -n <hypershift-hosting-service-cluster>
    Copy to Clipboard Toggle word wrap
  6. 以下のコマンドを実行してノードプールを確認できます。

    oc get nodepools --namespace clusters
    Copy to Clipboard Toggle word wrap

1.7.2.5. ホステッドクラスターへのアクセス

ホストされたクラスターには、kubeconfig ファイルと kubeadmin 認証情報をリソースから直接取得するか、hypershift CLI を使用して kubeconfig ファイルを生成して、アクセスできます。

  • リソースから kubeconfig ファイルと認証情報を直接取得し、ホストされたクラスターにアクセスするには、ホストされたコントロールプレーンクラスターのアクセスシークレットを理解しておく必要があります。シークレットは、ホステッドクラスター (ホスティング) namespace に保存されます。ホステッドクラスター (ホスティング) namespace にはホステッドクラスターリソースが含まれており、Hosted Control Plane namespace では Hosted Control Plane が実行されます。

    シークレット名の形式は次のとおりです。

    • kubeconfig シークレット: <hostingNamespace>-<name>-admin-kubeconfig (clusters-hypershift-demo-admin-kubeconfig)
    • kubeadmin パスワードシークレット: <hostingNamespace>-<name>-kubeadmin-password (clusters-hypershift-demo-kubeadmin-password)

      kubeconfig シークレットには Base64 でエンコードされた kubeconfig フィールドが含まれており、これをデコードしてファイルに保存し、次のコマンドで使用できます。

      oc --kubeconfig ${HOSTED_CLUSTER_NAME}.kubeconfig get nodes
      Copy to Clipboard Toggle word wrap

    kubeadmin パスワードシークレットも Base64 でエンコードされます。これをデコードし、そのパスワードを使用して、ホステッドクラスターの API サーバーまたはコンソールにログインできます。

  • hypershift CLI を使用してホステッドクラスターにアクセスし、kubeconfig ファイルを生成するには、次の手順を実行します。

    1. 次のコマンドを入力して、kubeconfig ファイルを生成します。

      hypershift create kubeconfig --namespace ${CLUSTERS_NAMESPACE} --name ${HOSTED_CLUSTER_NAME} > ${HOSTED_CLUSTER_NAME}.kubeconfig
      Copy to Clipboard Toggle word wrap
    2. kubeconfig ファイルを保存した後、次のコマンド例を入力して、ホストされたクラスターにアクセスできます。

      oc --kubeconfig ${HOSTED_CLUSTER_NAME}.kubeconfig get nodes
      Copy to Clipboard Toggle word wrap

1.7.2.6. ホステッドコントロールプレーンクラスターの AWS へのインポート

コンソールを使用して、ホストされたコントロールプレーンクラスターをインポートできます。

  1. Infrastructure > Clusters をクリックし、インポートするホストされたクラスターを選択します。
  2. Import hosted cluster をクリックします。

    注記: 検出された ホステッドクラスターについては、コンソールからインポートすることもできますが、クラスターはアップグレード可能な状態である必要があります。Hosted Control Plane を使用できないため、ホステッドクラスターがアップグレード可能な状態ではない場合、クラスターへのインポートは無効になります。Import をクリックして、プロセスを開始します。クラスターが更新を受信している間、ステータスは Importing であり、その後、Ready に変わります。

次の手順を実行することで、コマンドラインインターフェイスを使用して、ホストされているコントロールプレーンクラスターを AWS にインポートすることもできます。

  1. 以下のコマンドを実行して、アノテーションを HostedCluster カスタムリソースに追加します。

    oc edit hostedcluster <cluster_name> -n clusters
    Copy to Clipboard Toggle word wrap

    <cluster_name> は、ホステッドクラスターの名前に置き換えます。

  2. 以下のコマンドを実行して、アノテーションを HostedCluster カスタムリソースに追加します。

    cluster.open-cluster-management.io/hypershiftdeployment: local-cluster/<cluster_name>
    cluster.open-cluster-management.io/managedcluster-name: <cluster_name>
    Copy to Clipboard Toggle word wrap

    <cluster_name> は、ホステッドクラスターの名前に置き換えます。

  3. 以下のサンプル YAML ファイルを使用して、ManagedCluster リソースを作成します。

    apiVersion: cluster.open-cluster-management.io/v1
    kind: ManagedCluster
    metadata:
      annotations:
        import.open-cluster-management.io/hosting-cluster-name: local-cluster
        import.open-cluster-management.io/klusterlet-deploy-mode: Hosted
        open-cluster-management/created-via: other
      labels:
        cloud: auto-detect
        cluster.open-cluster-management.io/clusterset: default
        name: <cluster_name>
        vendor: OpenShift
      name: <cluster_name>
    spec:
      hubAcceptsClient: true
      leaseDurationSeconds: 60
    Copy to Clipboard Toggle word wrap

    <cluster_name> は、ホステッドクラスターの名前に置き換えます。

  4. 以下のコマンドを実行してリソースを適用します。

    oc apply -f <file_name>
    Copy to Clipboard Toggle word wrap

    <file_name> を、直前の手順で作成した YAML ファイル名に置き換えます。

  5. 以下のサンプル YAML ファイルを使用して、KlusterletAddonConfig リソースを作成します。これは、Red Hat Advanced Cluster Management にのみ適用されます。マルチクラスターエンジン Operator のみをインストールした場合は、この手順を省略します。

    apiVersion: agent.open-cluster-management.io/v1
    kind: KlusterletAddonConfig
    metadata:
      name: <cluster_name>
      namespace: <cluster_name>
    spec:
      clusterName: <cluster_name>
      clusterNamespace: <cluster_name>
      clusterLabels:
        cloud: auto-detect
        vendor: auto-detect
      applicationManager:
        enabled: true
      certPolicyController:
        enabled: true
      iamPolicyController:
        enabled: true
      policyController:
        enabled: true
      searchCollector:
        enabled: false
    Copy to Clipboard Toggle word wrap

    <cluster_name> は、ホステッドクラスターの名前に置き換えます。

  6. 以下のコマンドを実行してリソースを適用します。

    oc apply -f <file_name>
    Copy to Clipboard Toggle word wrap

    <file_name> を、直前の手順で作成した YAML ファイル名に置き換えます。

  7. インポートプロセスが完了すると、ホステッドクラスターがコンソールに表示されます。以下のコマンドを実行して、ホステッドクラスターのステータスを確認することもできます。

    oc get managedcluster <cluster_name>
    Copy to Clipboard Toggle word wrap

ARM64 でホストされるコントロールプレーンを有効にして、管理クラスター環境で OpenShift Container Platform ARM64 データプレーンと連携できるようにすることができます。この機能は、AWS 上の Hosted Control Plane でのみ利用できます。

1.7.2.7.1. 前提条件

始める前に、次の前提条件を満たす必要があります。

  • 64 ビット ARM インフラストラクチャーにインストールされた OpenShift Container Platform クラスターが必要です。詳細は、OpenShift クラスターの作成: AWS (ARM) を参照してください。
  • 64 ビット ARM インフラストラクチャー上に構築された HyperShift Operator が必要です。HyperShift Operator を入手するには、hypershift/hypershift-operator リポジトリー に移動し、4.13-arm64 タグを持つビルドを選択します。

ARM64 OpenShift Container Platform クラスター上でホストされたクラスターを実行するには、次の手順を実行します。

  1. ARM64 用 HyperShift Operator を管理クラスターにインストールして、デフォルトの HyperShift Operator イメージをオーバーライドします。

    たとえば、ホストされたコントロールプレーン (hypershift) コマンドラインインターフェイスを介して、バケット名、AWS 認証情報、およびリージョンを自分の情報に置き換えるよう注意しながら、次のコマンドを入力します。

    hypershift install \
    --oidc-storage-provider-s3-bucket-name $BUCKET_NAME \
    --oidc-storage-provider-s3-credentials $AWS_CREDS \
    --oidc-storage-provider-s3-region $REGION \
    --hypershift-image quay.io/hypershift/hypershift-operator:4.13-arm64
    Copy to Clipboard Toggle word wrap
  2. デフォルトのリリースイメージをマルチアーキテクチャーリリースイメージでオーバーライドするホストされたクラスターを作成します。

    たとえば、ホストされたコントロールプレーン (hypershift) コマンドラインインターフェイスを介して、次のコマンドを入力します。その際、クラスター名、ノードプールレプリカ、ベースドメイン、プルシークレット、AWS 認証情報、およびリージョンを実際の情報に置き換えるよう注意してください。

    hypershift create cluster aws \
    --name $CLUSTER_NAME \
    --node-pool-replicas=$NODEPOOL_REPLICAS \
    --base-domain $BASE_DOMAIN \
    --pull-secret $PULL_SECRET \
    --aws-creds $AWS_CREDS \
    --region $REGION \
    --release-image quay.io/openshift-release-dev/ocp-release:4.13.0-rc.0-multi
    Copy to Clipboard Toggle word wrap

    この例では、--node-pool-replicas フラグを使用してデフォルトの NodePool オブジェクトを追加します。

  3. 64 ビット x86 NodePool オブジェクトをホストされたクラスターに追加します。

    たとえば、ホストされたコントロールプレーン (hypershift) コマンドラインインターフェイスを使用して、次のコマンドを入力します。クラスター名、ノードプール名、ノードプールレプリカを実際の情報に置き換えるよう注意してください。

    hypershift create nodepool aws \
    --cluster-name $CLUSTER_NAME \
    --name $NODEPOOL_NAME \
    --node-count=$NODEPOOL_REPLICAS
    Copy to Clipboard Toggle word wrap

1.7.2.8. AWS 上のホステッドクラスターの破棄

ホステッドクラスターとそのマネージドクラスターリソースを破棄するには、次の手順を実行します。

  1. 次のコマンドを実行して、ホステッドクラスターとそのバックエンドリソースを削除します。

    hypershift destroy cluster aws --name <cluster_name> --infra-id <infra_id> --aws-creds <aws-credentials> --base-domain <base_domain>
    Copy to Clipboard Toggle word wrap

    必要に応じて名前を置き換えます。

  2. 次のコマンドを実行して、マルチクラスターエンジン Operator のマネージドクラスターリソースを削除します。

    oc delete managedcluster <cluster_name>
    Copy to Clipboard Toggle word wrap

    cluster_name をクラスターの名前に置き換えます。

ホステッドコントロールプレーン (hypershift) コマンドラインインターフェイスを設定し、ローカルクラスターを ホスティングクラスターとして有効にすると、ホステッドクラスターまたはプライベートのホステッドクラスターを AWS にデプロイできます。パブリックのホステッドクラスターを AWS にデプロイするには、AWS でのホステッドクラスターのデプロイ を参照してください。

デフォルトでは、Hosted Control Plane のゲストクラスターは、パブリック DNS および管理クラスターのデフォルトルーターを通じてパブリックにアクセスできます。

AWS のプライベートクラスターの場合、ゲストクラスターとのすべての通信は AWS PrivateLink 経由で行われます。AWS でプライベートクラスターをサポートするように Hosted Control Plane を設定するには、次の手順を実行します。

重要: パブリッククラスターは任意のリージョンに作成できますが、プライベートクラスターは --aws-private-region で指定されたリージョンにのみ作成できます。

1.7.2.9.1. 前提条件

AWS のプライベートホストクラスターを有効にするには、まず AWS PrivateLink を有効にする必要があります。詳細は、AWS PrivateLink の有効化 を参照してください。

1.7.2.9.2. AWS 上でプライベートホストクラスターを作成する
  1. 次のコマンドを入力して、プライベートクラスター IAM ポリシードキュメントを作成します。

    cat << EOF >> policy.json
    {
      "Version": "2012-10-17",
      "Statement": [
        {
          "Effect": "Allow",
          "Action": [
            "ec2:CreateVpcEndpointServiceConfiguration",
            "ec2:DescribeVpcEndpointServiceConfigurations",
            "ec2:DeleteVpcEndpointServiceConfigurations",
            "ec2:DescribeVpcEndpointServicePermissions",
            "ec2:ModifyVpcEndpointServicePermissions",
            "ec2:CreateTags",
            "elasticloadbalancing:DescribeLoadBalancers"
          ],
          "Resource": "\*"
        }
      ]
    }
    Copy to Clipboard Toggle word wrap
  2. 次のコマンドを入力して、AWS で IAM ポリシーを作成します。

    aws iam create-policy --policy-name=hypershift-operator-policy --policy-document=file://policy.json
    Copy to Clipboard Toggle word wrap
  3. 次のコマンドを入力して、hypershift-operator IAM ユーザーを作成します。

    aws iam create-user --user-name=hypershift-operator
    Copy to Clipboard Toggle word wrap
  4. 次のコマンドを入力して、ポリシーを hypershift-operator ユーザーにアタッチします。$POLICY_ARN は、作成したポリシーの ARN に置き換えます。

    aws iam attach-user-policy --user-name=hypershift-operator --policy-arn=$POLICY_ARN
    Copy to Clipboard Toggle word wrap
  5. 次のコマンドを入力して、ユーザーの IAM アクセスキーを作成します。

    aws iam create-access-key --user-name=hypershift-operator
    Copy to Clipboard Toggle word wrap
  6. 次のコマンドを入力して、プライベートホストクラスターを作成します。必要に応じて、変数を実際の値に置き換えます。

    CLUSTER_NAME=example
    BASE_DOMAIN=example.com
    AWS_CREDS="$HOME/.aws/credentials"
    PULL_SECRET="$HOME/pull-secret"
    
    hypershift create cluster aws \
    --name $CLUSTER_NAME \
    --node-pool-replicas=3 \
    --base-domain $BASE_DOMAIN \
    --pull-secret $PULL_SECRET \
    --aws-creds $AWS_CREDS \
    --region $REGION \
    --endpoint-access Private 
    1
    Copy to Clipboard Toggle word wrap
    1
    --endpoint-access フラグは、クラスターがパブリックかプライベートかを指定します。

クラスターの API エンドポイントには、プライベート DNS ゾーンを通じてアクセスできます。

  • api.$CLUSTER_NAME.hypershift.local
  • *.apps.$CLUSTER_NAME.hypershift.local
1.7.2.9.3. AWS 上のプライベートホスティングクラスターへのアクセス

プライベートクラスターにアクセスするには、踏み台を使用します。

  1. 次のコマンドを入力して要塞インスタンスを起動します。$SSH_KEY は踏み台に接続するための認証情報に置き換えます。

    hypershift create bastion aws --aws-creds=$AWS_CREDS --infra-id=$INFRA_ID --region=$REGION --ssh-key-file=$SSH_KEY
    Copy to Clipboard Toggle word wrap
  2. 次のコマンドを入力して、クラスターノードプール内のノードのプライベート IP を検索します。

    aws ec2 describe-instances --filter="Name=tag:kubernetes.io/cluster/$INFRA_ID,Values=owned" | jq '.Reservations[] | .Instances[] | select(.PublicDnsName=="") | .PrivateIpAddress'
    Copy to Clipboard Toggle word wrap
  3. 次のコマンドを入力して、ノードにコピーできるクラスターの kubeconfig ファイルを作成します。

    hypershift create kubeconfig > $CLUSTER_KUBECONFIG
    Copy to Clipboard Toggle word wrap
  4. 次のコマンドを入力して、create bastion コマンドから出力された IP を使用して踏み台を介していずれかのノードに SSH 接続します。

    ssh -o ProxyCommand="ssh ec2-user@$BASTION_IP -W %h:%p" core@$NODE_IP
    Copy to Clipboard Toggle word wrap
  5. SSH シェルから、次のコマンドを入力して、kubeconfig ファイルの内容をノード上のファイルにコピーします。

    cat << EOF >> kubeconfig
    <paste kubeconfig contents>
    export KUBECONFIG=$PWD/kubeconfig
    Copy to Clipboard Toggle word wrap
  6. SSH シェルから、ゲストクラスターのステータスを確認するか、次の例に示すように他の oc コマンドを実行します。

    oc get clusteroperators
    oc get clusterversion
    Copy to Clipboard Toggle word wrap
1.7.2.9.4. 関連情報

AWS でのパブリックホステッドクラスターのデプロイの詳細は、AWS でのホステッドクラスターのデプロイ を参照してください。

AWS で Red Hat OpenShift Container Platform のホストされているコントロールプレーンを使用する場合、インフラストラクチャーの要件はセットアップに応じて異なります。

1.7.2.10.1. 前提条件

ホステッドコントロールプレーンクラスターを作成する前に、ホステッドコントロールプレーンを設定する必要があります。詳細については、ホステッドコントロールプレーンの設定 (テクノロジープレビュー) を参照してください。

1.7.2.10.2. AWS インフラストラクチャーの要件

AWS で Hosted Control Plane を使用する場合、インフラストラクチャー要件は次のカテゴリーに当てはまります。

  • 任意の AWS アカウントの HyperShift Operator に必要なマネージド外のインフラストラクチャー
  • ホステッドクラスターの AWS アカウント内の事前に必要な管理対象外インフラストラクチャー
  • 管理 AWS アカウント内の Hosted Control Plane によって管理されるインフラストラクチャー
  • ホステッドクラスターの AWS アカウント内の Hosted Control Plane によって管理されるインフラストラクチャー
  • ホステッドクラスターの Kubernetes 管理インフラストラクチャー AWS アカウント

Prerequired とは、Hosted Control Plane が適切に動作するために AWS インフラストラクチャーが必要であることを意味します。Unmanaged とは、Operator またはコントローラーがインフラストラクチャーを作成しないことを意味します。次のセクションには、AWS リソースの作成に関する詳細が含まれています。

任意の AWS アカウントは、ホストされるコントロールプレーンサービスのプロバイダーに依存します。

自己管理型の Hosted Control Plane では、クラスターサービスプロバイダーが AWS アカウントを制御します。クラスターサービスプロバイダー は、クラスターコントロールプレーンをホストする管理者であり、アップタイムを行います。管理対象の Hosted Control Plane では、AWS アカウントは Red Hat に属します。

HyperShift Operator の必須の非管理インフラストラクチャーでは、管理クラスター AWS アカウントに次のインフラストラクチャー要件が適用されます。

  • 1 つの S3 バケット

    • OpenID Connect (OIDC)
  • ルート 53 のホステッドゾーン

    • ホステッドクラスターのプライベートおよびパブリックエントリーをホストするドメイン

インフラストラクチャーが事前に必要であり、ホステッドクラスター AWS アカウントで管理されていない場合、すべてのアクセスモードのインフラストラクチャー要件は次のとおりです。

  • 1 つの VPC
  • 1 つの DHCP オプション
  • 2 つのサブネット

    • 内部データプレーンサブネットであるプライベートサブネット
    • データプレーンからインターネットへのアクセスを可能にするパブリックサブネット
  • 1 つのインターネットゲートウェイ
  • 1 つの Elastic IP
  • 1 つの NAT ゲートウェイ
  • 1 つのセキュリティーグループ (ワーカーノード)
  • 2 つのルートテーブル (1 つはプライベート、もう 1 つはパブリック)
  • 2 つの Route 53 のホステッドゾーン
  • 次の項目に対する十分なクォータ:

    • パブリックホステッドクラスター用の 1 つの Ingress サービスロードバランサー
    • プライベートホストクラスター用の 1 つのプライベートリンクエンドポイント

注記: プライベートリンクネットワーキングが機能するには、ホステッドクラスター AWS アカウントのエンドポイントゾーンが、管理クラスター AWS アカウントのサービスエンドポイントによって解決されるインスタンスのゾーンと一致する必要があります。AWS では、ゾーン名は us-east-2b などのエイリアスであり、異なるアカウントの同じゾーンにマップされるとは限りません。そのため、プライベートリンクが機能するには、管理クラスターのリージョンのすべてのゾーンにサブネットまたはワーカーが必要です。

1.7.2.10.2.3. 管理 AWS アカウント内の Hosted Control Plane 管理インフラストラクチャー

インフラストラクチャーが管理 AWS アカウントの Hosted Control Plane によって管理されている場合、インフラストラクチャーの要件は、クラスターがパブリック、プライベート、またはその組み合わせであるかによって異なります。

パブリッククラスターを使用するアカウントの場合、インフラストラクチャー要件は次のとおりです。

  • ネットワークロードバランサー: ロードバランサー Kube API サーバー

    • Kubernetes がセキュリティーグループを作成する
  • ボリューム

    • etcd 用 (高可用性に応じて 1 つまたは 3 つ)
    • OVN-Kube 用

プライベートクラスターを使用するアカウントの場合、インフラストラクチャー要件は次のとおりです。

  • ネットワークロードバランサー: ロードバランサーのプライベートルーター
  • エンドポイントサービス (プライベートリンク)

パブリッククラスターとプライベートクラスターを持つアカウントの場合、インフラストラクチャー要件は次のとおりです。

  • ネットワークロードバランサー: ロードバランサーのパブリックルーター
  • ネットワークロードバランサー: ロードバランサーのプライベートルーター
  • エンドポイントサービス (プライベートリンク)
  • Volumes:

    • etcd の場合 (高可用性に応じて 1 つまたは 3 つ)
    • OVN-Kube の場合

インフラストラクチャーがホステッドクラスター AWS アカウントの Hosted Control Plane によって管理されている場合、インフラストラクチャー要件は、クラスターがパブリック、プライベート、またはその組み合わせであるかによって異なります。

パブリッククラスターを使用するアカウントの場合、インフラストラクチャー要件は次のとおりです。

  • ノードプールには、RoleRolePolicy が定義された EC2 インスタンスが必要です。

プライベートクラスターを使用するアカウントの場合、インフラストラクチャー要件は次のとおりです。

  • アベイラビリティーゾーンごとに 1 つのプライベートリンクエンドポイント
  • ノードプールの EC2 インスタンス

パブリッククラスターとプライベートクラスターを持つアカウントの場合、インフラストラクチャー要件は次のとおりです。

  • アベイラビリティーゾーンごとに 1 つのプライベートリンクエンドポイント
  • ノードプールの EC2 インスタンス
1.7.2.10.2.5. ホステッドクラスターの Kubernetes 管理インフラストラクチャー AWS アカウント

Kubernetes がホステッドクラスター AWS アカウントでインフラストラクチャーを管理する場合、インフラストラクチャー要件は次のとおりです。

  • デフォルトの Ingress 用のネットワークロードバランサー
  • レジストリー用の S3 バケット
1.7.2.10.3. Identity and Access Management (IAM) 権限

Hosted Control Plane のコンテキストでは、コンシューマーが Amazon Resource Name (ARN) ロールを作成する役割を果たします。コンシューマー は、アクセス許可ファイルを生成する自動プロセスです。コンシューマーはコマンドラインインターフェイスまたは OpenShift Cluster Manager である可能性があります。ホストされたコントロールプレーンは、最小特権コンポーネントの原則を尊重する粒度を有効にしようとします。つまり、すべてのコンポーネントが独自のロールを使用して AWS オブジェクトを操作または作成し、ロールは製品が正常に機能するために必要なものに限定されます。

ホストされたクラスターは ARN ロールを入力として受け取り、コンシューマーは各コンポーネントの AWS 権限設定を作成します。その結果、コンポーネントは STS および事前設定された OIDC IDP を通じて認証できるようになります。

次のロールは、コントロールプレーン上で実行され、データプレーン上で動作する、Hosted Control Plane の一部のコンポーネントによって消費されます。

  • controlPlaneOperatorARN
  • imageRegistryARN
  • ingressARN
  • kubeCloudControllerARN
  • nodePoolManagementARN
  • storageARN
  • networkARN

次の例は、ホステッドクラスターからの IAM ロールへの参照を示しています。

...
endpointAccess: Public
  region: us-east-2
  resourceTags:
  - key: kubernetes.io/cluster/example-cluster-bz4j5
    value: owned
rolesRef:
    controlPlaneOperatorARN: arn:aws:iam::820196288204:role/example-cluster-bz4j5-control-plane-operator
    imageRegistryARN: arn:aws:iam::820196288204:role/example-cluster-bz4j5-openshift-image-registry
    ingressARN: arn:aws:iam::820196288204:role/example-cluster-bz4j5-openshift-ingress
    kubeCloudControllerARN: arn:aws:iam::820196288204:role/example-cluster-bz4j5-cloud-controller
    networkARN: arn:aws:iam::820196288204:role/example-cluster-bz4j5-cloud-network-config-controller
    nodePoolManagementARN: arn:aws:iam::820196288204:role/example-cluster-bz4j5-node-pool
    storageARN: arn:aws:iam::820196288204:role/example-cluster-bz4j5-aws-ebs-csi-driver-controller
type: AWS
...
Copy to Clipboard Toggle word wrap

Hosted Control Plane が使用するロールを次の例に示します。

  • ingressARN

    {
        "Version": "2012-10-17",
        "Statement": [
            {
                "Effect": "Allow",
                "Action": [
                    "elasticloadbalancing:DescribeLoadBalancers",
                    "tag:GetResources",
                    "route53:ListHostedZones"
                ],
                "Resource": "\*"
            },
            {
                "Effect": "Allow",
                "Action": [
                    "route53:ChangeResourceRecordSets"
                ],
                "Resource": [
                    "arn:aws:route53:::PUBLIC_ZONE_ID",
                    "arn:aws:route53:::PRIVATE_ZONE_ID"
                ]
            }
        ]
    }
    Copy to Clipboard Toggle word wrap
  • imageRegistryARN

    {
        "Version": "2012-10-17",
        "Statement": [
            {
                "Effect": "Allow",
                "Action": [
                    "s3:CreateBucket",
                    "s3:DeleteBucket",
                    "s3:PutBucketTagging",
                    "s3:GetBucketTagging",
                    "s3:PutBucketPublicAccessBlock",
                    "s3:GetBucketPublicAccessBlock",
                    "s3:PutEncryptionConfiguration",
                    "s3:GetEncryptionConfiguration",
                    "s3:PutLifecycleConfiguration",
                    "s3:GetLifecycleConfiguration",
                    "s3:GetBucketLocation",
                    "s3:ListBucket",
                    "s3:GetObject",
                    "s3:PutObject",
                    "s3:DeleteObject",
                    "s3:ListBucketMultipartUploads",
                    "s3:AbortMultipartUpload",
                    "s3:ListMultipartUploadParts"
                ],
                "Resource": "\*"
            }
        ]
    }
    Copy to Clipboard Toggle word wrap
  • storageARN

    {
        "Version": "2012-10-17",
        "Statement": [
            {
                "Effect": "Allow",
                "Action": [
                    "ec2:AttachVolume",
                    "ec2:CreateSnapshot",
                    "ec2:CreateTags",
                    "ec2:CreateVolume",
                    "ec2:DeleteSnapshot",
                    "ec2:DeleteTags",
                    "ec2:DeleteVolume",
                    "ec2:DescribeInstances",
                    "ec2:DescribeSnapshots",
                    "ec2:DescribeTags",
                    "ec2:DescribeVolumes",
                    "ec2:DescribeVolumesModifications",
                    "ec2:DetachVolume",
                    "ec2:ModifyVolume"
                ],
                "Resource": "\*"
            }
        ]
    }
    Copy to Clipboard Toggle word wrap
  • networkARN

    {
        "Version": "2012-10-17",
        "Statement": [
            {
                "Effect": "Allow",
                "Action": [
                    "ec2:DescribeInstances",
                    "ec2:DescribeInstanceStatus",
                    "ec2:DescribeInstanceTypes",
                    "ec2:UnassignPrivateIpAddresses",
                    "ec2:AssignPrivateIpAddresses",
                    "ec2:UnassignIpv6Addresses",
                    "ec2:AssignIpv6Addresses",
                    "ec2:DescribeSubnets",
                    "ec2:DescribeNetworkInterfaces"
                ],
                "Resource": "\*"
            }
        ]
    }
    Copy to Clipboard Toggle word wrap
  • kubeCloudControllerARN

    {
        "Version": "2012-10-17",
        "Statement": [
            {
                "Action": [
                    "ec2:DescribeInstances",
                    "ec2:DescribeImages",
                    "ec2:DescribeRegions",
                    "ec2:DescribeRouteTables",
                    "ec2:DescribeSecurityGroups",
                    "ec2:DescribeSubnets",
                    "ec2:DescribeVolumes",
                    "ec2:CreateSecurityGroup",
                    "ec2:CreateTags",
                    "ec2:CreateVolume",
                    "ec2:ModifyInstanceAttribute",
                    "ec2:ModifyVolume",
                    "ec2:AttachVolume",
                    "ec2:AuthorizeSecurityGroupIngress",
                    "ec2:CreateRoute",
                    "ec2:DeleteRoute",
                    "ec2:DeleteSecurityGroup",
                    "ec2:DeleteVolume",
                    "ec2:DetachVolume",
                    "ec2:RevokeSecurityGroupIngress",
                    "ec2:DescribeVpcs",
                    "elasticloadbalancing:AddTags",
                    "elasticloadbalancing:AttachLoadBalancerToSubnets",
                    "elasticloadbalancing:ApplySecurityGroupsToLoadBalancer",
                    "elasticloadbalancing:CreateLoadBalancer",
                    "elasticloadbalancing:CreateLoadBalancerPolicy",
                    "elasticloadbalancing:CreateLoadBalancerListeners",
                    "elasticloadbalancing:ConfigureHealthCheck",
                    "elasticloadbalancing:DeleteLoadBalancer",
                    "elasticloadbalancing:DeleteLoadBalancerListeners",
                    "elasticloadbalancing:DescribeLoadBalancers",
                    "elasticloadbalancing:DescribeLoadBalancerAttributes",
                    "elasticloadbalancing:DetachLoadBalancerFromSubnets",
                    "elasticloadbalancing:DeregisterInstancesFromLoadBalancer",
                    "elasticloadbalancing:ModifyLoadBalancerAttributes",
                    "elasticloadbalancing:RegisterInstancesWithLoadBalancer",
                    "elasticloadbalancing:SetLoadBalancerPoliciesForBackendServer",
                    "elasticloadbalancing:AddTags",
                    "elasticloadbalancing:CreateListener",
                    "elasticloadbalancing:CreateTargetGroup",
                    "elasticloadbalancing:DeleteListener",
                    "elasticloadbalancing:DeleteTargetGroup",
                    "elasticloadbalancing:DescribeListeners",
                    "elasticloadbalancing:DescribeLoadBalancerPolicies",
                    "elasticloadbalancing:DescribeTargetGroups",
                    "elasticloadbalancing:DescribeTargetHealth",
                    "elasticloadbalancing:ModifyListener",
                    "elasticloadbalancing:ModifyTargetGroup",
                    "elasticloadbalancing:RegisterTargets",
                    "elasticloadbalancing:SetLoadBalancerPoliciesOfListener",
                    "iam:CreateServiceLinkedRole",
                    "kms:DescribeKey"
                ],
                "Resource": [
                    "\*"
                ],
                "Effect": "Allow"
            }
        ]
    }
    Copy to Clipboard Toggle word wrap
  • nodePoolManagementARN

    {
        "Version": "2012-10-17",
        "Statement": [
            {
                "Action": [
                    "ec2:AllocateAddress",
                    "ec2:AssociateRouteTable",
                    "ec2:AttachInternetGateway",
                    "ec2:AuthorizeSecurityGroupIngress",
                    "ec2:CreateInternetGateway",
                    "ec2:CreateNatGateway",
                    "ec2:CreateRoute",
                    "ec2:CreateRouteTable",
                    "ec2:CreateSecurityGroup",
                    "ec2:CreateSubnet",
                    "ec2:CreateTags",
                    "ec2:DeleteInternetGateway",
                    "ec2:DeleteNatGateway",
                    "ec2:DeleteRouteTable",
                    "ec2:DeleteSecurityGroup",
                    "ec2:DeleteSubnet",
                    "ec2:DeleteTags",
                    "ec2:DescribeAccountAttributes",
                    "ec2:DescribeAddresses",
                    "ec2:DescribeAvailabilityZones",
                    "ec2:DescribeImages",
                    "ec2:DescribeInstances",
                    "ec2:DescribeInternetGateways",
                    "ec2:DescribeNatGateways",
                    "ec2:DescribeNetworkInterfaces",
                    "ec2:DescribeNetworkInterfaceAttribute",
                    "ec2:DescribeRouteTables",
                    "ec2:DescribeSecurityGroups",
                    "ec2:DescribeSubnets",
                    "ec2:DescribeVpcs",
                    "ec2:DescribeVpcAttribute",
                    "ec2:DescribeVolumes",
                    "ec2:DetachInternetGateway",
                    "ec2:DisassociateRouteTable",
                    "ec2:DisassociateAddress",
                    "ec2:ModifyInstanceAttribute",
                    "ec2:ModifyNetworkInterfaceAttribute",
                    "ec2:ModifySubnetAttribute",
                    "ec2:ReleaseAddress",
                    "ec2:RevokeSecurityGroupIngress",
                    "ec2:RunInstances",
                    "ec2:TerminateInstances",
                    "tag:GetResources",
                    "ec2:CreateLaunchTemplate",
                    "ec2:CreateLaunchTemplateVersion",
                    "ec2:DescribeLaunchTemplates",
                    "ec2:DescribeLaunchTemplateVersions",
                    "ec2:DeleteLaunchTemplate",
                    "ec2:DeleteLaunchTemplateVersions"
                ],
                "Resource": [
                    "\*"
                ],
                "Effect": "Allow"
            },
            {
                "Condition": {
                    "StringLike": {
                        "iam:AWSServiceName": "elasticloadbalancing.amazonaws.com"
                    }
                },
                "Action": [
                    "iam:CreateServiceLinkedRole"
                ],
                "Resource": [
                    "arn:*:iam::*:role/aws-service-role/elasticloadbalancing.amazonaws.com/AWSServiceRoleForElasticLoadBalancing"
                ],
                "Effect": "Allow"
            },
            {
                "Action": [
                    "iam:PassRole"
                ],
                "Resource": [
                    "arn:*:iam::*:role/*-worker-role"
                ],
                "Effect": "Allow"
            }
        ]
    }
    Copy to Clipboard Toggle word wrap
  • controlPlaneOperatorARN

    {
        "Version": "2012-10-17",
        "Statement": [
            {
                "Effect": "Allow",
                "Action": [
                    "ec2:CreateVpcEndpoint",
                    "ec2:DescribeVpcEndpoints",
                    "ec2:ModifyVpcEndpoint",
                    "ec2:DeleteVpcEndpoints",
                    "ec2:CreateTags",
                    "route53:ListHostedZones"
                ],
                "Resource": "\*"
            },
            {
                "Effect": "Allow",
                "Action": [
                    "route53:ChangeResourceRecordSets",
                    "route53:ListResourceRecordSets"
                ],
                "Resource": "arn:aws:route53:::%s"
            }
        ]
    }
    Copy to Clipboard Toggle word wrap
1.7.2.10.4. AWS インフラストラクチャーと IAM リソースを個別に作成する

デフォルトでは、hypershift create cluster aws コマンドは、ホステッドクラスターを使用してクラウドインフラストラクチャーを作成し、それを適用します。クラウドインフラストラクチャー部分を個別に作成して、hypershift create cluster aws コマンドをクラスターの作成のみに使用したり、クラスターを適用する前に変更できるようにレンダリングしたりすることができます。

クラウドインフラストラクチャー部分を個別に作成するには、AWS インフラストラクチャーを作成し、AWS Identity and Access (IAM) リソースを作成し、クラスターを作成する必要があります。

1.7.2.10.4.1. AWS インフラストラクチャーの作成

AWS インフラストラクチャーを作成するには、次のコマンドを入力します。

hypershift create infra aws --name CLUSTER_NAME \ 
1

    --aws-creds AWS_CREDENTIALS_FILE \ 
2

    --base-domain BASEDOMAIN \ 
3

    --infra-id INFRA_ID \ 
4

    --region REGION \ 
5

    --output-file OUTPUT_INFRA_FILE 
6
Copy to Clipboard Toggle word wrap
1
CLUSTER_NAME を、作成しているホステッドクラスターの名前に置き換えます。この値は、クラスターの Route 53 プライベートのホステッドゾーンを作成するために使用されます。
2
AWS_CREDENTIALS_FILE を、VPC、サブネット、NAT ゲートウェイなどのクラスターのインフラストラクチャーリソースを作成する権限を持つ AWS 認証情報ファイルの名前に置き換えます。この値は、ワーカーが存在するゲストクラスターの AWS アカウントに対応する必要があります。
3
BASEDOMAIN を、ホステッドクラスター Ingress に使用する予定のベースドメインの名前に置き換えます。この値は、レコードを作成できる Route 53 パブリックゾーンに対応している必要があります。
4
INFRA_ID をタグを使用してインフラストラクチャーを識別する一意の名前に置き換えます。この値は、Kubernetes のクラウドコントローラーマネージャーとクラスター API マネージャーによってクラスターのインフラストラクチャーを識別するために使用されます。通常、この値はクラスターの名前 (CLUSTER_NAME) に接尾辞を追加したものです。
5
REGION をクラスターのインフラストラクチャーを作成するリージョンに置き換えます。
6
OUTPUT_INFRA_FILE をインフラストラクチャーの ID を JSON 形式で保存するファイルの名前に置き換えます。このファイルを hypershift create cluster aws コマンドへの入力として使用し、HostedCluster リソースと NodePool リソースのフィールドに値を設定できます。

コマンドを入力すると、次のリソースが作成されます。

  • 1 つの VPC
  • 1 つの DHCP オプション
  • 1 つのプライベートサブネット
  • 1 つのパブリックサブネット
  • 1 つのインターネットゲートウェイ
  • 1 つの NAT ゲートウェイ
  • ワーカーノード用の 1 つのセキュリティーグループ
  • 2 つのルートテーブル: 1 つはプライベート、もう 1 つはパブリック
  • 2 つのプライベートホストゾーン: クラスター Ingress 用に 1 つ、PrivateLink 用に 1 つ (プライベートクラスターを作成する場合)

これらのリソースにはすべて、kubernetes.io/cluster/INFRA_ID=owned タグが含まれています。ここで、INFRA_ID はコマンドで指定した値です。

1.7.2.10.4.2. AWS IAM リソースの作成

AWS IAM リソースを作成するには、次のコマンドを入力します。

hypershift create iam aws --infra-id INFRA_ID \ 
1

    --aws-creds AWS_CREDENTIALS_FILE \ 
2

    --oidc-storage-provider-s3-bucket-name OIDC_BUCKET_NAME \ 
3

    --oidc-storage-provider-s3-region OIDC_BUCKET_REGION \ 
4

    --region REGION \ 
5

    --public-zone-id PUBLIC_ZONE_ID \ 
6

    --private-zone-id PRIVATE_ZONE_ID \ 
7

    --local-zone-id LOCAL_ZONE_ID \ 
8

    --output-file OUTPUT_IAM_FILE 
9
Copy to Clipboard Toggle word wrap
1
INFRA_IDcreate infra aws コマンドで指定したのと同じ ID に置き換えます。この値は、ホステッドクラスターに関連付けられている IAM リソースを識別します。
2
AWS_CREDENTIALS_FILE をロールなどの IAM リソースを作成する権限を持つ AWS 認証情報ファイルの名前に置き換えます。このファイルは、インフラストラクチャーを作成するために指定した認証情報ファイルと同じである必要はありませんが、同じ AWS アカウントに対応している必要があります。
3
OIDC_BUCKET_NAME を、OIDC ドキュメントを保存するバケットの名前に置き換えます。このバケットは、Hosted Control Plane をインストールするための前提条件として作成されました。バケットの名前は、このコマンドによって作成される OIDC プロバイダーの URL を構築するために使用されます。
4
OIDC_BUCKET_REGION を、OIDC バケットが存在するリージョンに置き換えます。
5
REGION をクラスターのインフラストラクチャーが配置されているリージョンに置き換えます。この値は、ホステッドクラスターに属するマシンのワーカーインスタンスプロファイルを作成するために使用されます。
6
PUBLIC_ZONE_ID をゲストクラスターのパブリックゾーンの ID に置き換えます。この値は、Ingress Operator のポリシーを作成するために使用されます。この値は create infra aws コマンドによって生成される OUTPUT_INFRA_FILE で確認できます。
7
PRIVATE_ZONE_ID をゲストクラスターのプライベートゾーンの ID に置き換えます。この値は、Ingress Operator のポリシーを作成するために使用されます。この値は create infra aws コマンドによって生成される OUTPUT_INFRA_FILE で確認できます。
8
LOCAL_ZONE_ID は、プライベートクラスターの作成時にゲストクラスターのローカルゾーンの ID に置き換えます。この値は、コントロールプレーンオペレーターのポリシーを作成するために使用され、PrivateLink エンドポイントのレコードを管理できるようになります。この値は create infra aws コマンドによって生成される OUTPUT_INFRA_FILE で確認できます。
9
OUTPUT_IAM_FILE を IAM リソースの ID を JSON 形式で保存するファイルの名前に置き換えます。その後、このファイルを hypershift create cluster aws コマンドへの入力として使用して、HostedCluster リソースと NodePool リソースのフィールドに値を設定できます。

コマンドを入力すると、次のリソースが作成されます。

  • 1 つの OIDC プロバイダー。STS 認証を有効にするために必要です。
  • 7 つのロール。Kubernetes コントローラーマネージャー、クラスター API プロバイダー、レジストリーなど、プロバイダーと対話するコンポーネントごとに分かれています。
  • 1 つのインスタンスプロファイル。クラスターのすべてのワーカーインスタンスに割り当てられるプロファイルです。
1.7.2.10.4.3. クラスターの作成

クラスターを作成するには、次のコマンドを入力します。

hypershift create cluster aws \ 
1

    --infra-id INFRA_ID \ 
2

    --name CLUSTER_NAME \ 
3

    --aws-creds AWS_CREDENTIALS \ 
4

    --infra-json OUTPUT_INFRA_FILE \ 
5

    --iam-json OUTPUT_IAM_FILE \ 
6

    --pull-secret PULL_SECRET_FILE \ 
7

    --generate-ssh \ 
8

    --node-pool-replicas 3
Copy to Clipboard Toggle word wrap
1
INFRA_IDcreate infra aws コマンドで指定したのと同じ ID に置き換えます。この値は、ホステッドクラスターに関連付けられている IAM リソースを識別します。
2
CLUSTER_NAMEcreate infra aws コマンドで指定したのと同じ名前に置き換えます。
3
AWS_CREDENTIALScreate infra aws コマンドで指定したのと同じ値に置き換えます。
4
OUTPUT_INFRA_FILEcreate infra aws コマンドの出力を保存したファイルの名前に置き換えます。
5
OUTPUT_IAM_FILEcreate iam aws コマンドの出力を保存したファイルの名前に置き換えます。
6
PULL_SECRET_FILE を有効な OpenShift Container Platform プルシークレットを含むファイルの名前に置き換えます。
7 8
--generate-ssh フラグはオプションですが、ワーカーに SSH 接続する必要がある場合に含めるとよいでしょう。SSH キーが生成され、ホステッドクラスターと同じ名 namespace にシークレットとして保存されます。

コマンドに --render フラグを追加して、クラスターに適用する前にリソースを編集できるファイルに出力をリダイレクトすることもできます。

コマンドを実行すると、次のリソースがクラスターに適用されます。

  • namespace
  • プルシークレットを含むシークレット
  • HostedCluster
  • NodePool
  • コントロールプレーンコンポーネントの 3 つの AWS STS シークレット
  • --generate-ssh フラグを指定した場合は、1 つの SSH キーシークレット。

1.7.3. ベアメタルでのホスティングクラスターの設定 (テクノロジープレビュー)

ホスティングクラスターとして機能するようにクラスターを設定することで、ホステッドコントロールプレーンをデプロイメントできます。ホスティングクラスターは、コントロールプレーンがホストされる OpenShift Container Platform クラスターです。ホスティングクラスターは 管理 クラスターとも呼ばれます。

注記: 管理クラスターは、マネージド クラスターとは異なります。マネージドクラスターは、ハブクラスターが管理するクラスターです。

hypershift アドオンを使用してマネージドクラスターをホスティングクラスターとして有効にし、そのクラスターに HyperShift Operator をデプロイできます。その後、ホステッドクラスターの作成を開始できます。

マルチクラスターエンジン Operator 2.5 は、管理対象のハブクラスターであるデフォルトの local-cluster と、ホスティングクラスターとしてのハブクラスターのみをサポートします。

ホステッドコントロールプレーンはテクノロジープレビュー機能であるため、関連コンポーネントはデフォルトで無効になっています。

Red Hat Advanced Cluster Management 2.7 では、local-cluster としても知られるマネージドハブクラスターをホスティングクラスターとして使用できます。

重要:

  • ホステッドコントロールプレーンの同じプラットフォームで、ハブクラスターとワーカーを実行します。
  • エージェントプラットフォームを使用して、Hosted Control Plane をベアメタルでプロビジョニングできます。Agent プラットフォームは、Central Infrastructure Management サービスを使用して、ホステッドクラスターにワーカーノードを追加します。Central Infrastructure Management サービスの概要は、Kube API - Getting Started Guide を参照してください。
  • 各ベアメタルホストは、central infrastructure management が提供する検出イメージを使用して開始する必要があります。ホストは手動で起動することも、Cluster-Baremetal-Operator を使用して自動化することもできます。各ホストが起動すると、エージェントプロセスが実行され、ホストの詳細が検出され、インストールが完了します。Agent カスタムリソースは、各ホストを表します。
  • エージェントプラットフォームでホステッドクラスターを作成すると、HyperShift は Hosted Control Plane (HCP) namespace に Agent Cluster API プロバイダーをインストールします。
  • ノードプールをスケールアップすると、マシンが作成されます。Cluster API プロバイダーは、承認され、検証に合格し、現在使用されておらず、ノードプールの仕様で指定されている要件を満たすエージェントを見つけます。エージェントのステータスと状態を確認することで、エージェントのインストールを監視できます。
  • ノードプールをスケールダウンすると、エージェントは対応するクラスターからバインド解除されます。クラスターを再利用する前に、Discovery イメージを使用してクラスターを再起動し、ノード数を更新する必要があります。

1.7.3.1. 前提条件

ホスティングクラスターを設定するには、次の前提条件を満たす必要があります。

  • OpenShift Container Platform クラスターに multicluster engine for Kubernetes Operator 2.2 以降がインストールされている必要があります。マルチクラスターエンジン Operator は、Red Hat Advanced Cluster Management をインストールすると自動的にインストールされます。OpenShift Container Platform OperatorHub から Operator として Red Hat Advanced Cluster Management を使用せずに、マルチクラスターエンジン Operator をインストールすることもできます。
  • マルチクラスターエンジン Operator には、1 つ以上の OpenShift Container Platform マネージドクラスターが必要です。multicluster engine Operator バージョン 2.5 以降では、local-cluster が自動的にインポートされます。local-cluster の詳細については、詳細設定 を参照してください。次のコマンドを実行して、ハブクラスターの状態を確認できます。

    oc get managedclusters local-cluster
    Copy to Clipboard Toggle word wrap
  • HyperShift Operator を実行するには、3 つ以上のワーカーノードを含むホスティングクラスターが必要です。
  • Central Infrastructure Management を有効にする必要があります。詳細は、Central Infrastructure Management サービスの有効化 を参照してください。
  • ホステッドコントロールプレーン機能を有効にする必要があります。詳細は、ホステッドコントロールプレーン機能の有効化 を参照してください。

1.7.3.2. ベアメタルインフラストラクチャーの要件

エージェントプラットフォームはインフラストラクチャーを作成しませんが、インフラストラクチャーに関して次の要件があります。

  • エージェント: エージェント はディスカバリーイメージで起動され、OpenShift Container Platform ノードとしてプロビジョニングする準備ができているホストを表します。
  • DNS: API および Ingress エンドポイントは、ルーティング可能である必要があります。

1.7.3.3. ベアメタル上でのホステッドコントロールプレーンの設定

前提条件を満たしたら、次の手順を実行して、ベアメタル上にホステッドコントロールプレーンを設定します。

1.7.3.4. ベアメタルでの DNS の設定 (テクノロジープレビュー)

ホステッドクラスターの API サーバーは、NodePort サービスとして公開されます。API サーバーに到達できる宛先を指す api.${HOSTED_CLUSTER_NAME}.${BASEDOMAIN} に、DNS エントリーが存在する必要があります。

DNS エントリーは、Hosted Control Plane を実行しているマネージドクラスター内のノードの 1 つを指すレコードと同様、単純化できます。エントリーは、受信トラフィックを Ingress Pod にリダイレクトするためにデプロイされるロードバランサーを指すこともできます。

次の DNS 設定の例を参照してください。

api.example.krnl.es.    IN A 192.168.122.20
api.example.krnl.es.    IN A 192.168.122.21
api.example.krnl.es.    IN A 192.168.122.22
api-int.example.krnl.es.    IN A 192.168.122.20
api-int.example.krnl.es.    IN A 192.168.122.21
api-int.example.krnl.es.    IN A 192.168.122.22
`*`.apps.example.krnl.es. IN A 192.168.122.23
Copy to Clipboard Toggle word wrap

InfraEnv は、ライブ ISO を開始しているホストがエージェントとして参加できる環境です。この場合、エージェントは Hosted Control Plane と同じ namespace に作成されます。

  1. InfraEnv リソースを作成します。

    1. 設定を含む YAML ファイルを作成します。

      apiVersion: agent-install.openshift.io/v1beta1
      kind: InfraEnv
      metadata:
        name: ${HOSTED_CLUSTER_NAME}
        namespace: ${HOSTED_CONTROL_PLANE_NAMESPACE}
      spec:
        pullSecretRef:
          name: pull-secret
        sshAuthorizedKey: ${SSH_PUB_KEY}
      Copy to Clipboard Toggle word wrap
    2. ファイルを infraenv-config.yaml として保存します。
    3. 次のコマンドを入力して設定を適用します。
    oc apply -f infraenv-config.yaml
    Copy to Clipboard Toggle word wrap
  2. URL を取得して、仮想マシンまたはベアメタルマシンがエージェントとして参加できるようにするライブ ISO をダウンロードするには、次のコマンドを入力します。

    oc -n ${HOSTED_CONTROL_PLANE_NAMESPACE} get InfraEnv ${HOSTED_CLUSTER_NAME} -ojsonpath="{.status.isoDownloadURL}"
    Copy to Clipboard Toggle word wrap

1.7.3.6. InfraEnv リソースへのエージェントの追加 (テクノロジープレビュー)

エージェントを追加するには、手動でマシンを設定してライブ ISO で開始するか、Metal3 を使用します。

1.7.3.6.1. エージェントを手動で追加する
  1. ライブ ISO をダウンロードし、それを使用してホスト (ベアメタルまたは VM) を起動します。ライブ ISO の URL は、InfraEnv リソースの status.isoDownloadURL フィールドにあります。起動時に、ホストは Assisted Service と通信し、InfraEnv リソースと同じ namespace にエージェントとして登録します。
  2. エージェントとそのプロパティーの一部を一覧表示するには、次のコマンドを入力します。

    oc -n ${HOSTED_CONTROL_PLANE_NAMESPACE} get agents
    Copy to Clipboard Toggle word wrap

    以下の出力例を参照してください。

    NAME                                   CLUSTER   APPROVED   ROLE          STAGE
    86f7ac75-4fc4-4b36-8130-40fa12602218                        auto-assign
    e57a637f-745b-496e-971d-1abbf03341ba                        auto-assign
    Copy to Clipboard Toggle word wrap
  3. 各エージェントが作成された後、オプションでその install_disk_idhostname を仕様に設定し、次のコマンドを入力してエージェントを承認できます。

    oc -n ${HOSTED_CONTROL_PLANE_NAMESPACE} patch agent 86f7ac75-4fc4-4b36-8130-40fa12602218 -p '{"spec":{"installation_disk_id":"/dev/sda","approved":true,"hostname":"worker-0.example.krnl.es"}}' --type merge
    
    oc -n ${HOSTED_CONTROL_PLANE_NAMESPACE} patch agent 23d0c614-2caa-43f5-b7d3-0b3564688baa -p '{"spec":{"installation_disk_id":"/dev/sda","approved":true,"hostname":"worker-1.example.krnl.es"}}' --type merge
    Copy to Clipboard Toggle word wrap
  4. エージェントの使用が承認されていることを確認するには、次のコマンドを入力して出力を確認します。

    oc -n ${HOSTED_CONTROL_PLANE_NAMESPACE} get agents
    Copy to Clipboard Toggle word wrap

    以下の出力例を参照してください。

    NAME                                   CLUSTER   APPROVED   ROLE          STAGE
    86f7ac75-4fc4-4b36-8130-40fa12602218             true       auto-assign
    e57a637f-745b-496e-971d-1abbf03341ba             true       auto-assign
    Copy to Clipboard Toggle word wrap
1.7.3.6.2. Metal3 を使用してエージェントを追加する

重要: BaremetalHost オブジェクトは、baremetal-operator 名前空間の外部に作成されるため、すべての名前空間を監視するように Operator を設定する必要があります。

  1. 以下のコマンドを実行します。

    oc patch provisioning provisioning-configuration --type merge -p '{"spec":{"watchAllNamespaces": true }}'
    Copy to Clipboard Toggle word wrap

    metal3 Pod が openshift-machine-api 名前空間で再起動されます。

  2. 次のコマンドを入力すると、Pod のステータスが継続的にチェックされ、準備ができたらステータスが返されます。

    oc wait -n openshift-machine-api $(oc get pods -n openshift-machine-api -l baremetal.openshift.io/cluster-baremetal-operator=metal3-state -o name) --for condition=containersready --timeout 5m
    Copy to Clipboard Toggle word wrap
  3. 次のコマンドを入力して、BaremetalHost オブジェクトを作成します。ベアメタルホストを起動するために必要ないくつかの変数を設定する必要があります。

    export BMC_USERNAME=$(echo -n "root" | base64 -w0) 
    1
    
    export BMC_PASSWORD=$(echo -n "calvin" | base64 -w0) 
    2
    
    export BMC_IP="192.168.124.228" 
    3
    
    export WORKER_NAME="ocp-worker-0" 
    4
    
    export BOOT_MAC_ADDRESS="aa:bb:cc:dd:ee:ff" 
    5
    
    export UUID="1" 
    6
    
    export REDFISH_SCHEME="redfish-virtualmedia" 
    7
    
    export REDFISH="${REDFISH_SCHEME}://${BMC_IP}/redfish/v1/Systems/${UUID}" 
    8
    Copy to Clipboard Toggle word wrap
    1
    BMC に接続するためのユーザー名。
    2
    BMC に接続するためのパスワード。
    3
    Metal3 が BMC に接続するために使用する IP アドレス。
    4
    BareMetalHost オブジェクトの名前。この値はホスト名としても使用されます。
    5
    マシンネットワークに接続されている NIC の MAC アドレス。
    6
    Redfish UUID。通常、この値は 1 です。suhy-tools を使用している場合は、この値は長い UUID になります。iDrac を使用している場合は、この値は System.Embedded.1 になります。ベンダーに確認することを推奨します。
    7
    使用する Redfish プロバイダー。標準の Redfish 実装を使用するハードウェアを使用している場合は、この値を redfish-virtualmedia に設定できます。iDrac を使用する場合、この値は idrac-virtualmedia です。iLO5 を使用する場合、この値は ilo5-virtualmedia です。ベンダーに確認することを推奨します。
    8
    Redfish 接続エンドポイント。
  4. 以下の手順に従って BareMetalHost オブジェクトを作成します。

    1. BMC シークレットを作成します。

      oc apply -f -
      apiVersion: v1
      data:
        password: ${BMC_PASSWORD}
        username: ${BMC_USERNAME}
      kind: Secret
      metadata:
        name: ${WORKER_NAME}-bmc-secret
        namespace: ${HOSTED_CONTROL_PLANE_NAMESPACE}
      type: Opaque
      Copy to Clipboard Toggle word wrap
    2. BareMetalHost オブジェクトを作成します。

      注記: infraenvs.agent-install.openshift.io ラベルは、BareMetalHost の開始に使用される InfraEnv を指定するために使用されます。bmac.agent-install.openshift.io/hostname ラベルは、ホスト名を手動で設定するために使用されます。

      インストールディスクを手動で指定する場合は、BareMetalHost 仕様の rootDeviceHints を使用できます。rootDeviceHints が提供されていない場合、エージェントは、インストール要件により適したインストールディスクを選択します。rootDeviceHints の詳細は、BareMetalHost ドキュメントの rootDeviceHints セクションを参照してください。

      oc apply -f -
      apiVersion: metal3.io/v1alpha1
      kind: BareMetalHost
      metadata:
        name: ${WORKER_NAME}
        namespace: ${HOSTED_CONTROL_PLANE_NAMESPACE}
        labels:
          infraenvs.agent-install.openshift.io: ${HOSTED_CLUSTER_NAME}
        annotations:
          inspect.metal3.io: disabled
          bmac.agent-install.openshift.io/hostname: ${WORKER_NAME}
      spec:
        automatedCleaningMode: disabled
        bmc:
          disableCertificateVerification: True
          address: ${REDFISH}
          credentialsName: ${WORKER_NAME}-bmc-secret
        bootMACAddress: ${BOOT_MAC_ADDRESS}
        online: true
      Copy to Clipboard Toggle word wrap

      エージェントは自動的に承認されます。承認されない場合は、bootMACAddress が正しいことを確認してください。

      BareMetalHost がプロビジョニングされます。

      oc -n ${HOSTED_CONTROL_PLANE_NAMESPACE} get bmh
      Copy to Clipboard Toggle word wrap

      以下の出力例を参照してください。

      NAME           STATE          CONSUMER   ONLINE   ERROR   AGE
      ocp-worker-0   provisioning              true             2m50s
      Copy to Clipboard Toggle word wrap

      BareMetalHost は最終的に provisioned 状態に達します。

      oc -n ${HOSTED_CONTROL_PLANE_NAMESPACE} get bmh
      Copy to Clipboard Toggle word wrap

      以下の出力例を参照してください。

      NAME           STATE          CONSUMER   ONLINE   ERROR   AGE
      ocp-worker-0   provisioned               true             72s
      Copy to Clipboard Toggle word wrap

      プロビジョニング済み とは、ホストが virtualCD から正しく起動するように設定されたことを意味します。エージェントが表示されるまで少し時間がかかります。

      oc -n ${HOSTED_CONTROL_PLANE_NAMESPACE} get agent
      Copy to Clipboard Toggle word wrap

      以下の出力例を参照してください。

      NAME                                   CLUSTER   APPROVED   ROLE          STAGE
      4dac1ab2-7dd5-4894-a220-6a3473b67ee6             true       auto-assign
      Copy to Clipboard Toggle word wrap

      エージェントは自動的に承認されます。

    3. 他のすべてのホストに対して、このプロセスを繰り返します。

      oc -n ${HOSTED_CONTROL_PLANE_NAMESPACE} get agent
      Copy to Clipboard Toggle word wrap

      以下の出力例を参照してください。

    NAME                                   CLUSTER   APPROVED   ROLE          STAGE
    4dac1ab2-7dd5-4894-a220-6a3473b67ee6             true       auto-assign
    d9198891-39f4-4930-a679-65fb142b108b             true       auto-assign
    da503cf1-a347-44f2-875c-4960ddb04091             true       auto-assign
    Copy to Clipboard Toggle word wrap
1.7.3.6.3. 関連情報

rootDeviceHints の詳細は、BareMetalHost ドキュメントの rootDeviceHints セクションを参照してください。

1.7.3.7. ベアメタル上でのホステッドクラスターの作成 (テクノロジープレビュー)

クラスターにデフォルトのストレージクラスが設定されていることを確認します。設定されていない場合は、PVC が保留になる可能性があります。

  1. 次のコマンドを入力し、変数例を実際の情報に置き換えます。

    export CLUSTERS_NAMESPACE="clusters"
    export HOSTED_CLUSTER_NAME="example"
    export HOSTED_CONTROL_PLANE_NAMESPACE="${CLUSTERS_NAMESPACE}-${HOSTED_CLUSTER_NAME}" 
    1
    
    export BASEDOMAIN="krnl.es"
    export PULL_SECRET_FILE=$PWD/pull-secret
    export MACHINE_CIDR=192.168.122.0/24
    oc create ns ${HOSTED_CONTROL_PLANE_NAMESPACE}
    
    hypershift create cluster agent \
        --name=${HOSTED_CLUSTER_NAME} \
        --pull-secret=${PULL_SECRET_FILE} \
        --agent-namespace=${HOSTED_CONTROL_PLANE_NAMESPACE} \
        --base-domain=${BASEDOMAIN} \
        --api-server-address=api.${HOSTED_CLUSTER_NAME}.${BASEDOMAIN} \
    Copy to Clipboard Toggle word wrap
    1
    通常、namespace は HyperShift Operator によって作成されますが、エージェントクラスターの作成では、namespace がすでに存在している必要があるクラスター API プロバイダーロールが生成されます。
  2. しばらくしてから、次のコマンドを入力して、Hosted control plane の Pod が稼働中であることを確認します。

    oc -n ${HOSTED_CONTROL_PLANE_NAMESPACE} get pods
    Copy to Clipboard Toggle word wrap

    以下の出力例を参照してください。

    NAME                                             READY   STATUS    RESTARTS   AGE
    capi-provider-7dcf5fc4c4-nr9sq                   1/1     Running   0          4m32s
    catalog-operator-6cd867cc7-phb2q                 2/2     Running   0          2m50s
    certified-operators-catalog-884c756c4-zdt64      1/1     Running   0          2m51s
    cluster-api-f75d86f8c-56wfz                      1/1     Running   0          4m32s
    cluster-autoscaler-7977864686-2rz4c              1/1     Running   0          4m13s
    cluster-network-operator-754cf4ffd6-lwfm2        1/1     Running   0          2m51s
    cluster-policy-controller-784f995d5-7cbrz        1/1     Running   0          2m51s
    cluster-version-operator-5c68f7f4f8-lqzcm        1/1     Running   0          2m51s
    community-operators-catalog-58599d96cd-vpj2v     1/1     Running   0          2m51s
    control-plane-operator-f6b4c8465-4k5dh           1/1     Running   0          4m32s
    etcd-0                                           1/1     Running   0          4m13s
    hosted-cluster-config-operator-c4776f89f-dt46j   1/1     Running   0          2m51s
    ignition-server-7cd8676fc5-hjx29                 1/1     Running   0          4m22s
    ingress-operator-75484cdc8c-zhdz5                1/2     Running   0          2m51s
    konnectivity-agent-c5485c9df-jsm9s               1/1     Running   0          4m13s
    konnectivity-server-85dc754888-7z8vm             1/1     Running   0          4m13s
    kube-apiserver-db5fb5549-zlvpq                   3/3     Running   0          4m13s
    kube-controller-manager-5fbf7b7b7b-mrtjj         1/1     Running   0          90s
    kube-scheduler-776c59d757-kfhv6                  1/1     Running   0          3m12s
    machine-approver-c6b947895-lkdbk                 1/1     Running   0          4m13s
    oauth-openshift-787b87cff6-trvd6                 2/2     Running   0          87s
    olm-operator-69c4657864-hxwzk                    2/2     Running   0          2m50s
    openshift-apiserver-67f9d9c5c7-c9bmv             2/2     Running   0          89s
    openshift-controller-manager-5899fc8778-q89xh    1/1     Running   0          2m51s
    openshift-oauth-apiserver-569c78c4d-568v8        1/1     Running   0          2m52s
    packageserver-ddfffb8d7-wlz6l                    2/2     Running   0          2m50s
    redhat-marketplace-catalog-7dd77d896-jtxkd       1/1     Running   0          2m51s
    redhat-operators-catalog-d66b5c965-qwhn7         1/1     Running   0          2m51s
    Copy to Clipboard Toggle word wrap

次に、ホスト型クラスターへのアクセス の手順に従って、ホスト型クラスターにアクセスできます。

1.7.3.8. ホスト型クラスターの作成の確認 (テクノロジープレビュー)

デプロイメントプロセスが完了したら、ホステッドクラスターが正常に作成されたことを確認できます。ホステッドクラスターの作成から数分後に、次の手順に従います。

  1. 次の extract コマンドを入力して、新しいホステッドクラスターの kubeconfig を取得します。

    oc extract -n kni21 secret/kni21-admin-kubeconfig --to=- > kubeconfig-kni21
    # kubeconfig
    Copy to Clipboard Toggle word wrap
  2. kubeconfig を使用して、ホステッドクラスターのクラスター Operator を表示します。以下のコマンドを入力します。

    oc get co --kubeconfig=kubeconfig-kni21
    Copy to Clipboard Toggle word wrap

    以下の出力例を参照してください。

    NAME                                       VERSION   AVAILABLE   PROGRESSING   DEGRADED   SINCE   MESSAGE
    console                                    4.10.26   True        False         False      2m38s
    csi-snapshot-controller                    4.10.26   True        False         False      4m3s
    dns                                        4.10.26   True        False         False      2m52s
    image-registry                             4.10.26   True        False         False      2m8s
    ingress                                    4.10.26   True        False         False      22m
    kube-apiserver                             4.10.26   True        False         False      23m
    kube-controller-manager                    4.10.26   True        False         False      23m
    kube-scheduler                             4.10.26   True        False         False      23m
    kube-storage-version-migrator              4.10.26   True        False         False      4m52s
    monitoring                                 4.10.26   True        False         False      69s
    network                                    4.10.26   True        False         False      4m3s
    node-tuning                                4.10.26   True        False         False      2m22s
    openshift-apiserver                        4.10.26   True        False         False      23m
    openshift-controller-manager               4.10.26   True        False         False      23m
    openshift-samples                          4.10.26   True        False         False      2m15s
    operator-lifecycle-manager                 4.10.26   True        False         False      22m
    operator-lifecycle-manager-catalog         4.10.26   True        False         False      23m
    operator-lifecycle-manager-packageserver   4.10.26   True        False         False      23m
    service-ca                                 4.10.26   True        False         False      4m41s
    storage                                    4.10.26   True        False         False      4m43s
    Copy to Clipboard Toggle word wrap
  3. 次のコマンドを入力して、ホステッドクラスター上で実行中の Pod を表示することもできます。

    oc get pods -A --kubeconfig=kubeconfig-kni21
    Copy to Clipboard Toggle word wrap

    以下の出力例を参照してください。

    NAMESPACE                                          NAME                                                      READY   STATUS             RESTARTS        AGE
    kube-system                                        konnectivity-agent-khlqv                                  0/1     Running            0               3m52s
    kube-system                                        konnectivity-agent-nrbvw                                  0/1     Running            0               4m24s
    kube-system                                        konnectivity-agent-s5p7g                                  0/1     Running            0               4m14s
    kube-system                                        kube-apiserver-proxy-asus3-vm1.kni.schmaustech.com        1/1     Running            0               5m56s
    kube-system                                        kube-apiserver-proxy-asus3-vm2.kni.schmaustech.com        1/1     Running            0               6m37s
    kube-system                                        kube-apiserver-proxy-asus3-vm3.kni.schmaustech.com        1/1     Running            0               6m17s
    openshift-cluster-node-tuning-operator             cluster-node-tuning-operator-798fcd89dc-9cf2k             1/1     Running            0               20m
    openshift-cluster-node-tuning-operator             tuned-dhw5p                                               1/1     Running            0               109s
    openshift-cluster-node-tuning-operator             tuned-dlp8f                                               1/1     Running            0               110s
    openshift-cluster-node-tuning-operator             tuned-l569k                                               1/1     Running            0               109s
    openshift-cluster-samples-operator                 cluster-samples-operator-6b5bcb9dff-kpnbc                 2/2     Running            0               20m
    openshift-cluster-storage-operator                 cluster-storage-operator-5f784969f5-vwzgz                 1/1     Running            1 (113s ago)    20m
    openshift-cluster-storage-operator                 csi-snapshot-controller-6b7687b7d9-7nrfw                  1/1     Running            0               3m8s
    openshift-cluster-storage-operator                 csi-snapshot-controller-6b7687b7d9-csksg                  1/1     Running            0               3m9s
    openshift-cluster-storage-operator                 csi-snapshot-controller-operator-7f4d9fc5b8-hkvrk         1/1     Running            0               20m
    openshift-cluster-storage-operator                 csi-snapshot-webhook-6759b5dc8b-7qltn                     1/1     Running            0               3m12s
    openshift-cluster-storage-operator                 csi-snapshot-webhook-6759b5dc8b-f8bqk                     1/1     Running            0               3m12s
    openshift-console-operator                         console-operator-8675b58c4c-flc5p                         1/1     Running            1 (96s ago)     20m
    openshift-console                                  console-5cbf6c7969-6gk6z                                  1/1     Running            0               119s
    openshift-console                                  downloads-7bcd756565-6wj5j                                1/1     Running            0               4m3s
    openshift-dns-operator                             dns-operator-77d755cd8c-xjfbn                             2/2     Running            0               21m
    openshift-dns                                      dns-default-jwjkz                                         2/2     Running            0               113s
    openshift-dns                                      dns-default-kfqnh                                         2/2     Running            0               113s
    openshift-dns                                      dns-default-xlqsm                                         2/2     Running            0               113s
    openshift-dns                                      node-resolver-jzxnd                                       1/1     Running            0               110s
    openshift-dns                                      node-resolver-xqdr5                                       1/1     Running            0               110s
    openshift-dns                                      node-resolver-zl6h4                                       1/1     Running            0               110s
    openshift-image-registry                           cluster-image-registry-operator-64fcfdbf5-r7d5t           1/1     Running            0               20m
    openshift-image-registry                           image-registry-7fdfd99d68-t9pq9                           1/1     Running            0               53s
    openshift-image-registry                           node-ca-hkfnr                                             1/1     Running            0               56s
    openshift-image-registry                           node-ca-vlsdl                                             1/1     Running            0               56s
    openshift-image-registry                           node-ca-xqnsw                                             1/1     Running            0               56s
    openshift-ingress-canary                           ingress-canary-86z6r                                      1/1     Running            0               4m13s
    openshift-ingress-canary                           ingress-canary-8jhxk                                      1/1     Running            0               3m52s
    openshift-ingress-canary                           ingress-canary-cv45h                                      1/1     Running            0               4m24s
    openshift-ingress                                  router-default-6bb8944f66-z2lxr                           1/1     Running            0               20m
    openshift-kube-storage-version-migrator-operator   kube-storage-version-migrator-operator-56b57b4844-p9zgp   1/1     Running            1 (2m16s ago)   20m
    openshift-kube-storage-version-migrator            migrator-58bb4d89d5-5sl9w                                 1/1     Running            0               3m30s
    openshift-monitoring                               alertmanager-main-0                                       6/6     Running            0               100s
    openshift-monitoring                               cluster-monitoring-operator-5bc5885cd4-dwbc4              2/2     Running            0               20m
    openshift-monitoring                               grafana-78f798868c-wd84p                                  3/3     Running            0               94s
    openshift-monitoring                               kube-state-metrics-58b8f97f6c-6kp4v                       3/3     Running            0               104s
    openshift-monitoring                               node-exporter-ll7cp                                       2/2     Running            0               103s
    openshift-monitoring                               node-exporter-tgsqg                                       2/2     Running            0               103s
    openshift-monitoring                               node-exporter-z99gr                                       2/2     Running            0               103s
    openshift-monitoring                               openshift-state-metrics-677b9fb74f-qqp6g                  3/3     Running            0               104s
    openshift-monitoring                               prometheus-adapter-f69fff5f9-7tdn9                        0/1     Running            0               17s
    openshift-monitoring                               prometheus-k8s-0                                          6/6     Running            0               93s
    openshift-monitoring                               prometheus-operator-6b9d4fd9bd-tqfcx                      2/2     Running            0               2m2s
    openshift-monitoring                               telemeter-client-74d599658c-wqw5j                         3/3     Running            0               101s
    openshift-monitoring                               thanos-querier-64c8757854-z4lll                           6/6     Running            0               98s
    openshift-multus                                   multus-additional-cni-plugins-cqst9                       1/1     Running            0               6m14s
    openshift-multus                                   multus-additional-cni-plugins-dbmkj                       1/1     Running            0               5m56s
    openshift-multus                                   multus-additional-cni-plugins-kcwl9                       1/1     Running            0               6m14s
    openshift-multus                                   multus-admission-controller-22cmb                         2/2     Running            0               3m52s
    openshift-multus                                   multus-admission-controller-256tn                         2/2     Running            0               4m13s
    openshift-multus                                   multus-admission-controller-mz9jm                         2/2     Running            0               4m24s
    openshift-multus                                   multus-bxgvr                                              1/1     Running            0               6m14s
    openshift-multus                                   multus-dmkdc                                              1/1     Running            0               6m14s
    openshift-multus                                   multus-gqw2f                                              1/1     Running            0               5m56s
    openshift-multus                                   network-metrics-daemon-6cx4x                              2/2     Running            0               5m56s
    openshift-multus                                   network-metrics-daemon-gz4jp                              2/2     Running            0               6m13s
    openshift-multus                                   network-metrics-daemon-jq9j4                              2/2     Running            0               6m13s
    openshift-network-diagnostics                      network-check-source-8497dc8f86-cn4nm                     1/1     Running            0               5m59s
    openshift-network-diagnostics                      network-check-target-d8db9                                1/1     Running            0               5m58s
    openshift-network-diagnostics                      network-check-target-jdbv8                                1/1     Running            0               5m58s
    openshift-network-diagnostics                      network-check-target-zzmdv                                1/1     Running            0               5m55s
    openshift-network-operator                         network-operator-f5b48cd67-x5dcz                          1/1     Running            0               21m
    openshift-sdn                                      sdn-452r2                                                 2/2     Running            0               5m56s
    openshift-sdn                                      sdn-68g69                                                 2/2     Running            0               6m
    openshift-sdn                                      sdn-controller-4v5mv                                      2/2     Running            0               5m56s
    openshift-sdn                                      sdn-controller-crscc                                      2/2     Running            0               6m1s
    openshift-sdn                                      sdn-controller-fxtn9                                      2/2     Running            0               6m1s
    openshift-sdn                                      sdn-n5jm5                                                 2/2     Running            0               6m
    openshift-service-ca-operator                      service-ca-operator-5bf7f9d958-vnqcg                      1/1     Running            1 (2m ago)      20m
    openshift-service-ca                               service-ca-6c54d7944b-v5mrw                               1/1     Running            0               3m8s
    Copy to Clipboard Toggle word wrap

Kubernetes Operator コンソール用のマルチクラスターエンジンを使用して、Red Hat OpenShift Container Platform のホステッドクラスターを作成および管理できます。ホステッドコントロールプレーンは、ベアメタル上でテクノロジープレビューとして利用できます。

1.7.4.1. 前提条件

ホステッドコントロールプレーンクラスターを作成する前に、ベアメタル用のホステッドコントロールプレーンを設定する必要があります。詳細については、ベアメタルでのホスティングクラスターの設定 (テクノロジープレビュー) を参照してください。

1.7.4.2. ホステッドクラスターの NodePool オブジェクトのスケーリング

NodePool オブジェクトをスケーリングして、ホステッドクラスターにノードを追加します。

  1. NodePool オブジェクトを 2 つのノードにスケーリングします。

    oc -n ${CLUSTERS_NAMESPACE} scale nodepool ${NODEPOOL_NAME} --replicas 2
    Copy to Clipboard Toggle word wrap

    ClusterAPI Agent エージェントプロバイダーは、ホステッドクラスターに割り当てられる 2 つのエージェントをランダムに選択します。これらのエージェントはさまざまな状態を経て、最終的に OpenShift Container Platform ノードとしてホステッドクラスターに参加します。エージェントは次の順序で状態を通過します。

    • binding
    • discovering
    • insufficient
    • installing
    • installing-in-progress
    • added-to-existing-cluster

      oc -n ${HOSTED_CONTROL_PLANE_NAMESPACE} get agent
      Copy to Clipboard Toggle word wrap

      以下の出力例を参照してください。

      NAME                                   CLUSTER         APPROVED   ROLE          STAGE
      4dac1ab2-7dd5-4894-a220-6a3473b67ee6   hypercluster1   true       auto-assign
      d9198891-39f4-4930-a679-65fb142b108b                   true       auto-assign
      da503cf1-a347-44f2-875c-4960ddb04091   hypercluster1   true       auto-assign
      
      oc -n ${HOSTED_CONTROL_PLANE_NAMESPACE} get agent -o jsonpath='{range .items[*]}BMH: {@.metadata.labels.agent-install\.openshift\.io/bmh} Agent: {@.metadata.name} State: {@.status.debugInfo.state}{"\n"}{end}'
      
      BMH: ocp-worker-2 Agent: 4dac1ab2-7dd5-4894-a220-6a3473b67ee6 State: binding
      BMH: ocp-worker-0 Agent: d9198891-39f4-4930-a679-65fb142b108b State: known-unbound
      BMH: ocp-worker-1 Agent: da503cf1-a347-44f2-875c-4960ddb04091 State: insufficient
      Copy to Clipboard Toggle word wrap
  2. エージェントが added-to-existing-cluster 状態に達したら、次のコマンドを入力して、OpenShift Container Platform ノードが表示されることを確認します。

    oc --kubeconfig ${HOSTED_CLUSTER_NAME}.kubeconfig get nodes
    Copy to Clipboard Toggle word wrap

    以下の出力例を参照してください。

    NAME           STATUS   ROLES    AGE     VERSION
    ocp-worker-1   Ready    worker   5m41s   v1.24.0+3882f8f
    ocp-worker-2   Ready    worker   6m3s    v1.24.0+3882f8f
    Copy to Clipboard Toggle word wrap

    Cluster Operator は、ワークロードをノードに追加することによって調整を開始します。

  3. 次のコマンドを入力して、NodePool オブジェクトをスケールアップしたときに 2 台のマシンが作成されたことを確認します。

    oc -n ${HOSTED_CONTROL_PLANE_NAMESPACE} get machines
    Copy to Clipboard Toggle word wrap

    以下の出力例を参照してください。

    NAME                            CLUSTER               NODENAME       PROVIDERID                                     PHASE     AGE   VERSION
    hypercluster1-c96b6f675-m5vch   hypercluster1-b2qhl   ocp-worker-1   agent://da503cf1-a347-44f2-875c-4960ddb04091   Running   15m   4.12z
    hypercluster1-c96b6f675-tl42p   hypercluster1-b2qhl   ocp-worker-2   agent://4dac1ab2-7dd5-4894-a220-6a3473b67ee6   Running   15m   4.12z
    Copy to Clipboard Toggle word wrap

    clusterversion 調整プロセスは最終的に、Ingress および Console クラスター Operator のみが欠落しているポイントに到達します。

    oc --kubeconfig ${HOSTED_CLUSTER_NAME}.kubeconfig get clusterversion,co
    
    NAME                                         VERSION   AVAILABLE   PROGRESSING   SINCE   STATUS
    clusterversion.config.openshift.io/version             False       True          40m     Unable to apply 4.12z: the cluster operator console has not yet successfully rolled out
    
    NAME                                                                           VERSION   AVAILABLE   PROGRESSING   DEGRADED   SINCE   MESSAGE
    clusteroperator.config.openshift.io/console                                    4.12z    False       False         False      11m     RouteHealthAvailable: failed to GET route (https://console-openshift-console.apps.hypercluster1.domain.com): Get "https://console-openshift-console.apps.hypercluster1.domain.com": dial tcp 10.19.3.29:443: connect: connection refused
    clusteroperator.config.openshift.io/csi-snapshot-controller                    4.12z    True        False         False      10m
    clusteroperator.config.openshift.io/dns                                        4.12z    True        False         False      9m16s
    clusteroperator.config.openshift.io/image-registry                             4.12z    True        False         False      9m5s
    clusteroperator.config.openshift.io/ingress                                    4.12z    True        False         True       39m     The "default" ingress controller reports Degraded=True: DegradedConditions: One or more other status conditions indicate a degraded state: CanaryChecksSucceeding=False (CanaryChecksRepetitiveFailures: Canary route checks for the default ingress controller are failing)
    clusteroperator.config.openshift.io/insights                                   4.12z    True        False         False      11m
    clusteroperator.config.openshift.io/kube-apiserver                             4.12z    True        False         False      40m
    clusteroperator.config.openshift.io/kube-controller-manager                    4.12z    True        False         False      40m
    clusteroperator.config.openshift.io/kube-scheduler                             4.12z    True        False         False      40m
    clusteroperator.config.openshift.io/kube-storage-version-migrator              4.12z    True        False         False      10m
    clusteroperator.config.openshift.io/monitoring                                 4.12z    True        False         False      7m38s
    clusteroperator.config.openshift.io/network                                    4.12z    True        False         False      11m
    clusteroperator.config.openshift.io/openshift-apiserver                        4.12z    True        False         False      40m
    clusteroperator.config.openshift.io/openshift-controller-manager               4.12z    True        False         False      40m
    clusteroperator.config.openshift.io/openshift-samples                          4.12z    True        False         False      8m54s
    clusteroperator.config.openshift.io/operator-lifecycle-manager                 4.12z    True        False         False      40m
    clusteroperator.config.openshift.io/operator-lifecycle-manager-catalog         4.12z    True        False         False      40m
    clusteroperator.config.openshift.io/operator-lifecycle-manager-packageserver   4.12z    True        False         False      40m
    clusteroperator.config.openshift.io/service-ca                                 4.12z    True        False         False      11m
    clusteroperator.config.openshift.io/storage                                    4.12z    True        False         False      11m
    Copy to Clipboard Toggle word wrap

1.7.4.3. ベアメタル上のホステッドクラスターでの Ingress の処理

すべての OpenShift Container Platform クラスターには、外部 DNS レコードが関連付けられていると想定されるデフォルトのアプリケーション Ingress コントローラーがセットアップされています。たとえば、ベースドメイン krnl.esexample という名前の HyperShift クラスターを作成する場合は、ワイルドカードドメイン *.apps.example.krnl.es がルーティング可能であると予想することができます。

*.apps のロードバランサーとワイルドカード DNS レコードをセットアップできます。このプロセスでは、MetalLB をデプロイし、Ingress デプロイメントにルーティングする新しいロードバランサーサービスを設定し、ワイルドカード DNS エントリーをロードバランサー IP アドレスに割り当てる必要があります。

  1. LoadBalancer タイプのサービスを作成するときに、MetalLB がサービスの外部 IP アドレスを追加するように、MetalLB をセットアップします。

    1. MetalLB Operator の設定を含む YAML ファイルを作成します。

      apiVersion: v1
      kind: Namespace
      metadata:
        name: metallb
        labels:
          openshift.io/cluster-monitoring: "true"
        annotations:
          workload.openshift.io/allowed: management
      ---
      apiVersion: operators.coreos.com/v1
      kind: OperatorGroup
      metadata:
        name: metallb-operator-operatorgroup
        namespace: metallb
      ---
      apiVersion: operators.coreos.com/v1alpha1
      kind: Subscription
      metadata:
        name: metallb-operator
        namespace: metallb
      spec:
        channel: "stable"
        name: metallb-operator
        source: redhat-operators
        sourceNamespace: openshift-marketplace
      Copy to Clipboard Toggle word wrap
    2. ファイルを metallb-operator-config.yaml として保存します。
    3. 以下のコマンドを入力して設定を適用します。
    oc apply -f metallb-operator-config.yaml
    Copy to Clipboard Toggle word wrap
  2. Operator の実行後、MetalLB インスタンスを作成します。

    1. MetalLB インスタンスの設定を含む YAML ファイルを作成します。

      apiVersion: metallb.io/v1beta1
      kind: MetalLB
      metadata:
        name: metallb
        namespace: metallb
      Copy to Clipboard Toggle word wrap
    2. ファイルを metallb-instance-config.yaml として保存します。
    3. 次のコマンドを入力して、MetalLB インスタンスを作成します。
    oc apply -f metallb-instance-config.yaml
    Copy to Clipboard Toggle word wrap
  3. 2 つのリソースを作成して MetalLB Operator を設定します。

    • 単一の IP アドレスを持つ IPAddressPool リソース。この IP アドレスは、クラスターノードが使用するネットワークと同じサブネット上にある必要があります。
    • IPAddressPool リソースが BGP プロトコルを通じて提供するロードバランサーの IP アドレスをアドバタイズするための BGP アドバタイズリソース。

      重要: 環境のアドレスと一致するように INGRESS_IP 環境変数を変更します。

      1. 設定を含む YAML ファイルを作成します。

        export INGRESS_IP=192.168.122.23
        
        apiVersion: metallb.io/v1beta1
        kind: IPAddressPool
        metadata:
          name: ingress-public-ip
          namespace: metallb
        spec:
          protocol: layer2
          autoAssign: false
          addresses:
            - ${INGRESS_IP}-${INGRESS_IP}
        ---
        apiVersion: metallb.io/v1beta1
        kind: BGPAdvertisement
        metadata:
          name: ingress-public-ip
          namespace: metallb
        spec:
          ipAddressPools:
            - ingress-public-ip
        Copy to Clipboard Toggle word wrap
      2. ファイルを ipaddresspool-bgpadvertisement-config.yaml として保存します。
      3. 次のコマンドを入力してリソースを作成します。
    oc apply -f ipaddresspool-bgpadvertisement-config.yaml
    Copy to Clipboard Toggle word wrap
  4. 以下の手順に従って、MetalLB を介して OpenShift Container Platform ルーターを公開します。

    1. YAML ファイルを作成して、Ingress トラフィックを Ingress デプロイメントにルーティングする LoadBalancer サービスをセットアップします。

      kind: Service
      apiVersion: v1
      metadata:
        annotations:
          metallb.universe.tf/address-pool: ingress-public-ip
        name: metallb-ingress
        namespace: openshift-ingress
      spec:
        ports:
          - name: http
            protocol: TCP
            port: 80
            targetPort: 80
          - name: https
            protocol: TCP
            port: 443
            targetPort: 443
        selector:
          ingresscontroller.operator.openshift.io/deployment-ingresscontroller: default
        type: LoadBalancer
      Copy to Clipboard Toggle word wrap
    2. ファイルを metallb-loadbalancer-service.yaml として保存します。
    3. 次のコマンドを入力して、YAML ファイルから設定を適用します。

      oc apply -f metallb-loadbalancer-service.yaml
      Copy to Clipboard Toggle word wrap
    4. 次のコマンドを入力して、OpenShift Container Platform コンソールにアクセスします。

      curl -kI https://console-openshift-console.apps.example.krnl.es
      
      HTTP/1.1 200 OK
      Copy to Clipboard Toggle word wrap
    5. clusterversionclusteroperator の値をチェックして、すべてが実行されていることを確認します。以下のコマンドを入力します。

      oc --kubeconfig ${HOSTED_CLUSTER_NAME}.kubeconfig get clusterversion,co
      Copy to Clipboard Toggle word wrap

      以下の出力例を参照してください。

    NAME                                         VERSION   AVAILABLE   PROGRESSING   SINCE   STATUS
    clusterversion.config.openshift.io/version   4.12z    True        False         3m32s   Cluster version is 4.12z
    
    NAME                                                                           VERSION   AVAILABLE   PROGRESSING   DEGRADED   SINCE   MESSAGE
    clusteroperator.config.openshift.io/console                                    4.12z    True        False         False      3m50s
    clusteroperator.config.openshift.io/csi-snapshot-controller                    4.12z    True        False         False      25m
    clusteroperator.config.openshift.io/dns                                        4.12z    True        False         False      23m
    clusteroperator.config.openshift.io/image-registry                             4.12z    True        False         False      23m
    clusteroperator.config.openshift.io/ingress                                    4.12z    True        False         False      53m
    clusteroperator.config.openshift.io/insights                                   4.12z    True        False         False      25m
    clusteroperator.config.openshift.io/kube-apiserver                             4.12z    True        False         False      54m
    clusteroperator.config.openshift.io/kube-controller-manager                    4.12z    True        False         False      54m
    clusteroperator.config.openshift.io/kube-scheduler                             4.12z    True        False         False      54m
    clusteroperator.config.openshift.io/kube-storage-version-migrator              4.12z    True        False         False      25m
    clusteroperator.config.openshift.io/monitoring                                 4.12z    True        False         False      21m
    clusteroperator.config.openshift.io/network                                    4.12z    True        False         False      25m
    clusteroperator.config.openshift.io/openshift-apiserver                        4.12z    True        False         False      54m
    clusteroperator.config.openshift.io/openshift-controller-manager               4.12z    True        False         False      54m
    clusteroperator.config.openshift.io/openshift-samples                          4.12z    True        False         False      23m
    clusteroperator.config.openshift.io/operator-lifecycle-manager                 4.12z    True        False         False      54m
    clusteroperator.config.openshift.io/operator-lifecycle-manager-catalog         4.12z    True        False         False      54m
    clusteroperator.config.openshift.io/operator-lifecycle-manager-packageserver   4.12z    True        False         False      54m
    clusteroperator.config.openshift.io/service-ca                                 4.12z    True        False         False      25m
    clusteroperator.config.openshift.io/storage                                    4.12z    True        False         False      25m
    Copy to Clipboard Toggle word wrap

MetalLB の詳細については、OpenShift Container Platform ドキュメントの About MetalLB and the MetalLB Operator を参照してください。

1.7.4.4. ホステッドクラスターのノード自動スケーリングの有効化

ホステッドクラスターにさらに容量が必要で、予備のエージェントが利用可能な場合は、自動スケーリングを有効にして新しいエージェントをインストールできます。

  1. 自動スケーリングを有効にするには、次のコマンドを入力します。この場合、ノードの最小数は 2 で、最大数は 5 です。追加できるノードの最大数は、使用可能なエージェントの数によって制限されます。

    oc -n ${CLUSTERS_NAMESPACE} patch nodepool ${HOSTED_CLUSTER_NAME} --type=json -p '[{"op": "remove", "path": "/spec/replicas"},{"op":"add", "path": "/spec/autoScaling", "value": { "max": 5, "min": 2 }}]'
    Copy to Clipboard Toggle word wrap

    追加のキャパシティーを必要とせずに 10 分が経過すると、エージェントは廃止され、スペアキューに再び配置されます。

  2. 新しいノードを必要とするワークロードを作成します。

    1. 次の例に示すように、ワークロード設定を含む YAML ファイルを作成します。

      apiVersion: apps/v1
      kind: Deployment
      metadata:
        creationTimestamp: null
        labels:
          app: reversewords
        name: reversewords
        namespace: default
      spec:
        replicas: 40
        selector:
          matchLabels:
            app: reversewords
        strategy: {}
        template:
          metadata:
            creationTimestamp: null
            labels:
              app: reversewords
        spec:
          containers:
          - image: quay.io/mavazque/reversewords:latest
            name: reversewords
            resources:
              requests:
                memory: 2Gi
      status: {}
      Copy to Clipboard Toggle word wrap
    2. ファイルを workload-config.yaml として保存します。
    3. 以下のコマンドを入力して、YAML を適用します。
    oc apply -f workload-config.yaml
    Copy to Clipboard Toggle word wrap
  3. 次のコマンドを入力して、残りのエージェントがデプロイされていることを確認します。この例では、スペアエージェント d9198891-39f4-4930-a679-65fb142b108b がプロビジョニングされます。

    oc -n ${HOSTED_CONTROL_PLANE_NAMESPACE} get agent -o jsonpath='{range .items[*]}BMH: {@.metadata.labels.agent-install\.openshift\.io/bmh} Agent: {@.metadata.name} State: {@.status.debugInfo.state}{"\n"}{end}'
    Copy to Clipboard Toggle word wrap

    以下の出力例を参照してください。

    BMH: ocp-worker-2 Agent: 4dac1ab2-7dd5-4894-a220-6a3473b67ee6 State: added-to-existing-cluster
    BMH: ocp-worker-0 Agent: d9198891-39f4-4930-a679-65fb142b108b State: installing-in-progress
    BMH: ocp-worker-1 Agent: da503cf1-a347-44f2-875c-4960ddb04091 State: added-to-existing-cluster
    Copy to Clipboard Toggle word wrap
  4. 次のコマンドを入力してノードを確認すると、新しいノードが出力に表示されます。この例では、ocp-worker-0 がクラスターに追加されています。

    oc --kubeconfig ${HOSTED_CLUSTER_NAME}.kubeconfig get nodes
    Copy to Clipboard Toggle word wrap

    以下の出力例を参照してください。

    NAME           STATUS   ROLES    AGE   VERSION
    ocp-worker-0   Ready    worker   35s   v1.24.0+3882f8f
    ocp-worker-1   Ready    worker   40m   v1.24.0+3882f8f
    ocp-worker-2   Ready    worker   41m   v1.24.0+3882f8f
    Copy to Clipboard Toggle word wrap
  5. ノードを削除するには、次のコマンドを入力してワークロードを削除します。

    oc --kubeconfig ${HOSTED_CLUSTER_NAME}.kubeconfig -n default delete deployment reversewords
    Copy to Clipboard Toggle word wrap
  6. 10 分間待機し、次のコマンドを入力してノードが削除されたことを確認します。

    oc --kubeconfig ${HOSTED_CLUSTER_NAME}.kubeconfig get nodes
    Copy to Clipboard Toggle word wrap

    以下の出力例を参照してください。

    NAME           STATUS   ROLES    AGE   VERSION
    ocp-worker-1   Ready    worker   51m   v1.24.0+3882f8f
    ocp-worker-2   Ready    worker   52m   v1.24.0+3882f8f
    Copy to Clipboard Toggle word wrap
    oc -n ${HOSTED_CONTROL_PLANE_NAMESPACE} get agent -o jsonpath='{range .items[*]}BMH: {@.metadata.labels.agent-install\.openshift\.io/bmh} Agent: {@.metadata.name} State: {@.status.debugInfo.state}{"\n"}{end}'
    
    BMH: ocp-worker-2 Agent: 4dac1ab2-7dd5-4894-a220-6a3473b67ee6 State: added-to-existing-cluster
    BMH: ocp-worker-0 Agent: d9198891-39f4-4930-a679-65fb142b108b State: known-unbound
    BMH: ocp-worker-1 Agent: da503cf1-a347-44f2-875c-4960ddb04091 State: added-to-existing-cluster
    Copy to Clipboard Toggle word wrap

1.7.4.5. ベアメタル上のホステッドクラスターの破棄

コンソールを使用して、ベアメタルホステッドクラスターを破棄できます。ベアメタル上のホステッドクラスターを破壊するには、次の手順を実行します。

  1. コンソールで、Infrastructure > Clusters に移動します。
  2. Clusters ページで、破棄するクラスターを選択します。
  3. Actions メニューで Destroy clusters を選択し、クラスターを削除します。

1.7.4.6. 関連情報

ホストされたコントロールプレーンと Red Hat OpenShift Virtualization を使用すると、KubeVirt 仮想マシンによってホストされるワーカーノードを含む OpenShift Container Platform クラスターを作成できます。OpenShift Virtualization 上の Hosted Control Plane には、次のようないくつかの利点があります。

  • ホストされたコントロールプレーンとホストされたクラスターを同じ基盤となるベアメタルインフラストラクチャーにパックすることで、リソースの使用率を向上します。
  • ホストされたコントロールプレーンとゲストクラスターを分離して強力な分離を実現
  • ベアメタルノードのブートストラッププロセスを排除することで、クラスターのプロビジョニング時間を短縮します。
  • 同じベース OpenShift Container Platform クラスターの下で多くのリリースを管理します

OpenShift Virtualization でホストされたコントロールプレーンクラスターを作成する方法については、次のセクションを参照してください。

1.7.5.1. 前提条件

OpenShift Virtualization 上に OpenShift Container Platform クラスターを作成するには、以下の前提条件を満たす必要があります。

  • KUBECONFIG 環境変数で指定された OpenShift Container Platform クラスター、バージョン 4.12 以降への管理者アクセスが必要です。
  • OpenShift Container Platform マネージドクラスターでは、次の DNS に示すように、ワイルドカード DNS ルートが有効になっている必要があります。

    oc patch ingresscontroller -n openshift-ingress-operator default --type=json -p '[{ "op": "add", "path": "/spec/routeAdmission", "value": {wildcardPolicy: "WildcardsAllowed"}}]'
    Copy to Clipboard Toggle word wrap
  • OpenShift Container Platform マネージドクラスターには OpenShift Virtualization がインストールされている必要があります。詳細は、Web コンソールを使用した OpenShift Virtualization のインストール を参照してください。
  • OpenShift Container Platform マネージドクラスターは、デフォルトの Pod ネットワーク CNI として OVNKubernetes を使用して設定する必要があります。
  • OpenShift Container Platform マネージドクラスターにはデフォルトのストレージクラスが必要です。詳細は、インストール後のストレージ設定 を参照してください。次の例は、デフォルトのストレージクラスを設定する方法を示しています。

    oc patch storageclass ocs-storagecluster-ceph-rbd -p '{"metadata": {"annotations":{"storageclass.kubernetes.io/is-default-class":"true"}}}'
    Copy to Clipboard Toggle word wrap
  • quay.io/openshift-release-dev リポジトリーの有効なプルシークレットファイルが必要です。詳細は、ユーザーがプロビジョニングしたインフラストラクチャーを使用して x86_64 プラットフォームに OpenShift をインストールする を参照してください。
  • ホステッドコントロールプレーン機能を有効にする必要があります。詳細は、ホストされたコントロールプレーン機能の有効化 を参照してください。
  • ホストされたコントロールプレーン機能を有効にした後、ホストされたコントロールプレーン (hypershift) コマンドラインインターフェイスバイナリーをインストールする 必要があります。
  • クラスターをプロビジョニングする前に、ロードバランサーを設定する必要があります。詳細は、ロードバランサーの設定 を参照してください。

1.7.5.2. KubeVirt プラットフォームを使用したホストされたクラスターの作成

  1. ゲストクラスターを作成するには、環境変数と hypershift コマンドラインインターフェイスを使用します。

    export CLUSTER_NAME=example
    export PULL_SECRET="$HOME/pull-secret"
    export MEM="6Gi"
    export CPU="2"
    export WORKER_COUNT="2"
    
    hypershift create cluster kubevirt \
    --name $CLUSTER_NAME \
    --node-pool-replicas $WORKER_COUNT \
    --pull-secret $PULL_SECRET \
    --memory $MEM \
    --cores $CPU
    Copy to Clipboard Toggle word wrap

    必要に応じて値を置き換えます。

    注記: --release-image フラグを使用して、特定の OpenShift Container Platform リリースでホステッドクラスターをセットアップできます。

    --node-pool-replicas フラグに従って、2 つの仮想マシンワーカーレプリカを持つクラスターに対してデフォルトのノードプールが作成されます。

    しばらくすると、次のコマンドを入力して、ホストされているコントロールプレーン Pod が実行されていることを確認できます。

    oc -n clusters-$CLUSTER_NAME get pods
    Copy to Clipboard Toggle word wrap

    出力例

    NAME                                                  READY   STATUS    RESTARTS   AGE
    capi-provider-5cc7b74f47-n5gkr                        1/1     Running   0          3m
    catalog-operator-5f799567b7-fd6jw                     2/2     Running   0          69s
    certified-operators-catalog-784b9899f9-mrp6p          1/1     Running   0          66s
    cluster-api-6bbc867966-l4dwl                          1/1     Running   0          66s
    .
    .
    .
    redhat-operators-catalog-9d5fd4d44-z8qqk              1/1     Running   0          66s
    Copy to Clipboard Toggle word wrap

    KubeVirt 仮想マシンによってサポートされるワーカーノードを含むゲストクラスターは、通常、完全にプロビジョニングされるまでに 10 ~ 15 分かかります。

  2. ゲストクラスターのステータスを確認するには、対応する HostedCluster リソースを参照してください。

    oc get --namespace clusters hostedclusters
    Copy to Clipboard Toggle word wrap

    次の出力例は、完全にプロビジョニングされた HostedCluster オブジェクトを示しています。

    出力例

    NAMESPACE   NAME      VERSION   KUBECONFIG                 PROGRESS    AVAILABLE   PROGRESSING   MESSAGE
    clusters    example   4.12.7    example-admin-kubeconfig   Completed   True        False         The hosted control plane is available
    Copy to Clipboard Toggle word wrap

1.7.5.3. ホストされたクラスターへのアクセス

ゲストクラスターへのコマンドラインインターフェイスアクセスを取得するには、ゲストクラスターの kubeconfig 環境変数を取得します。

  1. hypershift コマンドラインインターフェイスを使用してゲストクラスターの kubeconfig 環境変数を取得するには、次のコマンドを入力します。

    hypershift create kubeconfig --name $CLUSTER_NAME > $CLUSTER_NAME-kubeconfig
    Copy to Clipboard Toggle word wrap
  2. 次のコマンドを入力してクラスターにアクセスします。

    oc --kubeconfig $CLUSTER_NAME-kubeconfig get nodes
    Copy to Clipboard Toggle word wrap

    出力例

    NAME                  STATUS   ROLES    AGE   VERSION
    example-n6prw         Ready    worker   32m   v1.25.4+18eadca
    example-nc6g4         Ready    worker   32m   v1.25.4+18eadca
    Copy to Clipboard Toggle word wrap

  3. 以下のコマンドを入力してレポートを確認できます。

    oc --kubeconfig $CLUSTER_NAME-kubeconfig get clusterversion
    Copy to Clipboard Toggle word wrap

    出力例

    NAME      VERSION       AVAILABLE   PROGRESSING   SINCE   STATUS
    version   4.12.7        True        False         5m39s   Cluster version is 4.12.7
    Copy to Clipboard Toggle word wrap

1.7.5.4. デフォルトの Ingress と DNS の動作

すべての OpenShift Container Platform クラスターにはデフォルトのアプリケーション Ingress コントローラーが含まれており、これにはワイルドカード DNS レコードが関連付けられている必要があります。デフォルトでは、HyperShift KubeVirt プロバイダーを使用して作成されたゲストクラスターは、自動的に KubeVirt 仮想マシンが実行される基盤となる OpenShift Container Platform クラスターのサブドメインになります。

たとえば、OpenShift Container Platform クラスターには次のデフォルトの Ingress DNS エントリーがある可能性があります。

*.apps.mgmt-cluster.example.com
Copy to Clipboard Toggle word wrap

その結果、guest という名前が付けられ、その基礎となる OpenShift Container Platform クラスター上で実行される KubeVirt ゲストクラスターには、次のデフォルト Ingress が設定されます。

*.apps.guest.apps.mgmt-cluster.example.com
Copy to Clipboard Toggle word wrap

注記: デフォルトの Ingress DNS が適切に機能するには、KubeVirt 仮想マシンをホストする基盤となるクラスターでワイルドカード DNS ルートを許可する必要があります。この動作を設定するには、次のコマンドを入力します。oc patch ingresscontroller -n openshift-ingress-operator default --type=json -p '[{ "op": "add", "path": "/spec/routeAdmission", "value": {wildcardPolicy: "WildcardsAllowed"}}]'

1.7.5.5. Ingress と DNS の動作のカスタマイズ

デフォルトの Ingress および DNS 動作を使用したくない場合は、作成時に一意のベースドメインを使用して KubeVirt ゲストクラスターを設定できます。このオプションでは、作成時に手動の設定手順が必要であり、クラスターの作成、ロードバランサーの作成、およびワイルドカード DNS 設定の 3 つの主要な手順が含まれます。

1.7.5.5.1. 基本ドメインを指定するホステッドクラスターのデプロイ
  1. 基本ドメインを指定するホステッドクラスターを作成するには、次のコマンドを入力します。

    export CLUSTER_NAME=example 
    1
    
    export PULL_SECRET="$HOME/pull-secret"
    export MEM="6Gi"
    export CPU="2"
    export WORKER_COUNT="2"
    export BASE_DOMAIN=hypershift.lab 
    2
    
    
    hypershift create cluster kubevirt \
    --name $CLUSTER_NAME \
    --node-pool-replicas $WORKER_COUNT \
    --pull-secret $PULL_SECRET \
    --memory $MEM \
    --cores $CPU \
    --base-domain $BASE_DOMAIN
    Copy to Clipboard Toggle word wrap
    1
    ホステッドクラスターの名前は、たとえば、example です。
    2
    たとえば、ベースドメインは hypershift.lab です。

    その結果、クラスター名とベースドメイン、またはこの例に示すように .apps.example.hypershift.lab に対して設定された Ingress ワイルドカードを持つホステッドクラスターが作成されます。ホステッドクラスターはデプロイメントを完了せず、Partial ステータスのままです。基本ドメインを設定したため、必要な DNS レコードとロードバランサーが適切に配置されていることを確認する必要があります。

  2. 以下のコマンドを実行します。

    oc get --namespace clusters hostedclusters
    Copy to Clipboard Toggle word wrap

    出力例

    NAME            VERSION   KUBECONFIG                       PROGRESS   AVAILABLE   PROGRESSING   MESSAGE
    example                   example-admin-kubeconfig         Partial    True        False         The hosted control plane is available
    Copy to Clipboard Toggle word wrap

  3. 次のコマンドを入力してクラスターにアクセスします。

    hypershift create kubeconfig --name $CLUSTER_NAME > $CLUSTER_NAME-kubeconfig
    Copy to Clipboard Toggle word wrap
    oc --kubeconfig $CLUSTER_NAME-kubeconfig get co
    Copy to Clipboard Toggle word wrap

    出力例

    NAME                                       VERSION   AVAILABLE   PROGRESSING   DEGRADED   SINCE   MESSAGE
    console                                    4.12.7    False       False         False      30m     RouteHealthAvailable: failed to GET route (https://console-openshift-console.apps.example.hypershift.lab): Get "https://console-openshift-console.apps.example.hypershift.lab": dial tcp: lookup console-openshift-console.apps.example.hypershift.lab on 172.31.0.10:53: no such host
    .
    .
    .
    ingress                                    4.12.7    True        False         True       28m     The "default" ingress controller reports Degraded=True: DegradedConditions: One or more other status conditions indicate a degraded state: CanaryChecksSucceeding=False (CanaryChecksRepetitiveFailures: Canary route checks for the default ingress controller are failing)
    Copy to Clipboard Toggle word wrap

    次の手順では、出力内のエラーを修正します。

    注記: クラスターがベアメタル上にある場合、ロードバランサーサービスをセットアップできるように MetalLB が必要になる場合があります。詳細は、オプション: MetalLB の設定 を参照してください。

1.7.5.5.2. ロードバランサーのセットアップ

KubeVirt VM にルーティングするロードバランサーをセットアップし、ワイルドカード DNS エントリーをロードバランサーの IP アドレスに割り当てます。Ingress トラフィックを KubeVirt VM にルーティングするロードバランサーサービスを作成する必要があります。ホステッドクラスター Ingress を公開する NodePort サービスはすでに存在するため、ノードポートをエクスポートし、それらのポートを対象とするロードバランサーサービスを作成できます。

  1. 次のコマンドを入力して、ノードポートをエクスポートします。

    export HTTP_NODEPORT=$(oc --kubeconfig $CLUSTER_NAME-kubeconfig get services -n openshift-ingress router-nodeport-default -o jsonpath='{.spec.ports[?(@.name=="http")].nodePort}')
    export HTTPS_NODEPORT=$(oc --kubeconfig $CLUSTER_NAME-kubeconfig get services -n openshift-ingress router-nodeport-default -o jsonpath='{.spec.ports[?(@.name=="https")].nodePort}')
    Copy to Clipboard Toggle word wrap
  2. 次のコマンドを入力して、ロードバランサーサービスを作成します。

    oc apply -f -
    apiVersion: v1
    kind: Service
    metadata:
      labels:
        app: $CLUSTER_NAME
      name: $CLUSTER_NAME-apps
      namespace: clusters-$CLUSTER_NAME
    spec:
      ports:
      - name: https-443
        port: 443
        protocol: TCP
        targetPort: ${HTTPS_NODEPORT}
      - name: http-80
        port: 80
        protocol: TCP
        targetPort: ${HTTP_NODEPORT}
      selector:
        kubevirt.io: virt-launcher
      type: LoadBalancer
    Copy to Clipboard Toggle word wrap
1.7.5.5.3. ワイルドカード DNS の設定

ロードバランサーサービスの外部 IP を参照するワイルドカード DNS レコードまたは CNAME を設定します。

  1. 次のコマンドを入力して、外部 IP をエクスポートします。

    export EXTERNAL_IP=$(oc -n clusters-$CLUSTER_NAME get service $CLUSTER_NAME-apps -o jsonpath='{.status.loadBalancer.ingress[0].ip}')
    Copy to Clipboard Toggle word wrap
  2. $EXTERNAL_IP パスに格納されている IP を参照するワイルドカード DNS エントリーを設定します。次の DNS エントリーの例を表示します。

    *.apps.<hosted-cluster-name\>.<base-domain\>.
    Copy to Clipboard Toggle word wrap

    DNS エントリーは、クラスターの内部と外部にルーティングできる必要があります。外部 IP 値が 192.168.20.30 であるクラスターのステップ 1 の入力例を使用すると、DNS 解決は次の例のようになります。

    dig +short test.apps.example.hypershift.lab
    
    192.168.20.30
    Copy to Clipboard Toggle word wrap
  3. 次のコマンドを入力して、ホストされたクラスターのステータスを確認し、Partial から Completed に移行したことを確認します。

    oc get --namespace clusters hostedclusters
    Copy to Clipboard Toggle word wrap

    出力例

    NAME            VERSION   KUBECONFIG                       PROGRESS    AVAILABLE   PROGRESSING   MESSAGE
    example         4.12.7    example-admin-kubeconfig         Completed   True        False         The hosted control plane is available
    Copy to Clipboard Toggle word wrap

1.7.5.6. オプション: MetalLB の設定

MetalLB などのロードバランサーを使用する必要があります。次の例は、MetalLB をインストールした後に設定する手順を示しています。MetalLB のインストールの詳細については、OpenShift Container Platform ドキュメントの MetalLB Operator のインストール を参照してください。

  1. MetalLB インスタンスを作成します。

    oc create -f -
    apiVersion: metallb.io/v1beta1
    kind: MetalLB
    metadata:
      name: metallb
      namespace: metallb-system
    Copy to Clipboard Toggle word wrap
  2. ノードネットワーク内で使用可能な IP アドレスの範囲を使用してアドレスプールを作成します。次の IP アドレス範囲を、ネットワーク内で使用可能な IP アドレスの未使用のプールに置き換えます。

    oc create -f -
    apiVersion: metallb.io/v1beta1
    kind: IPAddressPool
    metadata:
      name: metallb
      namespace: metallb-system
    spec:
      addresses:
      - 192.168.216.32-192.168.216.122
    Copy to Clipboard Toggle word wrap
  3. L2 プロトコルを使用してアドレスプールをアドバタイズします。

    oc create -f -
    apiVersion: metallb.io/v1beta1
    kind: L2Advertisement
    metadata:
      name: l2advertisement
      namespace: metallb-system
    spec:
      ipAddressPools:
       - metallb
    Copy to Clipboard Toggle word wrap
1.7.5.6.1. 関連情報

1.7.5.7. ノードプールのスケーリング

  1. ocscale コマンドを使用して、ノードプールを手動でスケーリングできます。

    NODEPOOL_NAME=${CLUSTER_NAME}-work
    NODEPOOL_REPLICAS=5
    
    oc scale nodepool/$NODEPOOL_NAME --namespace clusters --replicas=$NODEPOOL_REPLICAS
    Copy to Clipboard Toggle word wrap
  2. しばらくしてから、次のコマンドを入力して、ノードプールのステータスを確認します。

    oc --kubeconfig $CLUSTER_NAME-kubeconfig get nodes
    Copy to Clipboard Toggle word wrap

    出力例

    NAME                  STATUS   ROLES    AGE     VERSION
    example-9jvnf         Ready    worker   97s     v1.25.4+18eadca
    example-n6prw         Ready    worker   116m    v1.25.4+18eadca
    example-nc6g4         Ready    worker   117m    v1.25.4+18eadca
    example-thp29         Ready    worker   4m17s   v1.25.4+18eadca
    example-twxns         Ready    worker   88s     v1.25.4+18eadca
    Copy to Clipboard Toggle word wrap

1.7.5.8. ノードプールの追加

名前、レプリカの数、およびメモリーや CPU 要件などの追加情報を指定して、ゲストクラスターのノードプールを作成できます。

  1. ノードプールを作成するには、次の情報を入力します。この例では、ノードプールには VM に割り当てられたより多くの CPU があります。

    export NODEPOOL_NAME=${CLUSTER_NAME}-extra-cpu
    export WORKER_COUNT="2"
    export MEM="6Gi"
    export CPU="4"
    export DISK="16"
    
    hypershift create nodepool kubevirt \
      --cluster-name $CLUSTER_NAME \
      --name $NODEPOOL_NAME \
      --node-count $WORKER_COUNT \
      --memory $MEM \
      --cores $CPU
      --root-volume-size $DISK
    Copy to Clipboard Toggle word wrap
  2. clusters namespace 内の nodepool リソースをリスト表示して、ノードプールのステータスを確認します。

    oc get nodepools --namespace clusters
    Copy to Clipboard Toggle word wrap

    出力例

    NAME                      CLUSTER         DESIRED NODES   CURRENT NODES   AUTOSCALING   AUTOREPAIR   VERSION   UPDATINGVERSION   UPDATINGCONFIG   MESSAGE
    example                   example         5               5               False         False        4.12.7
    example-extra-cpu         example         2                               False         False                  True              True             Minimum availability requires 2 replicas, current 0 available
    Copy to Clipboard Toggle word wrap

  3. しばらくしてから、次のコマンドを入力してノードプールのステータスを確認できます。

    oc --kubeconfig $CLUSTER_NAME-kubeconfig get nodes
    Copy to Clipboard Toggle word wrap

    出力例

    NAME                      STATUS   ROLES    AGE     VERSION
    example-9jvnf             Ready    worker   97s     v1.25.4+18eadca
    example-n6prw             Ready    worker   116m    v1.25.4+18eadca
    example-nc6g4             Ready    worker   117m    v1.25.4+18eadca
    example-thp29             Ready    worker   4m17s   v1.25.4+18eadca
    example-twxns             Ready    worker   88s     v1.25.4+18eadca
    example-extra-cpu-zh9l5   Ready    worker   2m6s    v1.25.4+18eadca
    example-extra-cpu-zr8mj   Ready    worker   102s    v1.25.4+18eadca
    Copy to Clipboard Toggle word wrap

  4. 次のコマンドを入力して、ノードプールが予期したステータスになっていることを確認します。

    oc get nodepools --namespace clusters
    Copy to Clipboard Toggle word wrap

    出力例

    NAME                      CLUSTER         DESIRED NODES   CURRENT NODES   AUTOSCALING   AUTOREPAIR   VERSION   UPDATINGVERSION   UPDATINGCONFIG   MESSAGE
    example                   example         5               5               False         False        4.12.7
    example-extra-cpu         example         2               2               False         False        4.12.7
    Delete a HostedCluster
    Copy to Clipboard Toggle word wrap

1.7.5.9. OpenShift Virtualization でのホストされたクラスターの作成の検証

ホストされたクラスターが正常に作成されたことを確認するには、次の手順を実行します。

  1. 次のコマンドを入力して、HostedCluster リソースが completed 状態に移行したことを確認します。

    oc get --namespace clusters hostedclusters ${CLUSTER_NAME}
    Copy to Clipboard Toggle word wrap

    出力例

    NAMESPACE   NAME      VERSION   KUBECONFIG                 PROGRESS    AVAILABLE   PROGRESSING   MESSAGE
    clusters    example   4.12.2    example-admin-kubeconfig   Completed   True        False         The hosted control plane is available
    Copy to Clipboard Toggle word wrap

  2. 次のコマンドを入力して、ゲストクラスター内のすべてのクラスターオペレーターがオンラインであることを確認します。

    hypershift create kubeconfig --name $CLUSTER_NAME > $CLUSTER_NAME-kubeconfig
    Copy to Clipboard Toggle word wrap
    oc get co --kubeconfig=$CLUSTER_NAME-kubeconfig
    Copy to Clipboard Toggle word wrap

    出力例

    NAME                                       VERSION   AVAILABLE   PROGRESSING   DEGRADED   SINCE   MESSAGE
    console                                    4.12.2   True        False         False      2m38s
    csi-snapshot-controller                    4.12.2   True        False         False      4m3s
    dns                                        4.12.2   True        False         False      2m52s
    image-registry                             4.12.2   True        False         False      2m8s
    ingress                                    4.12.2   True        False         False      22m
    kube-apiserver                             4.12.2   True        False         False      23m
    kube-controller-manager                    4.12.2   True        False         False      23m
    kube-scheduler                             4.12.2   True        False         False      23m
    kube-storage-version-migrator              4.12.2   True        False         False      4m52s
    monitoring                                 4.12.2   True        False         False      69s
    network                                    4.12.2   True        False         False      4m3s
    node-tuning                                4.12.2   True        False         False      2m22s
    openshift-apiserver                        4.12.2   True        False         False      23m
    openshift-controller-manager               4.12.2   True        False         False      23m
    openshift-samples                          4.12.2   True        False         False      2m15s
    operator-lifecycle-manager                 4.12.2   True        False         False      22m
    operator-lifecycle-manager-catalog         4.12.2   True        False         False      23m
    operator-lifecycle-manager-packageserver   4.12.2   True        False         False      23m
    service-ca                                 4.12.2   True        False         False      4m41s
    storage                                    4.12.2   True        False         False      4m43s
    Copy to Clipboard Toggle word wrap

1.7.5.10. OpenShift Virtualization 上のホストされたクラスターの破棄

OpenShift Virtualization でホストされたクラスターを削除するには、コマンドラインで次のコマンドを入力します。

hypershift destroy cluster kubevirt --name $CLUSTER_NAME
Copy to Clipboard Toggle word wrap

必要に応じて名前を置き換えます。

1.7.6. ホステッドクラスターのワークロードの分散 (テクノロジープレビュー)

管理クラスター管理者は、管理クラスターノードで次のラベルとテイントを使用して、コントロールプレーンのワークロードをスケジュールできます。

  • hypershift.openshift.io/control-plane: true
  • hypershift.openshift.io/cluster: ${HostedControlPlane Namespace}

ホステッドクラスターの Pod には許容範囲があり、スケジューラーはアフィニティールールを使用して Pod をスケジュールします。Pod は、control-plane と Pod の cluster のテイントを許容します。スケジューラーは、hypershift.openshift.io/control-plane および hypershift.openshift.io/cluster: ${HostedControlPlane Namespace} でラベル付けされたノードへの Pod のスケジューリングを優先します。

ControllerAvailabilityPolicy オプションには、HighlyAvailable を使用します。このオプションを使用する場合は、topology.kubernetes.io/zone を トポロジーキーとして設定することで、さまざまな障害ドメインにわたるホステッドクラスター内のデプロイメントごとに Pod をスケジュールできます。

ホステッドクラスターがその Pod をインフラノードにスケジュールすることを要求できるようにするには、次の例に示すように HostedCluster.spec.nodeSelector を設定します。

  spec:
    nodeSelector:
      role.kubernetes.io/infra: ""
Copy to Clipboard Toggle word wrap

こうすることで、各テナントのホステッドコントロールプレーンが適格なインフラストラクチャーノードワークロードとなり、基盤となる OpenShift Container Platform ノードに資格を与える必要がなくなります。

1.7.6.1. 優先クラス

4 つの組み込み優先クラスは、ホステッドクラスター Pod の優先順位とプリエンプションに影響を与えます。管理クラスター内に Pod は、次の上位から下位の順序で作成できます。

  • hypershift-operator: HyperShift Operator Pod。
  • hypershift-etcd: etcd 用の Pod。
  • hypershift-api-critical: API 呼び出しとリソース許可が成功するために必要な Pod。これらの Pod には、kube-apiserver、集約 API サーバー、Web フックなどの Pod が含まれます。
  • hypershift-control-plane : API クリティカルではないものの、クラスターバージョンの Operator など、高い優先順位が必要なコントロールプレーン内の Pod。

1.7.7. ホステッドコントロールプレーン機能の無効化

HyperShift Operator をアンインストールして、Hosted Control Plane を無効にすることができます。ホステッドコントロールプレーンクラスター機能を無効にする場合は、ホステッドコントロールプレーンクラスターの管理 トピックで説明されているとおり、マルチクラスターエンジン Operator でホステッドクラスターとマネージドクラスターリソースを破棄する必要があります。

1.7.7.1. HyperShift Operator のアンインストール

HyperShift Operator をアンインストールし、local-cluster から hypershift-addon を無効にするには、以下の手順を実行します。

  1. 以下のコマンドを実行して、ホステッドクラスターが実行されていないことを確認します。

    oc get hostedcluster -A
    Copy to Clipboard Toggle word wrap

    重要: ホステッドクラスターが実行されている場合、hypershift-addon が無効になっていても、HyperShift Operator はアンインストールされません。

  2. 以下のコマンドを実行して hypershift-addon を無効にします。

    oc patch mce multiclusterengine --type=merge -p '{"spec":{"overrides":{"components":[{"name":"hypershift-local-hosting","enabled": false}]}}}' 
    1
    Copy to Clipboard Toggle word wrap
    1
    デフォルトの MultiClusterEngine リソースインスタンス名は multiclusterengine ですが、$ oc get mce コマンドを実行し、クラスターから MultiClusterEngine 名を取得できます。

    ヒント: hypershift-addon を無効にした後、マルチクラスターエンジン Operator コンソールから local-clusterhypershift-addon を無効にすることもできます。

1.7.7.2. ホステッドコントロールプレーン機能の無効化

Hosted Control Plane 機能を無効にする前に、まず HyperShift Operator をアンインストールする必要があります。次のコマンドを実行して、Hosted Control Plane 機能を無効にします。

oc patch mce multiclusterengine --type=merge -p '{"spec":{"overrides":{"components":[{"name":"hypershift-preview","enabled": false}]}}}' 
1
Copy to Clipboard Toggle word wrap
1
デフォルトの MultiClusterEngine リソースインスタンス名は multiclusterengine ですが、$ oc get mce コマンドを実行し、クラスターから MultiClusterEngine 名を取得できます。

次のコマンドを実行すると、MultiClusterEngine カスタムリソースで hypershift-preview および hypershift-local-hosting 機能が無効になっていることを確認できます。

oc get mce multiclusterengine -o yaml 
1
Copy to Clipboard Toggle word wrap
1
デフォルトの MultiClusterEngine リソースインスタンス名は multiclusterengine ですが、$ oc get mce コマンドを実行し、クラスターから MultiClusterEngine 名を取得できます。

hypershift-previewhypershift-local-hostingenabled: フラグが false に設定されている次の例を参照してください。

apiVersion: multicluster.openshift.io/v1
kind: MultiClusterEngine
metadata:
  name: multiclusterengine
spec:
  overrides:
    components:
    - name: hypershift-preview
      enabled: false
    - name: hypershift-local-hosting
      enabled: false
Copy to Clipboard Toggle word wrap

1.7.7.3. 関連情報

トップに戻る
Red Hat logoGithubredditYoutubeTwitter

詳細情報

試用、購入および販売

コミュニティー

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

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

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

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

会社概要

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

Theme

© 2025 Red Hat