4.2. ベアメタルへの Hosted Control Plane のデプロイ
クラスターを管理クラスターとして機能するように設定することで、Hosted Control Plane をデプロイできます。管理クラスターは、コントロールプレーンがホストされる OpenShift Container Platform クラスターです。場合によっては、管理クラスターは ホスティング クラスターとも呼ばれます。
管理クラスターは、マネージド クラスターとは異なります。マネージドクラスターは、ハブクラスターが管理するクラスターです。
Hosted Control Plane 機能はデフォルトで有効になっています。
multicluster engine Operator は、マネージドのハブクラスターであるデフォルトの local-cluster
と、管理クラスターとしてのハブクラスターのみをサポートしています。Red Hat Advanced Cluster Management がインストールされている場合は、マネージドハブクラスター (local-cluster
) を管理クラスターとして使用できます。
ホステッドクラスター は、API エンドポイントとコントロールプレーンが管理クラスターでホストされている OpenShift Container Platform クラスターです。ホステッドクラスターには、コントロールプレーンとそれに対応するデータプレーンが含まれます。マルチクラスターエンジン Operator コンソールまたはホステッドコントロールプレーンコマンドラインインターフェイス(hcp
)を使用して、ホステッドクラスターを作成できます。
ホステッドクラスターは、マネージドクラスターとして自動的にインポートされます。この自動インポート機能を無効にする場合は、「multicluster engine Operator へのホステッドクラスターの自動インポートの無効化」を参照してください。
4.2.1. ベアメタルへの Hosted Control Plane のデプロイの準備 リンクのコピーリンクがクリップボードにコピーされました!
ベアメタルに Hosted Control Plane をデプロイする準備をする際には、次の情報を考慮してください。
- 管理クラスターとワーカーは、Hosted Control Plane の同じプラットフォーム上で実行してください。
-
すべてのベアメタルホストは、Central Infrastructure Management が提供する Discovery Image ISO を使用して手動で起動する必要があります。ホストは手動で起動することも、
Cluster-Baremetal-Operator
を使用して自動化することもできます。各ホストが起動すると、エージェントプロセスが実行され、ホストの詳細が検出され、インストールが完了します。Agent
カスタムリソースは、各ホストを表します。 - Hosted Control Plane のストレージを設定する場合は、etcd の推奨プラクティスを考慮してください。レイテンシー要件を満たすには、各コントロールプレーンノードで実行されるすべての Hosted Control Plane の etcd インスタンス専用の高速ストレージデバイスを使用します。LVM ストレージを使用して、ホストされた etcd Pod のローカルストレージクラスを設定できます。詳細は、「推奨される etcd プラクティス」および「論理ボリュームマネージャーストレージを使用した永続ストレージ」を参照してください。
4.2.1.1. 管理クラスターを設定するための前提条件 リンクのコピーリンクがクリップボードにコピーされました!
- OpenShift Container Platform クラスターに multicluster engine for Kubernetes Operator 2.2 以降がインストールされている必要があります。multicluster engine Operator は、OpenShift Container Platform OperatorHub から Operator としてインストールできます。
multicluster engine Operator には、少なくとも 1 つのマネージド OpenShift Container Platform クラスターが必要です。multicluster engine Operator バージョン 2.2 以降では、
local-cluster
が自動的にインポートされます。local-cluster
の詳細は、Red Hat Advanced Cluster Management ドキュメントの 詳細設定 を参照してください。次のコマンドを実行して、ハブクラスターの状態を確認できます。oc get managedclusters local-cluster
$ oc get managedclusters local-cluster
Copy to Clipboard Copied! Toggle word wrap Toggle overflow -
管理クラスター上のベアメタルホストに
topology.kubernetes.io/zone
ラベルを追加する必要があります。各ホストのtopology.kubernetes.io/zone
の値が一意であることを確認します。そうしないと、すべての Hosted Control Plane Pod が 1 つのノードにスケジュールされ、単一障害点が発生します。 - エージェントプラットフォームを使用して、Hosted Control Plane をベアメタルでプロビジョニングできます。Agent プラットフォームは、Central Infrastructure Management サービスを使用して、ホステッドクラスターにワーカーノードを追加します。詳細は、Central Infrastructure Management サービスの有効化 を参照してください。
- Hosted Control Plane のコマンドラインインターフェイスをインストールする必要があります。
4.2.1.2. ベアメタルファイアウォール、ポート、およびサービスの要件 リンクのコピーリンクがクリップボードにコピーされました!
管理クラスター、コントロールプレーン、ホステッドクラスター間でポートの通信ができるように、ファイアウォール、ポート、およびサービスの要件を満たす必要があります。
サービスはデフォルトのポートで実行されます。ただし、NodePort
公開ストラテジーを使用する場合、サービスは NodePort
サービスによって割り当てられたポートで実行されます。
ファイアウォールルール、セキュリティーグループ、またはその他のアクセス制御を使用して、必要なソースだけにアクセスを制限します。必要な場合を除き、ポートを公開しないでください。実稼働環境の場合は、ロードバランサーを使用して、単一の IP アドレスによるアクセスを簡素化します。
ハブクラスターにプロキシー設定がある場合は、すべてのホステッドクラスター API エンドポイントを Proxy
オブジェクトの noProxy
フィールドに追加して、ハブクラスターがホステッドクラスターの API エンドポイントにアクセスできようにします。詳細は、「クラスター全体のプロキシーの設定」を参照してください。
Hosted Control Plane はベアメタル上で次のサービスを公開します。
APIServer
-
APIServer
サービスはデフォルトでポート 6443 で実行され、コントロールプレーンコンポーネント間の通信には ingress アクセスが必要です。 - MetalLB ロードバランシングを使用する場合は、ロードバランサーの IP アドレスに使用される IP 範囲への ingress アクセスを許可します。
-
OAuthServer
-
ルートと Ingress を使用してサービスを公開する場合、
OAuthServer
サービスはデフォルトでポート 443 で実行されます。 -
NodePort
公開ストラテジーを使用する場合は、OAuthServer
サービスにファイアウォールルールを使用します。
-
ルートと Ingress を使用してサービスを公開する場合、
Konnectivity
-
ルートと Ingress を使用してサービスを公開する場合、
Konnectivity
サービスはデフォルトでポート 443 で実行されます。 -
Konnectivity
エージェントはリバーストンネルを確立し、コントロールプレーンがホステッドクラスターのネットワークにアクセスできるようにします。エージェントは egress を使用してKonnectivity
サーバーに接続します。サーバーは、ポート 443 のルートまたは手動で割り当てられたNodePort
を使用して公開されます。 - クラスター API サーバーのアドレスが内部 IP アドレスの場合は、ワークロードサブネットからポート 6443 の IP アドレスへのアクセスを許可します。
- アドレスが外部 IP アドレスの場合は、ノードからその外部 IP アドレスにポート 6443 で送信できるように許可します。
-
ルートと Ingress を使用してサービスを公開する場合、
Ignition
-
ルートと Ingress を使用してサービスを公開する場合、
Ignition
サービスはデフォルトでポート 443 で実行されます。 -
NodePort
公開ストラテジーを使用する場合は、Ignition
サービスにファイアウォールルールを使用します。
-
ルートと Ingress を使用してサービスを公開する場合、
ベアメタルで以下のサービスは必要ありません。
-
OVNSbDb
-
OIDC
4.2.1.3. ベアメタルのインフラストラクチャー要件 リンクのコピーリンクがクリップボードにコピーされました!
エージェントプラットフォームはインフラストラクチャーを作成しませんが、インフラストラクチャーに関して次の要件があります。
- Agent: Agent は、Discovery イメージで起動され、OpenShift Container Platform ノードとしてプロビジョニングされる準備ができているホストを表します。
- DNS: API および Ingress エンドポイントは、ルーティング可能である必要があります。
4.2.2. ベアメタルでの DNS 設定 リンクのコピーリンクがクリップボードにコピーされました!
ホステッドクラスターの API サーバーは、NodePort
サービスとして公開されます。API サーバーに到達できる宛先を指す api.<hosted_cluster_name>.<base_domain>
の DNS エントリーが存在する必要があります。
DNS エントリーは、ホステッドコントロールプレーンを実行している管理クラスター内のノードの 1 つを指すレコードのように単純なものにすることができます。エントリーは、受信トラフィックを Ingress Pod にリダイレクトするためにデプロイされるロードバランサーを指すこともできます。
DNS 設定の例
上記の例では、*.apps.example.krnl.es です。IN A 192.168.122.23
は、ホステッドクラスターのノードまたはロードバランサー(設定されている場合)のいずれかです。
IPv6 ネットワーク上の非接続環境用に DNS を設定する場合、設定は次の例のようになります。
IPv6 ネットワークの DNS 設定の例
デュアルスタックネットワークの非接続環境で DNS を設定する場合は、IPv4 と IPv6 の両方の DNS エントリーを含めるようにしてください。
デュアルスタックネットワークの DNS 設定の例
4.2.2.1. カスタム DNS 名の定義 リンクのコピーリンクがクリップボードにコピーされました!
クラスター管理者は、ノードのブートストラップおよびコントロールプレーン通信に使用される内部エンドポイントとは異なる外部 API DNS 名でホステッドクラスターを作成できます。別の DNS 名を定義する理由には、次のようなものがあります。
- 内部ルート CA にバインドされているコントロールプレーン機能を損なうことなく、ユーザー向けの TLS 証明書をパブリック CA が発行したものに置き換えるため
- スプリットホライズン DNS および NAT のシナリオをサポートするため
-
スタンドアロンのコントロールプレーンと同様のエクスペリエンスを確保するよう、正しい
kubeconfig
と DNS 設定で「Show Login Command」などの機能を使用できるようにするため
HostedCluster
オブジェクトの kubeAPIServerDNSName
フィールドにドメイン名を入力することで、初期セットアップ時または day-2 操作時に DNS 名を定義できます。
前提条件
-
kubeAPIServerDNSName
フィールドに設定する DNS 名をカバーする有効な TLS 証明書がある。 - DNS 名は、到達可能で正しいアドレスを指している解決可能な URI である。
手順
HostedCluster
オブジェクトの仕様で、kubeAPIServerDNSName
フィールドとドメインのアドレスを追加し、使用する証明書を指定します (以下の例を参照)。Copy to Clipboard Copied! Toggle word wrap Toggle overflow - 1
kubeAPIServerDNSName
フィールドの値は、有効なアドレス指定可能なドメインである必要があります。
kubeAPIServerDNSName
フィールドを定義して証明書を指定すると、Control Plane Operator コントローラーは、custom-admin-kubeconfig
という名前の kubeconfig
ファイルを作成し、HostedControlPlane
namespace に保存します。証明書はルート CA から生成され、HostedControlPlane
namespace によって証明書の有効期限と更新が管理されます。
Control Plane Operator は、HostedControlPlane
namespace に CustomKubeconfig
という名前の新しい kubeconfig
ファイルを報告します。このファイルでは、kubeAPIServerDNSName
フィールドに定義されている新しいサーバーが使用されます。
カスタム kubeconfig
ファイルは、status
フィールドの HostedCluster
オブジェクトで CustomKubeconfig
として参照されます。CustomKubeConfig
フィールドはオプションであり、kubeAPIServerDNSName
フィールドが空でない場合にのみ追加できます。CustomKubeConfig
フィールドが設定されている場合、HostedCluster
namespace で <hosted_cluster_name>-custom-admin-kubeconfig
という名前のシークレットの生成がトリガーされます。このシークレットを使用して HostedCluster
API サーバーにアクセスできます。Day-2 操作中に CustomKubeConfig
フィールドを削除すると、関連するすべてのシークレットおよびステータス参照が削除されます。
このプロセスはデータプレーンに直接影響しないため、ロールアウトは発生しません。HostedControlPlane
namespace は、HyperShift Operator から変更を受け取り、対応するフィールドを削除します。
HostedCluster
オブジェクトの仕様から kubeAPIServerDNSName
フィールドを削除すると、新規に生成されるすべてのシークレットおよび CustomKubeconfig
参照がクラスターおよび status
フィールドから削除されます。
4.2.3. InfraEnv リソースの作成 リンクのコピーリンクがクリップボードにコピーされました!
ベアメタル上にホステッドクラスターを作成する前に、InfraEnv
リソースが必要です。
4.2.3.1. InfraEnv リソースの作成とノードの追加 リンクのコピーリンクがクリップボードにコピーされました!
ホストされたコントロールプレーンでは、データプレーンは専用ノードで実行される間、コントロールプレーンコンポーネントは管理クラスター上の Pod として実行されます。Assisted Service を使用して、ハードウェアをハードウェアインベントリーに追加する検出 ISO を使用してハードウェアを起動できます。後でホストされたクラスターを作成すると、インベントリーのハードウェアを使用してデータコントロールプレーンノードがプロビジョニングされます。検出 ISO の取得に使用されるオブジェクトは InfraEnv
リソースです。検出 ISO からベアメタルノードをブートするようにクラスターを設定する BareMetalHost
オブジェクトを作成する必要があります。
手順
次のコマンドを入力して、ハードウェアインベントリーを保存する名前空間を作成します。
oc --kubeconfig ~/<directory_example>/mgmt-kubeconfig create \ namespace <namespace_example>
$ oc --kubeconfig ~/<directory_example>/mgmt-kubeconfig create \ namespace <namespace_example>
Copy to Clipboard Copied! Toggle word wrap Toggle overflow ここでは、以下のようになります。
- <directory_example>
-
管理クラスターの
kubeconfig
ファイルが保存されるディレクトリーの名前です。 - <namespace_example>
作成する namespace の名前です(例:
hardware-inventory
)。出力例
namespace/hardware-inventory created
namespace/hardware-inventory created
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
次のコマンドを入力して、管理クラスターのプルシークレットをコピーします。
Copy to Clipboard Copied! Toggle word wrap Toggle overflow ここでは、以下のようになります。
- <directory_example>
-
管理クラスターの
kubeconfig
ファイルが保存されるディレクトリーの名前です。 - <namespace_example>
作成する namespace の名前です(例:
hardware-inventory
)。出力例
secret/pull-secret created
secret/pull-secret created
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
次のコンテンツを YAML ファイルに追加して、
InfraEnv
リソースを作成します。Copy to Clipboard Copied! Toggle word wrap Toggle overflow 次のコマンドを入力して、YAML ファイルに変更を適用します。
oc apply -f <infraenv_config>.yaml
$ oc apply -f <infraenv_config>.yaml
Copy to Clipboard Copied! Toggle word wrap Toggle overflow <
;infraenv_config>
; をファイルの名前に置き換えます。次のコマンドを入力して、
InfraEnv
リソースが作成されたことを確認します。oc --kubeconfig ~/<directory_example>/mgmt-kubeconfig \ -n <namespace_example> get infraenv hosted
$ oc --kubeconfig ~/<directory_example>/mgmt-kubeconfig \ -n <namespace_example> get infraenv hosted
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 次の 2 つの方法のいずれかに従って、ベアメタルホストを追加します。
Metal3 Operator を使用しない場合は、
InfraEnv
リソースから検出 ISO を取得し、次の手順を実行してホストを手動で起動します。次のコマンドを入力して、ライブ ISO をダウンロードします。
oc get infraenv -A
$ oc get infraenv -A
Copy to Clipboard Copied! Toggle word wrap Toggle overflow oc get infraenv <namespace_example> -o jsonpath='{.status.isoDownloadURL}' -n <namespace_example> <iso_url>
$ oc get infraenv <namespace_example> -o jsonpath='{.status.isoDownloadURL}' -n <namespace_example> <iso_url>
Copy to Clipboard Copied! Toggle word wrap Toggle overflow -
ISO を起動します。ノードは Assisted Service と通信し、
InfraEnv
リソースと同じ namespace 内のエージェントとして登録します。 エージェントごとに、インストールディスク ID とホスト名を設定し、エージェントを使用する準備ができていることを示すためにこれを承認します。次のコマンドを入力します。
oc -n <hosted_control_plane_namespace> get agents
$ oc -n <hosted_control_plane_namespace> get agents
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 出力例
NAME CLUSTER APPROVED ROLE STAGE 86f7ac75-4fc4-4b36-8130-40fa12602218 auto-assign e57a637f-745b-496e-971d-1abbf03341ba auto-assign
NAME CLUSTER APPROVED ROLE STAGE 86f7ac75-4fc4-4b36-8130-40fa12602218 auto-assign e57a637f-745b-496e-971d-1abbf03341ba auto-assign
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 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 86f7ac75-4fc4-4b36-8130-40fa12602218 \ -p '{"spec":{"installation_disk_id":"/dev/sda","approved":true,"hostname":"worker-0.example.krnl.es"}}' \ --type merge
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 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
$ 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 Copied! Toggle word wrap Toggle overflow oc -n <hosted_control_plane_namespace> get agents
$ oc -n <hosted_control_plane_namespace> get agents
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 出力例
NAME CLUSTER APPROVED ROLE STAGE 86f7ac75-4fc4-4b36-8130-40fa12602218 true auto-assign e57a637f-745b-496e-971d-1abbf03341ba true auto-assign
NAME CLUSTER APPROVED ROLE STAGE 86f7ac75-4fc4-4b36-8130-40fa12602218 true auto-assign e57a637f-745b-496e-971d-1abbf03341ba true auto-assign
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
Metal3 Operator を使用する場合は、次のオブジェクトを作成してベアメタルホスト登録を自動化できます。
YAML ファイルを作成し、以下の内容を追加します。
Copy to Clipboard Copied! Toggle word wrap Toggle overflow ここでは、以下のようになります。
- <namespace_example>
- お使いの namespace です。
- <password>
- これは、シークレットのパスワードです。
- <username>
- シークレットのユーザー名です。
- <bmc_address>
BareMetalHost
オブジェクトの BMC アドレスです。注記この YAML ファイルを適用すると、以下のオブジェクトが作成されます。
- Baseboard Management Controller (BMC)の認証情報を持つシークレット
-
BareMetalHost
オブジェクト - エージェントを管理できる HyperShift Operator のロール
infraenvs.agent-install.openshift.io: hosted
カスタムラベルを使用して、InfraEnv
リソースがBareMetalHost
オブジェクトでどのように参照されているかに注目してください。これにより、ノードが ISO で生成された状態で起動されるようになります。
次のコマンドを入力して、YAML ファイルに変更を適用します。
oc apply -f <bare_metal_host_config>.yaml
$ oc apply -f <bare_metal_host_config>.yaml
Copy to Clipboard Copied! Toggle word wrap Toggle overflow &
lt;bare_metal_host_config>
; をファイルの名前に置き換えます。
次のコマンドを入力し、
BareMetalHost
オブジェクトがProvisioning
の状態に移行するまで数分待ちます。oc --kubeconfig ~/<directory_example>/mgmt-kubeconfig -n <namespace_example> get bmh
$ oc --kubeconfig ~/<directory_example>/mgmt-kubeconfig -n <namespace_example> get bmh
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 出力例
NAME STATE CONSUMER ONLINE ERROR AGE hosted-worker0 provisioning true 106s hosted-worker1 provisioning true 106s hosted-worker2 provisioning true 106s
NAME STATE CONSUMER ONLINE ERROR AGE hosted-worker0 provisioning true 106s hosted-worker1 provisioning true 106s hosted-worker2 provisioning true 106s
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 次のコマンドを入力して、ノードが起動してエージェントとして表示されていることを確認します。このプロセスには数分かかるため、コマンドを複数回入力する必要がある場合があります。
oc --kubeconfig ~/<directory_example>/mgmt-kubeconfig -n <namespace_example> get agent
$ oc --kubeconfig ~/<directory_example>/mgmt-kubeconfig -n <namespace_example> get agent
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 出力例
NAME CLUSTER APPROVED ROLE STAGE aaaaaaaa-aaaa-aaaa-aaaa-aaaaaaaa0201 true auto-assign aaaaaaaa-aaaa-aaaa-aaaa-aaaaaaaa0202 true auto-assign aaaaaaaa-aaaa-aaaa-aaaa-aaaaaaaa0203 true auto-assign
NAME CLUSTER APPROVED ROLE STAGE aaaaaaaa-aaaa-aaaa-aaaa-aaaaaaaa0201 true auto-assign aaaaaaaa-aaaa-aaaa-aaaa-aaaaaaaa0202 true auto-assign aaaaaaaa-aaaa-aaaa-aaaa-aaaaaaaa0203 true auto-assign
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
4.2.3.2. コンソールを使用した InfraEnv リソースの作成 リンクのコピーリンクがクリップボードにコピーされました!
コンソールを使用して InfraEnv
リソースを作成するには、次の手順を実行します。
手順
- OpenShift Container Platform Web コンソールを開き、管理者の認証情報を入力してログインします。コンソールを開く方法は、Web コンソールへのアクセスを参照してください。
- コンソールヘッダーで、All Clusters が選択されていることを確認します。
-
Infrastructure
Host inventory Create infrastructure environment をクリックします。 -
InfraEnv
リソースを作成したら、Add hosts をクリックし、使用可能なオプションから選択して、InfraEnv ビュー内からベアメタルホストを追加します。
関連情報
4.2.4. ベアメタルでのホステッドクラスターの作成 リンクのコピーリンクがクリップボードにコピーされました!
ホステッドクラスターの作成やインポートが可能です。Assisted Installer がマルチクラスターエンジン Operator へのアドオンとして有効になり、エージェントプラットフォームでホステッドクラスターを作成すると、HyperShift Operator は Hosted Control Plane namespace に Agent Cluster API プロバイダーをインストールします。
4.2.4.1. CLI を使用したホストされたクラスターの作成 リンクのコピーリンクがクリップボードにコピーされました!
コマンドラインインターフェイス(CLI)を使用してホステッドクラスターを作成するには、次の手順を実行します。
前提条件
- 各ホステッドクラスターに、クラスター全体で一意の名前が必要です。multicluster engine Operator によってホステッドクラスターを管理するには、ホステッドクラスター名を既存のマネージドクラスターと同じにすることはできません。
-
ホステッドクラスター名として
clusters
を使用しないでください。 - ホステッドクラスターは、multicluster engine Operator のマネージドクラスターの namespace には作成できません。
- クラスターにデフォルトのストレージクラスが設定されていることを確認します。設定されていない場合は、保留中の永続ボリューム要求(PVC)が表示される可能性があります。
-
デフォルトでは、
hcp create cluster エージェント
コマンドを使用すると、ホストされたクラスターがノードポートで作成されます。ただし、ベアメタル上のホステッドクラスターの推奨される公開ストラテジーは、ロードバランサーを介してサービスを公開することです。Web コンソールまたは Red Hat Advanced Cluster Management を使用してホステッドクラスターを作成する場合、Kubernetes API サーバー以外のサービスの公開ストラテジーを設定するには、HostedCluster
カスタムリソースでservicePublishingStrategy
情報を手動で指定する必要があります。詳細は、この手順のステップ 4 を参照してください。 「ホストされたコントロールプレーンをベアメタルにデプロイするための準備」で説明されている要件を満たしていることを確認してください。これには、インフラストラクチャー、ファイアウォール、ポート、およびサービスに関する要件が含まれます。たとえば、これらの要件では、以下のコマンド例のように、管理クラスター内のベアメタルホストに適切なゾーンラベルを追加する方法について説明します。
oc label node [compute-node-1] topology.kubernetes.io/zone=zone1
$ oc label node [compute-node-1] topology.kubernetes.io/zone=zone1
Copy to Clipboard Copied! Toggle word wrap Toggle overflow oc label node [compute-node-2] topology.kubernetes.io/zone=zone2
$ oc label node [compute-node-2] topology.kubernetes.io/zone=zone2
Copy to Clipboard Copied! Toggle word wrap Toggle overflow oc label node [compute-node-3] topology.kubernetes.io/zone=zone3
$ oc label node [compute-node-3] topology.kubernetes.io/zone=zone3
Copy to Clipboard Copied! Toggle word wrap Toggle overflow - ハードウェアインベントリーにベアメタルノードが追加されていることを確認します。
手順
以下のコマンドを入力して namespace を作成します。
oc create ns <hosted_cluster_namespace>
$ oc create ns <hosted_cluster_namespace>
Copy to Clipboard Copied! Toggle word wrap Toggle overflow <
;hosted_cluster_namespace
> をホストされたクラスターの namespace の識別子に置き換えます。通常、namespace は HyperShift Operator によって作成されますが、ベアメタルでのホストされたクラスターの作成プロセス中に、namespace がすでに存在している必要がある Cluster API プロバイダーロールが生成されます。次のコマンドを入力して、ホステッドクラスターの設定ファイルを作成します。
Copy to Clipboard Copied! Toggle word wrap Toggle overflow - 1
- ホステッドクラスターの名前を指定します。
- 2
- プルシークレットへのパスを指定します (例:
/user/name/pullsecret
)。 - 3
- ホステッドコントロールプレーンの namespace を指定します。この名前空間でエージェントを使用できるようにするには、
oc get agent -n <hosted_control_plane_namespace
> コマンドを入力します。 - 4
- ベースドメインを指定します (例:
krnl.es
)。 - 5
--api-server-address
フラグは、ホステッドクラスター内の Kubernetes API 通信に使用される IP アドレスを定義します。--api-server-address
フラグを設定しない場合は、管理クラスターに接続するためにログインする必要があります。- 6
- etcd ストレージクラス名を指定します (例:
lvm-storageclass
)。 - 7
- SSH 公開鍵へのパスを指定します。デフォルトのファイルパスは
~/.ssh/id_rsa.pub
です。 - 8
- ホステッドクラスターの namespace を指定します。
- 9
- Hosted Control Plane コンポーネントの可用性ポリシーを指定します。サポートされているオプションは
SingleReplica
とHighlyAvailable
です。デフォルト値はHighlyAvailable
です。 - 10
- 使用するサポート対象の OpenShift Container Platform バージョンを指定します (例:
4.19.0-multi
)。非接続環境を使用している場合は、<ocp_release_image>
をダイジェストイメージに置き換えます。OpenShift Container Platform リリースイメージダイジェストを抽出するには、リリースイメージダイジェストの展開を参照してください。 - 11
- ノードプールのレプリカ数を指定します (例:
3
)。同じ数のレプリカを作成するには、レプリカ数を0
以上に指定する必要があります。それ以外の場合、ノードプールは作成されません。 - 12
--ssh-key
フラグの後に、SSH キーへのパスを指定します(例:user/.ssh/id_rsa
)。
サービス公開ストラテジーを設定します。デフォルトでは、ノードポートは追加のインフラストラクチャーなしで常に利用できるため、ホステッドクラスターは NodePort サービス公開ストラテジーを使用します。ただし、ロードバランサーを使用するようにサービス公開ストラテジーを設定できます。
- デフォルトの NodePort ストラテジーを使用している場合は、管理クラスターノードではなく、ホステッドクラスターコンピュートノードを指すように DNS を設定します。詳細は、ベアメタルの DNS 設定を参照してください。
実稼働環境では、証明書の処理と自動 DNS 解決を提供するため、LoadBalancer ストラテジーを使用します。サービス公開ストラテジー
LoadBalancer
を変更するには、ホストされたクラスター設定ファイルでサービス公開ストラテジーの詳細を編集します。Copy to Clipboard Copied! Toggle word wrap Toggle overflow - 1
LoadBalancer
を API サーバータイプとして指定します。その他すべてのサービスについては、Route
をタイプとして指定します。
次のコマンドを入力して、ホストされたクラスター設定ファイルに変更を適用します。
oc apply -f hosted_cluster_config.yaml
$ oc apply -f hosted_cluster_config.yaml
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 次のコマンドを入力して、ホステッドクラスター、ノードプール、および Pod の作成を監視します。
oc get hostedcluster \ <hosted_cluster_namespace> -n \ <hosted_cluster_namespace> -o \ jsonpath='{.status.conditions[?(@.status=="False")]}' | jq .
$ oc get hostedcluster \ <hosted_cluster_namespace> -n \ <hosted_cluster_namespace> -o \ jsonpath='{.status.conditions[?(@.status=="False")]}' | jq .
Copy to Clipboard Copied! Toggle word wrap Toggle overflow oc get nodepool \ <hosted_cluster_namespace> -n \ <hosted_cluster_namespace> -o \ jsonpath='{.status.conditions[?(@.status=="False")]}' | jq .
$ oc get nodepool \ <hosted_cluster_namespace> -n \ <hosted_cluster_namespace> -o \ jsonpath='{.status.conditions[?(@.status=="False")]}' | jq .
Copy to Clipboard Copied! Toggle word wrap Toggle overflow oc get pods -n <hosted_cluster_namespace>
$ oc get pods -n <hosted_cluster_namespace>
Copy to Clipboard Copied! Toggle word wrap Toggle overflow -
ホストされたクラスターの準備ができていることを確認します。クラスターは、ステータスが
Available: True
の場合、ノードプールのステータスにAllMachinesReady: True
と表示され、すべてのクラスター Operator が正常です。 ホストされたクラスターに MetalLB をインストールします。
次のコマンドを入力して、ホステッドクラスターから
kubeconfig
ファイルを抽出し、ホステッドクラスターアクセス用の環境変数を設定します。Copy to Clipboard Copied! Toggle word wrap Toggle overflow export KUBECONFIG="/path/to/kubeconfig-<hosted_cluster_namespace>.yaml"
$ export KUBECONFIG="/path/to/kubeconfig-<hosted_cluster_namespace>.yaml"
Copy to Clipboard Copied! Toggle word wrap Toggle overflow install-metallb-operator.yaml
ファイルを作成して MetalLB Operator をインストールします。Copy to Clipboard Copied! Toggle word wrap Toggle overflow 以下のコマンドを入力してファイルを適用します。
oc apply -f install-metallb-operator.yaml
$ oc apply -f install-metallb-operator.yaml
Copy to Clipboard Copied! Toggle word wrap Toggle overflow deploy-metallb-ipaddresspool.yaml
ファイルを作成して、MetalLB IP アドレスプールを設定します。Copy to Clipboard Copied! Toggle word wrap Toggle overflow 次のコマンドを入力して設定を適用します。
oc apply -f deploy-metallb-ipaddresspool.yaml
$ oc apply -f deploy-metallb-ipaddresspool.yaml
Copy to Clipboard Copied! Toggle word wrap Toggle overflow Operator のステータス、IP アドレスプール、および L2 advertise をチェックして、MetalLB がインストールされていることを確認します。次のコマンドを入力します。
oc get pods -n metallb-system
$ oc get pods -n metallb-system
Copy to Clipboard Copied! Toggle word wrap Toggle overflow oc get ipaddresspool -n metallb-system
$ oc get ipaddresspool -n metallb-system
Copy to Clipboard Copied! Toggle word wrap Toggle overflow oc get l2advertisement -n metallb-system
$ oc get l2advertisement -n metallb-system
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
Ingress のロードバランサーを設定します。
ingress-loadbalancer.yaml
ファイルを作成します。Copy to Clipboard Copied! Toggle word wrap Toggle overflow 次のコマンドを入力して設定を適用します。
oc apply -f ingress-loadbalancer.yaml
$ oc apply -f ingress-loadbalancer.yaml
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 次のコマンドを入力して、ロードバランサーサービスが期待どおりに機能することを確認します。
oc get svc metallb-ingress -n openshift-ingress
$ oc get svc metallb-ingress -n openshift-ingress
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 出力例
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE metallb-ingress LoadBalancer 172.31.127.129 10.11.176.71 80:30961/TCP,443:32090/TCP 16h
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE metallb-ingress LoadBalancer 172.31.127.129 10.11.176.71 80:30961/TCP,443:32090/TCP 16h
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
ロードバランサーと連携するように DNS を設定します。
-
*.
の DNS を設定します。apps
.<hosted_cluster_namespace>.<base_domain> ワイルドカード DNS レコードをロードバランサーの IP アドレスにポイントして、apps ドメイン 次のコマンドを入力して、DNS 解決を確認します。
nslookup console-openshift-console.apps.<hosted_cluster_namespace>.<base_domain> <load_balancer_ip_address>
$ nslookup console-openshift-console.apps.<hosted_cluster_namespace>.<base_domain> <load_balancer_ip_address>
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 出力例
Server: 10.11.176.1 Address: 10.11.176.1#53 Name: console-openshift-console.apps.my-hosted-cluster.sample-base-domain.com Address: 10.11.176.71
Server: 10.11.176.1 Address: 10.11.176.1#53 Name: console-openshift-console.apps.my-hosted-cluster.sample-base-domain.com Address: 10.11.176.71
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
-
検証
次のコマンドを入力して、クラスター Operator を確認します。
oc get clusteroperators
$ oc get clusteroperators
Copy to Clipboard Copied! Toggle word wrap Toggle overflow すべての Operator に
AVAILABLE: True
、PROGRESSING: False
、およびDEGRADED: False
が表示されていることを確認します。次のコマンドを入力してノードを確認します。
oc get nodes
$ oc get nodes
Copy to Clipboard Copied! Toggle word wrap Toggle overflow すべてのノードのステータスが
READY
であることを確認します。Web ブラウザーに以下の URL を入力して、コンソールへのアクセスをテストします。
https://console-openshift-console.apps.<hosted_cluster_namespace>.<base_domain>
https://console-openshift-console.apps.<hosted_cluster_namespace>.<base_domain>
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
4.2.4.2. コンソールを使用してベアメタル上にホステッドクラスターを作成する リンクのコピーリンクがクリップボードにコピーされました!
コンソールを使用してホステッドクラスターを作成するには、次の手順を実行します。
手順
- OpenShift Container Platform Web コンソールを開き、管理者の認証情報を入力してログインします。コンソールを開く方法は、Web コンソールへのアクセスを参照してください。
- コンソールヘッダーで、All Clusters が選択されていることを確認します。
-
Infrastructure
Clusters をクリックします。 Create cluster
Host inventory Hosted control plane をクリックします。 Create cluster ページが表示されます。
Create cluster ページでプロンプトに従い、クラスター、ノードプール、ネットワーク、および自動化に関する詳細を入力します。
注記クラスターの詳細を入力する際には、次のヒントが役立つ場合があります。
- 事前定義された値を使用してコンソールのフィールドに自動的に値を入力する場合は、ホストインベントリーの認証情報を作成できます。詳細は、「オンプレミス環境の認証情報の作成」を参照してください。
- Cluster details ページのプルシークレットは、OpenShift Container Platform リソースへのアクセスに使用する OpenShift Container Platform プルシークレットです。ホストインベントリー認証情報を選択した場合は、プルシークレットが自動的に入力されます。
- Node pools ページでは、namespace にノードプールのホストが含まれます。コンソールを使用してホストインベントリーを作成した場合、コンソールは専用の namespace を作成します。
-
Networking ページで、API サーバー公開ストラテジーを選択します。ホステッドクラスターの API サーバーは、既存のロードバランサーを使用するか、
NodePort
タイプのサービスとして公開できます。API サーバーに到達できる宛先を指すapi.<hosted_cluster_name>.<base_domain>
設定の DNS エントリーが存在する必要があります。このエントリーとして、管理クラスター内のノードの 1 つを指すレコード、または受信トラフィックを Ingress Pod にリダイレクトするロードバランサーを指すレコードを指定できます。
エントリーを確認し、Create をクリックします。
Hosted cluster ビューが表示されます。
- Hosted cluster ビューでホステッドクラスターのデプロイメントを監視します。
- ホステッドクラスターに関する情報が表示されない場合は、All Clusters が選択されていることを確認し、クラスター名をクリックします。
- コントロールプレーンコンポーネントの準備が整うまで待ちます。このプロセスには数分かかる場合があります。
- ノードプールのステータスを表示するには、NodePool セクションまでスクロールします。ノードをインストールするプロセスには約 10 分かかります。Nodes をクリックして、ノードがホステッドクラスターに参加したかどうかを確認することもできます。
次のステップ
- Web コンソールにアクセスするには、Web コンソールへのアクセス を参照してください。
4.2.4.3. ミラーレジストリーを使用してベアメタル上にホステッドクラスターを作成する リンクのコピーリンクがクリップボードにコピーされました!
ミラーレジストリーを使用して、hcp create cluster
コマンドで --image-content-sources
フラグを指定して、ベアメタル上にホステッドクラスターを作成できます。
手順
YAML ファイルを作成して、イメージコンテンツソースポリシー (ICSP) を定義します。以下の例を参照してください。
Copy to Clipboard Copied! Toggle word wrap Toggle overflow -
ファイルを
icsp.yaml
として保存します。このファイルにはミラーレジストリーが含まれます。 ミラーレジストリーを使用してホステッドクラスターを作成するには、次のコマンドを実行します。
Copy to Clipboard Copied! Toggle word wrap Toggle overflow - 1
- ホステッドクラスターの名前を指定します (例:
example
)。 - 2
- プルシークレットへのパスを指定します (例:
/user/name/pullsecret
)。 - 3
- Hosted Control Plane namespace を指定します (例:
clusters-example
)。oc get agent -n <hosted-control-plane-namespace>
コマンドを使用して、この namespace でエージェントが使用可能であることを確認します。 - 4
- ベースドメインを指定します (例:
krnl.es
)。 - 5
--api-server-address
フラグは、ホステッドクラスター内の Kubernetes API 通信に使用される IP アドレスを定義します。--api-server-address
フラグを設定しない場合は、管理クラスターに接続するためにログインする必要があります。- 6
- ICSP およびミラーレジストリーを定義する
icsp.yaml
ファイルを指定します。 - 7
- SSH 公開鍵へのパスを指定します。デフォルトのファイルパスは
~/.ssh/id_rsa.pub
です。 - 8
- ホステッドクラスターの namespace を指定します。
- 9
- 使用するサポート対象の OpenShift Container Platform バージョンを指定します (例:
4.19.0-multi
)。非接続環境を使用している場合は、<ocp_release_image>
をダイジェストイメージに置き換えます。OpenShift Container Platform リリースイメージダイジェストを抽出するには、「OpenShift Container Platform リリースイメージダイジェストの抽出」を参照してください。
次のステップ
- コンソールでホステッドクラスターを作成するときに再利用できる認証情報を作成するには、オンプレミス環境の認証情報の作成 を参照してください。
- ホステッドクラスターにアクセスするには、ホステッドクラスターへのアクセス を参照してください。
- Discovery Image を使用してホストインベントリーにホストを追加するには、Discovery Image を使用したホストインベントリーへのホストの追加 を参照してください。
- OpenShift Container Platform リリースイメージダイジェストを抽出するには、OpenShift Container Platform リリースイメージダイジェストの抽出 を参照してください。
4.2.5. ホステッドクラスター作成の確認 リンクのコピーリンクがクリップボードにコピーされました!
デプロイメントプロセスが完了したら、ホステッドクラスターが正常に作成されたことを確認できます。ホステッドクラスターの作成から数分後に、次の手順に従います。
手順
次の extract コマンドを入力して、新しいホステッドクラスターの kubeconfig を取得します。
oc extract -n <hosted-control-plane-namespace> secret/admin-kubeconfig \ --to=- > kubeconfig-<hosted-cluster-name>
$ oc extract -n <hosted-control-plane-namespace> secret/admin-kubeconfig \ --to=- > kubeconfig-<hosted-cluster-name>
Copy to Clipboard Copied! Toggle word wrap Toggle overflow kubeconfig を使用して、ホステッドクラスターのクラスター Operator を表示します。以下のコマンドを入力します。
oc get co --kubeconfig=kubeconfig-<hosted-cluster-name>
$ oc get co --kubeconfig=kubeconfig-<hosted-cluster-name>
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 出力例
NAME VERSION AVAILABLE PROGRESSING DEGRADED SINCE MESSAGE console 4.10.26 True False False 2m38s 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
NAME VERSION AVAILABLE PROGRESSING DEGRADED SINCE MESSAGE console 4.10.26 True False False 2m38s 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
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 次のコマンドを入力して、ホステッドクラスター上で実行中の Pod を表示することもできます。
oc get pods -A --kubeconfig=kubeconfig-<hosted-cluster-name>
$ oc get pods -A --kubeconfig=kubeconfig-<hosted-cluster-name>
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 出力例
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
4.2.6. ホストされたクラスターでのカスタム API サーバー証明書の設定 リンクのコピーリンクがクリップボードにコピーされました!
API サーバーのカスタム証明書を設定するには、HostedCluster
設定の spec.configuration.apiServer
セクションに証明書の詳細を指定します。
カスタム証明書は、Day-1 または day-2 操作のいずれかで設定できます。ただし、サービス公開ストラテジーは、ホステッドクラスターの作成時に設定した後に不変であるため、設定する予定の Kubernetes API サーバーのホスト名を知っている必要があります。
前提条件
管理クラスターにカスタム証明書が含まれる Kubernetes シークレットを作成している。シークレットには次のキーが含まれます。
-
tls.crt
: 証明書 -
tls.key
: 秘密鍵
-
-
HostedCluster
設定にロードバランサーを使用するサービス公開ストラテジーが含まれている場合は、証明書の Subject Alternative Names (SAN)が内部 API エンドポイント(api-int
)と競合しないようにしてください。内部 API エンドポイントは、プラットフォームによって自動的に作成され、管理されます。カスタム証明書と内部 API エンドポイントの両方で同じホスト名を使用すると、ルーティングの競合が発生する可能性があります。このルールの唯一の例外は、Private
またはPublicAndPrivate
設定で AWS をプロバイダーとして使用する場合です。この場合、SAN 競合はプラットフォームによって管理されます。 - 証明書は外部 API エンドポイントに対して有効である必要があります。
- 証明書の有効期間は、クラスターの予想されるライフサイクルと一致します。
手順
次のコマンドを入力して、カスタム証明書でシークレットを作成します。
oc create secret tls sample-hosted-kas-custom-cert \ --cert=path/to/cert.crt \ --key=path/to/key.key \ -n <hosted_cluster_namespace>
$ oc create secret tls sample-hosted-kas-custom-cert \ --cert=path/to/cert.crt \ --key=path/to/key.key \ -n <hosted_cluster_namespace>
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 以下の例のように、カスタム証明書の詳細を使用して
HostedCluster
設定を更新します。Copy to Clipboard Copied! Toggle word wrap Toggle overflow 次のコマンドを入力して、
HostedCluster
設定に変更を適用します。oc apply -f <hosted_cluster_config>.yaml
$ oc apply -f <hosted_cluster_config>.yaml
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
検証
- API サーバー Pod をチェックして、新しい証明書がマウントされていることを確認します。
- カスタムドメイン名を使用して、API サーバーへの接続をテストします。
-
ブラウザーで証明書の詳細を確認するか、
openssl
などのツールを使用して確認します。