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

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

注記: この機能は、Red Hat Advanced Cluster Management for Kubernetes を使用しない multicluster engine operator 2.0 でも機能します。

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

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

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

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

ホストされたコントロールプレーンの使用について、詳しくは次の製品ドキュメントを参照してください。

1.17.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.17.1.1. ホスティングサービスクラスターの設定

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

1.17.1.1.1. 前提条件

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

  • Red Hat OpenShift Container Platform で管理される 1 つ以上のクラスターに multicluster engine operator がインストールされている必要があります。multicluster engine operator は、Red Hat Advanced Cluster Management バージョン 2.5 以降をインストールすると自動的にインストールされ、Red Hat Advanced Cluster Management なしで OpenShift Container Platform OperatorHub から Operator としてインストールすることもできます。
  • Red Hat Advanced Cluster Management ハブクラスターをホスティングサービスクラスターにする場合は、以下の手順を実行して、local-cluster をホスティングサービスクラスターとして設定する必要があります。

    1. 次の例のような import-hub.yaml という名前の YAML ファイルを作成します。

      apiVersion: cluster.open-cluster-management.io/v1
      kind: ManagedCluster
      metadata:
        labels:
          local-cluster: "true"
        name: local-cluster
      spec:
        hubAcceptsClient: true
        leaseDurationSeconds: 60
    2. 次のように入力して、ファイルを適用します。

      oc apply -f import-hub.yaml

    自己管理されるハブクラスターは、クラスターの一覧で local-cluster として指定されます。

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

multicluster engine 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. HyperShift アドオンをインストールします。

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

    1. 以下の例のようなファイルを作成して、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 を使用します。

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

      oc apply -f <filename>

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

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

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

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

    NAME               AVAILABLE   DEGRADED   PROGRESSING
    hypershift-addon   True

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

1.17.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 カスタムリソースファイルをクラウドプロバイダーのシークレット namespace に作成します。HypershiftDeployment カスタムリソースは、プロバイダーアカウントにインフラストラクチャーを作成し、作成されたインフラストラクチャーでインフラストラクチャーコンピュート容量を設定し、ホストされるコントロールプレーンを使用する nodePools をプロビジョニングし、ホスティングサービスクラスターに、ホストされたコントロールプレーンを作成します。

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

      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: OpenShiftSDN
            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.10.15-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>
          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 # Default
            replicas: 2
        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. ホストされているクラスターが作成されると、自動的にハブにインポートされます。これを確認するには、Red Hat Advanced Cluster Management コンソールのクラスター一覧を確認するか、以下のコマンドを実行します。

    oc get managedcluster <hypershiftDeployment.Spec.infraID>

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

これで、クラスターにアクセスできます。アクセスシークレットは 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.17.2. ホストされているコントロールプレーンリソースの無効化

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

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

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

oc delete -f <HypershiftDeployment_yaml_file_name>

または

oc delete hd -n <HypershiftDeployment_namespace> <HypershiftDeployment_resource_name>

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

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

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