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')].enabled
を true
に設定して、この機能を有効にします。
以下のコマンドを実行して、ホストされるコントロールプレーン機能が有効であることを確認します。
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 マネージドクラスターをホスティングサービスクラスターとして有効にします。
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=""
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
-
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
-
HyperShift アドオンをインストールします。
HyperShift Operator をホストするクラスターは、ホストサービスクラスターです。この手順では、
hypershift-addon
を使用して、マネージドクラスターに HyperShift Operator をインストールします。- HyperShift Operator が作成される namespace を作成します。
以下の例のようなファイルを作成して、
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
を使用します。以下のコマンドを実行してこのファイルを適用します。
oc apply -f <filename>
filename
は、作成したファイル名に置き換えます。
以下のコマンドを実行して、
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 ホストクラスターをプロビジョニングできます。
コンソールまたはファイルの追加を使用して、認証情報としてクラウドプロバイダーシークレットを作成します。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=""
HypershiftDeployment
カスタムリソースを作成します。HypershiftDeployment
カスタムリソースは、プロバイダーアカウントにインフラストラクチャーを作成し、作成されたインフラストラクチャーでインフラストラクチャーコンピュート容量を設定し、ホストされるコントロールプレーンを使用するnodePools
をプロビジョニングし、ホスティングサービスクラスターに、ホストされたコントロールプレーンを作成します。以下の例のような情報が含まれるファイルを作成します。
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
は、クラウドプロバイダーのリージョンに置き換えます。以下のコマンドを入力してファイルを適用します。
oc apply -f <filename>
API の フィールド定義 を参照して、それらが正しいことを確認します。
以下のコマンドを実行して
HypershiftDeployment
のステータスを確認します。oc get hypershiftdeployment -n default hypershift-demo -w
ホストされているクラスターが作成されると、自動的にハブにインポートされます。これを確認するには、コンソールでクラスターリストを表示するか、次のコマンドを実行します。
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