1.6. ホストされたコントロールプレーンクラスターの使用 (テクノロジープレビュー)

Kubernetes Operator バージョン 2.5 用のマルチクラスターエンジンと Kubernetes Operator 2.0 用のマルチクラスターエンジンは、2 つの異なるコントロールプレーン設定を使用して Red Hat OpenShift Container Platform クラスターをデプロイできます。スタンドアロン設定では、複数の専用仮想マシンまたは物理マシンを使用して、OpenShift Container Platform コントロールプレーンをホストします。ホストされたコントロールプレーンをプロビジョニングして、OpenShift Container Platform コントロールプレーンをホスティングサービスクラスター上の Pod としてプロビジョニングできます。コントロールプレーンごとに専用の物理マシンは必要ありません。

注意: この機能は、Kubernetes Operator 用のマルチクラスターエンジンを使用せずに、Kubernetes Operator 2.0 用のマルチクラスターエンジンでも動作します。

Amazon Web Services は、テクノロジープレビューとしてサポートされています。Red Hat OpenShift Container Platform バージョン 4.10.7 のコントロールプレーンをホストできます。

コントロールプレーンは、単一の名前空間に含まれる Pod として実行され、ホストされたコントロールプレーンクラスターに関連付けられます。OpenShift Container Platform がこのタイプのホストされたクラスターをプロビジョニングする場合、コントロールプレーンから独立したワーカーノードをプロビジョニングします。

以下は、ホストされたコントロールプレーンクラスターの利点です。

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

詳細については、次の製品ドキュメントを参照してください。

1.6.1. ホストされているコントロールプレーンの設定

ホストされているコントロールプレーンを設定するには、ホスティングサービスクラスターとホストされているクラスターが必要です。HyperShift Operator を既存のクラスターにデプロイすることで、そのクラスターをホスティングサービスクラスターにし、ホストされるクラスターの作成を開始できます。

ホストされたコントロールプレーンはテクノロジープレビュー機能であるため、関連コンポーネントはデフォルトで無効になっています。multiclusterengine カスタムリソースを編集して spec.overrides.components[?(@.name=='hypershift-preview')].enabledtrue に設定して、この機能を有効にします。

以下のコマンドを実行して、ホストされるコントロールプレーン機能が有効であることを確認します。

oc patch mce multiclusterengine-sample --type=merge -p '{"spec":{"overrides":{"components":[{"name":"hypershift-preview","enabled": true}]}}}'

1.6.1.1. ホスティングサービスクラスターの設定

既存クラスターをホスティングサービスクラスターとして機能するように設定することで、ホストされたコントロールプレーンをデプロイできます。ホスティングサービスクラスターは、コントロールプレーンがホストされる OpenShift Container Platform クラスターであり、ハブクラスターまたは OpenShift Container Platform 管理対象クラスターの 1 つにできます。

ベストプラクティス: ホストされたコントロールプレーンとワーカーノードを同じ環境で実行します。

1.6.1.1.1. 前提条件

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

  • Red Hat OpenShift Container Platform で管理される 1 つ以上のクラスターに Kubernetes Operator 用のマルチクラスターエンジンがインストールされている必要があります。Kubernetes Operator 用のマルチクラスターエンジンは、Red Hat Advanced Cluster Management バージョン 2.5 以降をインストールすると自動的にインストールされ、Red Hat Advanced Cluster Management なしで OpenShift Container Platform OperatorHub から Operator としてインストールすることもできます。
  • ハブクラスターをホスティングサービスクラスターにする場合は、高度な設定 ドキュメントの local-cluster の有効化 セクションの手順を実行して、local-cluster をホスティングサービスクラスターとして設定する必要があります。
1.6.1.1.2. ホスティングサービスクラスター の設定

Kubernetes Operator 用のマルチクラスターエンジンがインストールされているクラスターで以下の手順を実行し、OpenShift Container Platform マネージドクラスターをホスティングサービスクラスターとして有効にします。

  1. AWS でホストされたクラスターを作成および管理する場合は、HyperShift Operator 用に hypershift- operator -oidc-provider-s3-credentials という名前の OIDC S3 認証情報シークレットを作成します。管理対象クラスターの名前空間にシークレットを保存します。これは、ホスティングサービスクラスターとして使用される管理対象クラスターの名前空間です。local-cluster を使用した場合は、local-cluster 名前空間にシークレットを作成します

    シークレットには以下の 3 つのフィールドを含める必要があります。bucket フィールドには、HyperShift クラスターの OIDC 検出ドキュメントをホストするためのパブリックアクセスを持つ S3 バケットが含まれています。credentials フィールドは、バケットにアクセスできる default プロファイルの認証情報を含むファイルへの参照です。デフォルトでは、HyperShift は default プロファイルのみを使用して バケット を操作します。region フィールドは、S3 バケットのリージョンを指定します。

    シークレットの詳細は、HyperShift のドキュメント の Getting started を参照してください。次の例は、サンプルの 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 <hypershift-hosting-service-cluster>

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

    oc label secret hypershift-operator-oidc-provider-s3-credentials -n <hypershift-hosting-service-cluster> cluster.open-cluster-management.io/backup=""
  2. Private Link を使用して AWS プラットフォームでホストされたクラスターをプロビジョニングする場合は、HyperShiftOperator の AWS 認証情報シークレットを作成し、hypershift-operator-private-link-credentials という名前を付けます。これは、ホスティングサービスクラスターとして使用されているマネージドクラスターの namespace であるマネージドクラスターの名前空間に存在する必要があります。local-cluster を使用した場合は、local-cluster namespace にシークレットを作成します詳細は、AWS プライベートクラスターのデプロイ の手順 1 ~ 5 を参照してください。

    シークレットには、次の 3 つのフィールドが含まれている必要があります。

    • aws-access-key-id: AWS 認証情報アクセスキー ID
    • aws-secret-access-key: AWS 認証情報アクセスキーシークレット
    • region: Private Link で使用するリージョン

      シークレットの詳細は、HyperShift のドキュメント の Getting started を参照してください。次の例は、サンプルの hypershift-operator-private-link-credentials シークレットテンプレートを示しています。

      oc create secret generic hypershift-operator-private-link-credentials --from-literal=aws-access-key-id=<aws-access-key-id> --from-literal=aws-secret-access-key=<aws-secret-access-key> --from-literal=region=<region> -n <hypershift-hosting-service-cluster>

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

      oc label secret hypershift-operator-private-link-credentials -n <hypershift-hosting-service-cluster> cluster.open-cluster-management.io/backup=""

      クラスターの作成時に、HypershiftDeployment カスタムリソースで次のパラメーターを設定します。

      spec:
        hostedClusterSpec:
          platform:
            type: AWS
            aws:
              endpointAccess: Private
  3. AWS プラットフォームでコントロールプレーンサービスにサービスレベルの DNS を使用する予定の場合は、HyperShift Operator 用の外部 DNS クレデンシャルシークレットを作成し、hypershift-operator-external-dns-credentials という名前を付けます。これは、ホスティングサービスクラスターとして使用されているマネージドクラスターの namespace であるマネージドクラスターの名前空間に存在する必要があります。local-cluster を使用した場合は、local-cluster 名前空間にシークレットを作成します

    シークレットには、次の 3 つのフィールドが含まれている必要があります。

    • provider: サービスレベルの DNS ゾーンを管理する DNS プロバイダー (例: aws)
    • domain-filter: サービスレベルドメイン
    • credentials: (オプション: aws キーを使用する場合のみ) - すべての外部 DNS タイプについて、認証情報ファイルがサポートされています
    • aws-access-key-id: (オプション) - AWS DNS サービスを使用する場合は、認証情報アクセスキー ID
    • aws-secret-access-key: (オプション) - AWS DNS サービスを使用する場合、AWS DNS サービスを使用する場合、認証情報アクセスキーシークレット

      詳細は、、コントロールプレーンサービスにサービスレベル 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 <hypershift-hosting-service-cluster>

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

      oc label secret hypershift-operator-external-dns-credentials -n <hypershift-hosting-service-cluster> cluster.open-cluster-management.io/backup=""

      クラスターの作成時に、HypershiftDeployment カスタムリソースで次のパラメーターを設定します。

      spec:
        hostedClusterSpec:
          platform:
            type: AWS
            aws:
              endpointAccess: PublicAndPrivate
  4. HyperShift アドオンをインストールします。

    HyperShift Operator をホストするクラスターは、ホストサービスクラスターです。この手順では、hypershift-addon を使用して、マネージドクラスターに HyperShift Operator をインストールします。

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

      apiVersion: addon.open-cluster-management.io/v1alpha1
      kind: ManagedClusterAddOn
      metadata:
        name: hypershift-addon
        namespace: <managed-cluster-name>
      spec:
        installNamespace: open-cluster-management-agent-addon

      managed-cluster-name を、HyperShift Operator をインストールする管理対象クラスターの名前に置き換えます。Red Hat Advanced Cluster Management ハブクラスターにインストールする場合は、この値に local-cluster を使用します。

    3. 以下のコマンドを実行してこのファイルを適用します。

      oc apply -f <filename>

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

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

    oc get managedclusteraddons -n <hypershift-hosting-service-cluster> hypershift-addon

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

    NAME               AVAILABLE   DEGRADED   PROGRESSING
    hypershift-addon   True

HyperShift アドオンがインストールされ、ホストサービスクラスターを使用して HyperShift クラスターを管理できるようになりました。

1.6.1.2. ホストされたクラスターのデプロイ

HyperShift Operator をインストールして既存クラスターをホストサービスクラスターとして有効にすると、HypershiftDeployment カスタムリソースを作成して HyperShift ホストクラスターをプロビジョニングできます。

  1. コンソールまたはファイルの追加を使用して、認証情報としてクラウドプロバイダーシークレットを作成します。VPC、サブネット、NAT ゲートウェイなどのクラスターのインフラストラクチャーリソースを作成するパーミッションが必要です。このアカウントは、ワーカーが置かれるゲストクラスターのアカウントに対応している必要があります。必要なパーミッションに関する詳細は、HyperShift ドキュメントの AWS インフラストラクチャーおよび IAM リソースの作成 を参照してください。

    次の例は、AWS のシークレット形式を示しています。

    apiVersion: v1
    metadata:
      name: my-aws-cred
      namespace: default      # Where you create HypershiftDeployment resources
    type: Opaque
    kind: Secret
    stringData:
      ssh-publickey:          # Value
      ssh-privatekey:         # Value
      pullSecret:             # Value, required
      baseDomain:             # Value, required
      aws_secret_access_key:  # Value, required
      aws_access_key_id:      # Value, required
    • コンソールでこのシークレットを作成するには、ナビゲーションメニューの Credentials にアクセスし、認証情報の作成手順に従います。
    • コマンドラインを使用してシークレットを作成するには、以下のコマンドを実行します。

      oc create secret generic <my-secret> -n <hypershift-deployment-namespace> --from-literal=baseDomain='your.domain.com' --from-literal=aws_access_key_id='your-aws-access-key' --from-literal=aws_secret_access_key='your-aws-secret-key' --from-literal=pullSecret='your-quay-pull-secret' --from-literal=ssh-publickey='your-ssh-publickey' --from-literal=ssh-privatekey='your-ssh-privatekey'

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

      oc label secret <my-secret> -n <hypershift-deployment-namespace> cluster.open-cluster-management.io/backup=""
  2. HypershiftDeployment カスタムリソースを作成します。HypershiftDeployment カスタムリソースは、プロバイダーアカウントにインフラストラクチャーを作成し、作成されたインフラストラクチャーでインフラストラクチャーコンピュート容量を設定し、ホストされるコントロールプレーンを使用する nodePools をプロビジョニングし、ホスティングサービスクラスターに、ホストされたコントロールプレーンを作成します。

    1. 以下の例のような情報が含まれるファイルを作成します。

      apiVersion: cluster.open-cluster-management.io/v1alpha1
      kind: HypershiftDeployment
      metadata:
        name: <cluster>
        namespace: default
      spec:
        hostingCluster: <hosting-service-cluster>
        hostingNamespace: clusters
        infrastructure:
          cloudProvider:
            name: <my-secret>
          configure: True
          platform:
            aws:
              region: <region>

      cluster は、クラスターの名前に置き換えます。

      hosting-service-cluster は、HyperShift Operator をホストするクラスター名に置き換えます。

      my-secret は、クラウドプロバイダーにアクセスするためのシークレットに置き換えます。

      region は、クラウドプロバイダーのリージョンに置き換えます。

    2. 以下のコマンドを入力してファイルを適用します。

      oc apply -f <filename>

      API の フィールド定義 を参照して、それらが正しいことを確認します。

  3. 以下のコマンドを実行して HypershiftDeployment のステータスを確認します。

    oc get hypershiftdeployment -n default hypershift-demo -w
  4. ホストされているクラスターが作成されると、自動的にハブにインポートされます。これを確認するには、コンソールでクラスターリストを表示するか、次のコマンドを実行します。

    oc get managedcluster <hypershiftDeployment.Spec.infraID>

1.6.1.3. カスタマイズされたホストクラスターのデプロイ

作成した HypershiftDeployment カスタムリソースは、ホストされたコントロールプレーンとその nodePools をデフォルト値でプロビジョニングします。また、HypershiftDeployment カスタムリソースで、hostedClusterSpec および nodePools を指定して、ホストされたコントロールプレーンおよび nodePools をカスタマイズすることもできます。

以下の例のような情報が含まれるファイルを作成します。

apiVersion: cluster.open-cluster-management.io/v1alpha1
kind: HypershiftDeployment
metadata:
  name: <cluster>
  namespace: default
spec:
  hostingCluster: <hosting-service-cluster>
  hostingNamespace: clusters
  hostedClusterSpec:
    networking:
      machineCIDR: 10.0.0.0/16    # Default
      networkType: OVNKubernetes
      podCIDR: 10.132.0.0/14      # Default
      serviceCIDR: 172.31.0.0/16  # Default
    platform:
      type: AWS
    pullSecret:
      name: <cluster>-pull-secret    # This secret is created by the controller
    release:
      image: quay.io/openshift-release-dev/ocp-release:4.11.2-x86_64  # Default
    services:
    - service: APIServer
      servicePublishingStrategy:
        type: LoadBalancer
    - service: OAuthServer
      servicePublishingStrategy:
        type: Route
    - service: Konnectivity
      servicePublishingStrategy:
        type: Route
    - service: Ignition
      servicePublishingStrategy:
        type: Route
    sshKey: {}
  nodePools:
  - name: <cluster>-<zone-1>
    spec:
      clusterName: <cluster>
      management:
        autoRepair: false
        replace:
          rollingUpdate:
            maxSurge: 1
            maxUnavailable: 0
          strategy: RollingUpdate
        upgradeType: Replace
      platform:
        aws:
          instanceType: m5.large
        type: AWS
      release:
        image: quay.io/openshift-release-dev/ocp-release:4.10.15-x86_64
      replicas: 3
  - name: <cluster>-<zone-2>
    spec:
      clusterName: <cluster>
      management:
        autoRepair: false
        replace:
          rollingUpdate:
            maxSurge: 1
            maxUnavailable: 0
          strategy: RollingUpdate
        upgradeType: Replace
      platform:
        aws:
          instanceType: m5.large
        type: AWS
      release:
        image: quay.io/openshift-release-dev/ocp-release:4.10.15-x86_64
      replicas: 3
  infrastructure:
    cloudProvider:
      name: <my-secret>
    configure: True
    platform:
      aws:
        region: <region>
        zones:
          - <zone-1>
          - <zone-2>

zone-1 をリージョン内のゾーンの名前に置き換えます。

zone-2 をリージョン内のゾーンの名前に置き換えます。

1.6.1.4. ホストサービスクラスターへのアクセス

これで、クラスターにアクセスできます。アクセスシークレットは hypershift-hosting-service-cluster namespace に保存されます。この namespace は、ホストサービスクラスターの名前と同じです。次の形式のシークレット名形式について学習します。

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

1.6.2. ホストされているコントロールプレーンリソースの無効化

ホストされているコントロールプレーンクラスター機能を無効にする場合は、HyperShift ホステッドクラスターを破棄し、HyperShift Operator をアンインストールする必要があります。

1.6.2.1. HyperShift がホストするクラスターの破棄

HyperShift がホストするクラスターを破棄するには、次のコマンドのいずれかを実行して、HypershiftDeployment リソースを削除します。

oc delete -f <HypershiftDeployment_yaml_file_name>

または

oc delete hd -n <HypershiftDeployment_namespace> <HypershiftDeployment_resource_name>

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

管理またはホスティングサービスクラスターから HyperShift Operator をアンインストールするには、次のコマンドを実行して、管理クラスターから hypershift-addon ManagedClusterAddon を削除します。

oc delete managedclusteraddon -n <hypershift-management-cluster> hypershift-addon