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 クラスターです。ホステッドクラスターには、コントロールプレーンとそれに対応するデータプレーンが含まれます。ホステッドクラスターは、multicluster engine Operator のコンソールか、Hosted Control Plane のコマンドラインインターフェイス (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-
管理クラスター上のベアメタルホストに
topology.kubernetes.io/zoneラベルを追加する必要があります。各ホストのtopology.kubernetes.io/zoneの値が一意であることを確認します。そうしないと、すべての Hosted Control Plane Pod が 1 つのノードにスケジュールされ、単一障害点が発生します。 - ベアメタルに Hosted Control Plane をプロビジョニングするには、Agent プラットフォームを使用できます。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: 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 設定の例
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
前述の例の場合、*.apps.example.krnl.es. IN A 192.168.122.23 が、ホステッドクラスター内のノード、またはロードバランサー (設定されている場合) です。
IPv6 ネットワーク上の非接続環境用に DNS を設定する場合、設定は次の例のようになります。
IPv6 ネットワークの DNS 設定の例
api.example.krnl.es. IN A 2620:52:0:1306::5
api.example.krnl.es. IN A 2620:52:0:1306::6
api.example.krnl.es. IN A 2620:52:0:1306::7
api-int.example.krnl.es. IN A 2620:52:0:1306::5
api-int.example.krnl.es. IN A 2620:52:0:1306::6
api-int.example.krnl.es. IN A 2620:52:0:1306::7
`*`.apps.example.krnl.es. IN A 2620:52:0:1306::10
デュアルスタックネットワークの非接続環境で DNS を設定する場合は、IPv4 と IPv6 の両方の DNS エントリーを含めるようにしてください。
デュアルスタックネットワークの DNS 設定の例
host-record=api-int.hub-dual.dns.base.domain.name,192.168.126.10
host-record=api.hub-dual.dns.base.domain.name,192.168.126.10
address=/apps.hub-dual.dns.base.domain.name/192.168.126.11
dhcp-host=aa:aa:aa:aa:10:01,ocp-master-0,192.168.126.20
dhcp-host=aa:aa:aa:aa:10:02,ocp-master-1,192.168.126.21
dhcp-host=aa:aa:aa:aa:10:03,ocp-master-2,192.168.126.22
dhcp-host=aa:aa:aa:aa:10:06,ocp-installer,192.168.126.25
dhcp-host=aa:aa:aa:aa:10:07,ocp-bootstrap,192.168.126.26
host-record=api-int.hub-dual.dns.base.domain.name,2620:52:0:1306::2
host-record=api.hub-dual.dns.base.domain.name,2620:52:0:1306::2
address=/apps.hub-dual.dns.base.domain.name/2620:52:0:1306::3
dhcp-host=aa:aa:aa:aa:10:01,ocp-master-0,[2620:52:0:1306::5]
dhcp-host=aa:aa:aa:aa:10:02,ocp-master-1,[2620:52:0:1306::6]
dhcp-host=aa:aa:aa:aa:10:03,ocp-master-2,[2620:52:0:1306::7]
dhcp-host=aa:aa:aa:aa:10:06,ocp-installer,[2620:52:0:1306::8]
dhcp-host=aa:aa:aa:aa:10:07,ocp-bootstrap,[2620:52:0:1306::9]
4.2.3. InfraEnv リソースの作成 リンクのコピーリンクがクリップボードにコピーされました!
ベアメタル上にホステッドクラスターを作成するには、InfraEnv リソースが必要です。
4.2.3.1. InfraEnv リソースの作成とノードの追加 リンクのコピーリンクがクリップボードにコピーされました!
Hosted Control Plane では、コントロールプレーンコンポーネントは管理クラスター上の Pod として実行され、データプレーンは専用ノード上で実行されます。Assisted Service を使用すると、ハードウェアをハードウェアインベントリーに追加する検出 ISO を使用して、ハードウェアをブートできます。後でホステッドクラスターを作成するときに、インベントリーのハードウェアを使用してデータプレーンノードをプロビジョニングします。検出 ISO を取得するために使用されるオブジェクトは、InfraEnv リソースです。検出 ISO からベアメタルノードをブートするようにクラスターを設定する BareMetalHost オブジェクトを作成する必要があります。
手順
次のコマンドを入力して、ハードウェアインベントリーを保存する namespace を作成します。
$ oc --kubeconfig ~/<directory_example>/mgmt-kubeconfig create \ namespace <namespace_example>ここでは、以下のようになります。
- <directory_example>
-
管理クラスターの
kubeconfigファイルが保存されるディレクトリーの名前です。 - <namespace_example>
作成する namespace の名前 (例:
hardware-inventory) です。出力例
namespace/hardware-inventory created
次のコマンドを入力して、管理クラスターのプルシークレットをコピーします。
$ oc --kubeconfig ~/<directory_example>/mgmt-kubeconfig \ -n openshift-config get secret pull-secret -o yaml \ | grep -vE "uid|resourceVersion|creationTimestamp|namespace" \ | sed "s/openshift-config/<namespace_example>/g" \ | oc --kubeconfig ~/<directory_example>/mgmt-kubeconfig \ -n <namespace> apply -f -ここでは、以下のようになります。
- <directory_example>
-
管理クラスターの
kubeconfigファイルが保存されるディレクトリーの名前です。 - <namespace_example>
作成する namespace の名前 (例:
hardware-inventory) です。出力例
secret/pull-secret created
次のコンテンツを YAML ファイルに追加して、
InfraEnvリソースを作成します。apiVersion: agent-install.openshift.io/v1beta1 kind: InfraEnv metadata: name: hosted namespace: <namespace_example> spec: additionalNTPSources: - <ip_address> pullSecretRef: name: pull-secret sshAuthorizedKey: <ssh_public_key> # ...次のコマンドを入力して、YAML ファイルに変更を適用します。
$ oc apply -f <infraenv_config>.yaml<infraenv_config>は、ファイルの名前に置き換えます。次のコマンドを入力して、
InfraEnvリソースが作成されたことを確認します。$ oc --kubeconfig ~/<directory_example>/mgmt-kubeconfig \ -n <namespace_example> get infraenv hosted次の 2 つの方法のいずれかに従ってベアメタルホストを追加します。
Metal3 Operator を使用しない場合は、
InfraEnvリソースから検出 ISO を取得し、次のステップを実行して手動でホストをブートします。次のコマンドを入力してライブ ISO をダウンロードします。
$ oc get infraenv -A$ oc get infraenv <namespace_example> -o jsonpath='{.status.isoDownloadURL}' -n <namespace_example> <iso_url>-
ISO をブートします。ノードは Assisted Service と通信し、
InfraEnvリソースと同じ namespace にエージェントとして登録されます。 各エージェントに対して、インストールディスク ID とホスト名を設定し、承認してエージェントが使用可能であることを示します。次のコマンドを入力します。
$ oc -n <hosted_control_plane_namespace> get agents出力例
NAME CLUSTER APPROVED ROLE STAGE 86f7ac75-4fc4-4b36-8130-40fa12602218 auto-assign e57a637f-745b-496e-971d-1abbf03341ba auto-assign$ 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$ oc -n <hosted_control_plane_namespace> get agents出力例
NAME CLUSTER APPROVED ROLE STAGE 86f7ac75-4fc4-4b36-8130-40fa12602218 true auto-assign e57a637f-745b-496e-971d-1abbf03341ba true auto-assign
Metal3 Operator を使用する場合は、次のオブジェクトを作成することで、ベアメタルホストの登録を自動化できます。
YAML ファイルを作成し、そこに次のコンテンツを追加します。
apiVersion: v1 kind: Secret metadata: name: hosted-worker0-bmc-secret namespace: <namespace_example> data: password: <password> username: <username> type: Opaque --- apiVersion: v1 kind: Secret metadata: name: hosted-worker1-bmc-secret namespace: <namespace_example> data: password: <password> username: <username> type: Opaque --- apiVersion: v1 kind: Secret metadata: name: hosted-worker2-bmc-secret namespace: <namespace_example> data: password: <password> username: <username> type: Opaque --- apiVersion: metal3.io/v1alpha1 kind: BareMetalHost metadata: name: hosted-worker0 namespace: <namespace_example> labels: infraenvs.agent-install.openshift.io: hosted annotations: inspect.metal3.io: disabled bmac.agent-install.openshift.io/hostname: hosted-worker0 spec: automatedCleaningMode: disabled bmc: disableCertificateVerification: True address: <bmc_address> credentialsName: hosted-worker0-bmc-secret bootMACAddress: aa:aa:aa:aa:02:01 online: true --- apiVersion: metal3.io/v1alpha1 kind: BareMetalHost metadata: name: hosted-worker1 namespace: <namespace_example> labels: infraenvs.agent-install.openshift.io: hosted annotations: inspect.metal3.io: disabled bmac.agent-install.openshift.io/hostname: hosted-worker1 spec: automatedCleaningMode: disabled bmc: disableCertificateVerification: True address: <bmc_address> credentialsName: hosted-worker1-bmc-secret bootMACAddress: aa:aa:aa:aa:02:02 online: true --- apiVersion: metal3.io/v1alpha1 kind: BareMetalHost metadata: name: hosted-worker2 namespace: <namespace_example> labels: infraenvs.agent-install.openshift.io: hosted annotations: inspect.metal3.io: disabled bmac.agent-install.openshift.io/hostname: hosted-worker2 spec: automatedCleaningMode: disabled bmc: disableCertificateVerification: True address: <bmc_address> credentialsName: hosted-worker2-bmc-secret bootMACAddress: aa:aa:aa:aa:02:03 online: true --- apiVersion: rbac.authorization.k8s.io/v1 kind: Role metadata: name: capi-provider-role namespace: <namespace_example> rules: - apiGroups: - agent-install.openshift.io resources: - agents verbs: - '*'ここでは、以下のようになります。
- <namespace_example>
- namespace です。
- <password>
- シークレットのパスワードです。
- <username>
- シークレットのユーザー名です。
- <bmc_address>
BareMetalHostオブジェクトの BMC アドレスです。注記この YAML ファイルを適用すると、次のオブジェクトが作成されます。
- ベースボード管理コントローラー (BMC) の認証情報が含まれるシークレット
-
BareMetalHostオブジェクト - HyperShift Operator によるエージェントの管理が可能になるロール
BareMetalHostオブジェクトでinfraenvs.agent-install.openshift.io: hostedカスタムラベルを使用してInfraEnvリソースが参照されることに注意してください。これにより、生成された ISO を使用してノードがブートされます。
次のコマンドを入力して、YAML ファイルに変更を適用します。
$ oc apply -f <bare_metal_host_config>.yaml<bare_metal_host_config>は、ファイルの名前に置き換えます。
次のコマンドを入力し、
BareMetalHostオブジェクトの状態がProvisioningになるまで数分間待ちます。$ oc --kubeconfig ~/<directory_example>/mgmt-kubeconfig -n <namespace_example> get bmh出力例
NAME STATE CONSUMER ONLINE ERROR AGE hosted-worker0 provisioning true 106s hosted-worker1 provisioning true 106s hosted-worker2 provisioning true 106s次のコマンドを入力して、ノードが起動し、エージェントとして表示されていることを確認します。このプロセスには数分かかる場合があり、コマンドを複数回入力する必要があることもあります。
$ oc --kubeconfig ~/<directory_example>/mgmt-kubeconfig -n <namespace_example> get agent出力例
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
4.2.3.2. コンソールを使用して InfraEnv リソースを作成する リンクのコピーリンクがクリップボードにコピーされました!
コンソールを使用して InfraEnv リソースを作成するには、次のステップを実行します。
手順
- OpenShift Container Platform Web コンソールを開き、管理者の認証情報を入力してログインします。コンソールを開く手順は、「Web コンソールへのアクセス」を参照してください。
- コンソールヘッダーで、All Clusters が選択されていることを確認します。
-
Infrastructure
Host inventory Create infrastructure environment をクリックします。 -
InfraEnvリソースを作成した後、InfraEnv ビュー内から Add hosts をクリックし、利用可能なオプションから選択してベアメタルホストを追加します。
4.2.4. ベアメタルでのホステッドクラスターの作成 リンクのコピーリンクがクリップボードにコピーされました!
コマンドラインインターフェイス (CLI)、コンソール、またはミラーレジストリーを使用して、ベアメタル上にホステッドクラスターを作成できます。
4.2.4.1. コンソールを使用したホステッドクラスターの作成 リンクのコピーリンクがクリップボードにコピーされました!
ベアメタルインフラストラクチャーには、ホステッドクラスターを作成またはインポートできます。multicluster engine Operator へのアドオンとして Assisted Installer を有効にし、Agent プラットフォームを使用してホステッドクラスターを作成すると、HyperShift Operator によって Agent Cluster API プロバイダーが Hosted Control Plane namespace にインストールされます。Agent Cluster API プロバイダーは、コントロールプレーンをホストする管理クラスターと、コンピュートノードのみで構成されるホステッドクラスターを接続します。
前提条件
- 各ホステッドクラスターの名前がクラスター全体で一意である。ホステッドクラスター名は、既存のマネージドクラスターと同じにすることはできません。この要件を満たさないと、multicluster engine Operator がホステッドクラスターを管理できません。
-
ホステッドクラスター名として
clustersという単語を使用しない。 - multicluster engine Operator のマネージドクラスターの namespace にホステッドクラスターを作成することはできない。
- 最適なセキュリティーと管理プラクティスを実現するために、他のホステッドクラスターとは別にホステッドクラスターを作成する。
- クラスターにデフォルトのストレージクラスが設定されていることを確認する。そうしない場合、保留中の永続ボリューム要求 (PVC) が表示されることがあります。
-
デフォルトでは、
hcp create cluster agentコマンドを使用すると、ノードポートが設定されたホステッドクラスターが作成されます。ベアメタル上のホステッドクラスターの推奨公開ストラテジーは、ロードバランサーを通じてサービスを公開することです。Web コンソールまたは Red Hat Advanced Cluster Management を使用してホステッドクラスターを作成する場合、Kubernetes API サーバー以外のサービスの公開ストラテジーを設定するには、HostedClusterカスタムリソースでservicePublishingStrategy情報を手動で指定する必要があります。 インフラストラクチャー、ファイアウォール、ポート、およびサービスに関連する要件を含め、「ベアメタル上の Hosted Control Plane の要件」に記載されている要件を満たしていることを確認する。要件では、たとえば次のコマンド例に示すように、管理クラスター内のベアメタルホストに適切なゾーンラベルを追加する方法が説明されています。
$ oc label node [compute-node-1] topology.kubernetes.io/zone=zone1$ oc label node [compute-node-2] topology.kubernetes.io/zone=zone2$ oc label node [compute-node-3] topology.kubernetes.io/zone=zone3- ハードウェアインベントリーにベアメタルノードを追加したことを確認する。
手順
次のコマンドを入力して namespace を作成します。
$ oc create ns <hosted_cluster_namespace><hosted_cluster_namespace>は、ホステッドクラスター namespace の識別子に置き換えます。namespace は HyperShift Operator によって作成されます。ベアメタルインフラストラクチャーにホステッドクラスターを作成するプロセスでは、Cluster API プロバイダー用のロールが生成されます。このロールを生成するには、namespace が事前に存在している必要があります。次のコマンドを入力して、ホステッドクラスターの設定ファイルを作成します。
$ hcp create cluster agent \ --name=<hosted_cluster_name> \1 --pull-secret=<path_to_pull_secret> \2 --agent-namespace=<hosted_control_plane_namespace> \3 --base-domain=<base_domain> \4 --api-server-address=api.<hosted_cluster_name>.<base_domain> \5 --etcd-storage-class=<etcd_storage_class> \6 --ssh-key=<path_to_ssh_key> \7 --namespace=<hosted_cluster_namespace> \8 --control-plane-availability-policy=HighlyAvailable \9 --release-image=quay.io/openshift-release-dev/ocp-release:<ocp_release_image>-multi \10 --node-pool-replicas=<node_pool_replica_count> \11 --render \ --render-sensitive \ --ssh-key <home_directory>/<path_to_ssh_key>/<ssh_key> > hosted-cluster-config.yaml12 - 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
- 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 リリースイメージダイジェストを抽出するには、OpenShift Container Platform リリースイメージダイジェストの抽出 を参照してください。 - 11
- ノードプールのレプリカ数を指定します (例:
3)。レプリカ数は0以上で指定する必要があります。指定したとおりの数のノードが作成されます。この値を指定しない場合、ノードプールは作成されません。 - 12
--ssh-keyフラグの後に、SSH 鍵へのパス (例:user/.ssh/id_rsa) を指定します。
サービス公開ストラテジーを設定します。デフォルトでは、ホステッドクラスターは
NodePortサービス公開ストラテジーを使用します。これは、ノードポートが追加のインフラストラクチャーなしで常に利用可能であるためです。ただし、ロードバランサーを使用するようにサービス公開ストラテジーを設定することもできます。-
デフォルトの
NodePortストラテジーを使用している場合は、管理クラスターノードではなく、ホステッドクラスターコンピュートノードを指すように DNS を設定します。詳細は、「ベアメタル上の DNS 設定」を参照してください。 実稼働環境では、証明書の処理と自動 DNS 解決を提供する
LoadBalancerストラテジーを使用します。次の例は、ホステッドクラスターの設定ファイルでLoadBalancerサービス公開ストラテジーを変更する方法を示しています。# ... spec: services: - service: APIServer servicePublishingStrategy: type: LoadBalancer1 - service: Ignition servicePublishingStrategy: type: Route - service: Konnectivity servicePublishingStrategy: type: Route - service: OAuthServer servicePublishingStrategy: type: Route - service: OIDC servicePublishingStrategy: type: Route sshKey: name: <ssh_key> # ...- 1
- API サーバータイプとして
LoadBalancerを指定します。それ以外のすべてのサービスでは、タイプとしてRouteを指定します。
-
デフォルトの
次のコマンドを入力して、ホステッドクラスター設定ファイルに変更を適用します。
$ oc apply -f hosted_cluster_config.yaml次のコマンドを入力して、ホステッドクラスター、ノードプール、および Pod の作成を確認します。
$ oc get hostedcluster \ <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 .$ oc get pods -n <hosted_cluster_namespace>-
ホステッドクラスターの準備ができていることを確認します。
Available: Trueというステータスはクラスターの準備完了状態であることを示しています。ノードプールのステータスにはAllMachinesReady: Trueと表示されます。これらのステータスは、すべてのクラスター Operator の健全性を示しています。 ホステッドクラスターに MetalLB をインストールします。
次のコマンドを入力して、ホステッドクラスターから
kubeconfigファイルを展開し、ホステッドクラスターアクセス用の環境変数を設定します。$ oc get secret \ <hosted_cluster_namespace>-admin-kubeconfig \ -n <hosted_cluster_namespace> \ -o jsonpath='{.data.kubeconfig}' \ | base64 -d > \ kubeconfig-<hosted_cluster_namespace>.yaml$ export KUBECONFIG="/path/to/kubeconfig-<hosted_cluster_namespace>.yaml"install-metallb-operator.yamlファイルを作成して MetalLB Operator をインストールします。apiVersion: v1 kind: Namespace metadata: name: metallb-system --- apiVersion: operators.coreos.com/v1 kind: OperatorGroup metadata: name: metallb-operator namespace: metallb-system --- apiVersion: operators.coreos.com/v1alpha1 kind: Subscription metadata: name: metallb-operator namespace: metallb-system spec: channel: "stable" name: metallb-operator source: redhat-operators sourceNamespace: openshift-marketplace installPlanApproval: Automatic # ...以下のコマンドを入力してファイルを適用します。
$ oc apply -f install-metallb-operator.yamldeploy-metallb-ipaddresspool.yamlファイルを作成して、MetalLB IP アドレスプールを設定します。apiVersion: metallb.io/v1beta1 kind: IPAddressPool metadata: name: metallb namespace: metallb-system spec: autoAssign: true addresses: - 10.11.176.71-10.11.176.75 --- apiVersion: metallb.io/v1beta1 kind: L2Advertisement metadata: name: l2advertisement namespace: metallb-system spec: ipAddressPools: - metallb # ...次のコマンドを入力して設定を適用します。
$ oc apply -f deploy-metallb-ipaddresspool.yaml次のコマンドを入力して、Operator ステータス、IP アドレスプール、および
L2Advertisementリソースを確認し、MetalLB のインストールを検証します。$ oc get pods -n metallb-system$ oc get ipaddresspool -n metallb-system$ oc get l2advertisement -n metallb-system
Ingress 用のロードバランサーを設定します。
ingress-loadbalancer.yamlファイルを作成します。apiVersion: v1 kind: Service metadata: annotations: metallb.universe.tf/address-pool: metallb 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 # ...次のコマンドを入力して設定を適用します。
$ oc apply -f ingress-loadbalancer.yaml次のコマンドを入力して、ロードバランサーサービスが期待どおりに動作することを確認します。
$ oc get svc metallb-ingress -n openshift-ingress出力例
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
ロードバランサーと連携するように DNS を設定します。
-
*.apps.<hosted_cluster_namespace>.<base_domain>ワイルドカード DNS レコードがロードバランサーの IP アドレスをポイントするように、appsドメインの DNS を設定します。 次のコマンドを入力して DNS 解決を確認します。
$ nslookup console-openshift-console.apps.<hosted_cluster_namespace>.<base_domain> <load_balancer_ip_address>出力例
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
-
検証
次のコマンドを入力して、クラスター Operator を確認します。
$ oc get clusteroperatorsすべての Operator に
AVAILABLE: True、PROGRESSING: False、DEGRADED: Falseが表示されていることを確認します。次のコマンドを入力してノードを確認します。
$ oc get nodes各ノードのステータスが
READYであることを確認します。Web ブラウザーに次の URL を入力して、コンソールへのアクセスをテストします。
https://console-openshift-console.apps.<hosted_cluster_namespace>.<base_domain>
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) を定義します。以下の例を参照してください。
- mirrors: - brew.registry.redhat.io source: registry.redhat.io - mirrors: - brew.registry.redhat.io source: registry.stage.redhat.io - mirrors: - brew.registry.redhat.io source: registry-proxy.engineering.redhat.com-
ファイルを
icsp.yamlとして保存します。このファイルにはミラーレジストリーが含まれます。 ミラーレジストリーを使用してホステッドクラスターを作成するには、次のコマンドを実行します。
$ hcp create cluster agent \ --name=<hosted_cluster_name> \1 --pull-secret=<path_to_pull_secret> \2 --agent-namespace=<hosted_control_plane_namespace> \3 --base-domain=<basedomain> \4 --api-server-address=api.<hosted_cluster_name>.<basedomain> \5 --image-content-sources icsp.yaml \6 --ssh-key <path_to_ssh_key> \7 --namespace <hosted_cluster_namespace> \8 --release-image=quay.io/openshift-release-dev/ocp-release:<ocp_release_image>9 - 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.17.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>kubeconfig を使用して、ホステッドクラスターのクラスター Operator を表示します。以下のコマンドを入力します。
$ oc get co --kubeconfig=kubeconfig-<hosted-cluster-name>出力例
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次のコマンドを入力して、ホステッドクラスター上で実行中の Pod を表示することもできます。
$ oc get pods -A --kubeconfig=kubeconfig-<hosted-cluster-name>出力例
NAMESPACE NAME READY STATUS RESTARTS AGE kube-system konnectivity-agent-khlqv 0/1 Running 0 3m52s openshift-cluster-node-tuning-operator tuned-dhw5p 1/1 Running 0 109s 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-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-kfqnh 2/2 Running 0 113s
4.2.6. ホステッドクラスターでカスタム API サーバー証明書を設定する リンクのコピーリンクがクリップボードにコピーされました!
API サーバーのカスタム証明書を設定するには、HostedCluster 設定の spec.configuration.apiServer セクションで証明書の詳細を指定します。
カスタム証明書は、Day 1 操作または Day 2 操作の中で設定できます。ただし、サービス公開ストラテジーはホステッドクラスターの作成中に設定した後は変更できないため、設定する予定の Kubernetes API サーバーのホスト名を知っておく必要があります。
前提条件
管理クラスターにカスタム証明書が含まれる Kubernetes シークレットを作成しました。シークレットには次の鍵が含まれています。
-
tls.crt: 証明書 -
tls.key: 秘密鍵
-
-
HostedCluster設定にロードバランサーを使用するサービス公開ストラテジーが含まれている場合は、証明書のサブジェクト代替名 (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>次の例に示すように、カスタム証明書の詳細を使用して
HostedCluster設定を更新します。spec: configuration: apiServer: servingCerts: namedCertificates: - names:1 - api-custom-cert-sample-hosted.sample-hosted.example.com servingCertificate:2 name: sample-hosted-kas-custom-cert次のコマンドを入力して、
HostedCluster設定に変更を適用します。$ oc apply -f <hosted_cluster_config>.yaml
検証
- API サーバー Pod をチェックして、新しい証明書がマウントされていることを確認します。
- カスタムドメイン名を使用して API サーバーへの接続をテストします。
-
ブラウザーで、または
opensslなどのツールを使用して、証明書の詳細を確認します。