installer-provisioned クラスターのベアメタルへのデプロイ


OpenShift Container Platform 4.16

installer-provisioned OpenShift Container Platform クラスターをベアメタルにデプロイする

Red Hat OpenShift Documentation Team

概要

このドキュメントでは、installer-provisioned infrastructure を使用してベアメタル上に OpenShift Container Platform クラスターをデプロイする方法を説明します。

第1章 概要

ベアメタルノードへの installer-provisioned installation は、OpenShift Container Platform クラスターが実行されるインフラストラクチャーをデプロイおよび設定します。このガイドでは、installer-provisioned ベアメタルのインストールを正常に行うための方法論を提供します。次の図は、デプロイメントのフェーズ 1 におけるインストール環境を示しています。

インストールの場合、前の図の主要な要素は次のとおりです。

  • プロビジョナー: インストールプログラムを実行し、新しい OpenShift Container Platform クラスターのコントロールプレーンをデプロイするブートストラップ VM をホストする物理マシン。
  • Bootstrap VM: OpenShift Container Platform クラスターのデプロイプロセスで使用される仮想マシン。
  • ネットワークブリッジ: ブートストラップ VM は、ネットワークブリッジ eno1 および eno2 を介して、ベアメタルネットワークとプロビジョニングネットワーク (存在する場合) に接続します。
  • API VIP: API 仮想 IP アドレス (VIP) は、コントロールプレーンノード全体で API サーバーのフェイルオーバーを提供するために使用されます。API VIP はまずブートストラップ仮想マシンにあります。スクリプトは、サービスを起動する前に keepalived.conf 設定ファイルを生成します。VIP は、ブートストラッププロセスが完了し、ブートストラップ仮想マシンが停止すると、コントロールプレーンノードの 1 つに移動します。

デプロイメントのフェーズ 2 では、プロビジョナーがブートストラップ VM を自動的に破棄し、仮想 IP アドレス (VIP) を適切なノードに移動します。

keepalived.conf ファイルは、コントロールプレーンマシンにブートストラップ VM よりも低い仮想ルーター冗長プロトコル (VRRP) の優先順位を設定します。これにより、API VIP がブートストラップ VM からコントロールプレーンに移動する前に、コントロールプレーンマシン上の API が完全に機能することが保証されます。API VIP がコントロールプレーンノードの 1 つに移動すると、外部クライアントから API VIP ルートに送信されたトラフィックが、そのコントロールプレーンノードで実行している haproxy ロードバランサーに移動します。haproxy のこのインスタンスは、コントロールプレーンノード全体で API VIP トラフィックを分散します。

Ingress 仮想 IP はコンピュートノードに移動します。keepalived インスタンスは Ingress VIP も管理します。

次の図は、デプロイメントのフェーズ 2 を示しています:

これ以降、プロビジョナーが使用するノードを削除または再利用できます。ここから、追加のプロビジョニングタスクはすべてコントロールプレーンによって実行されます。

注記

installer-provisioned infrastructure によるインストールの場合、ポート 53 が CoreDNS によってノードレベルで公開され、他のルーティング可能なネットワークからアクセスできるようになります。

重要

プロビジョニングネットワークは任意ですが、PXE ブートには必要です。プロビジョニングネットワークなしでデプロイする場合は、redfish-virtualmedia または idrac-virtualmedia などの仮想メディアベースボード管理コントローラー (BMC) アドレス指定オプションを使用する必要があります。

第2章 前提条件

OpenShift Container Platform の installer-provisioned installation には、以下が必要です。

  1. 1 つの Red Hat Enterprise Linux (RHEL) 9.x がインストールされているプロビジョナーノード。プロビジョナーは、インストール後に削除できます。
  2. 3 つのコントロールプレーンノード
  3. ベースボード管理コントローラー (BMC) の各ノードへのアクセス。
  4. 1 つ以上のネットワーク:

    1. 1 つの必須のルーティング可能なネットワーク
    2. 1 つのオプションのプロビジョニングネットワーク
    3. 1 つのオプションの管理ネットワーク

OpenShift Container Platform の installer-provisioned installation を開始する前に、ハードウェア環境が以下の要件を満たしていることを確認してください。

2.1. ノードの要件

installer-provisioned installation には、ハードウェアノードの各種の要件があります。

  • CPU architecture: すべてのノードは x86_64 または aarch64 CPU アーキテクチャーを使用する必要があります。
  • 同様のノード: Red Hat では、ノードにロールごとに同じ設定を指定することを推奨しています。つまり Red Hat では、同じ CPU、メモリー、ストレージ設定の同じブランドおよびモデルのノードを使用することを推奨しています。
  • ベースボード管理コントローラー: provisioner ノードは、各 OpenShift Container Platform クラスターノードのベースボード管理コントローラー (BMC) にアクセスできる必要があります。IPMI、Redfish、またはプロプライエタリープロトコルを使用できます。
  • 最新の生成: ノードは最新の生成されたノードである必要があります。installer-provisioned installation は、ノード間で互換性を確保する必要のある BMC プロトコルに依存します。また、RHEL 9 には RAID コントローラーの最新のドライバーが同梱されています。ノードが、provisioner ノードの RHEL 9.x と、コントロールプレーンおよびワーカーノードの RHCOS 9.x をサポートするために必要な新しいバージョンのノードでであることを確認します。
  • レジストリーノード: (オプション) 非接続のミラーリングされていないレジストリーを設定する場合、レジストリーは独自のノードに置くことが推奨されます。
  • プロビジョナーノード: installer-provisioned installation には 1 つの provisioner ノードが必要です。
  • コントロールプレーン: installer-provisioned installation には、高可用性を実現するために 3 つのコントロールプレーンノードが必要です。3 つのコントロールプレーンノードのみで OpenShift Container Platform クラスターをデプロイして、コントロールプレーンノードをワーカーノードとしてスケジュール可能にすることができます。小規模なクラスターでは、開発、実稼働およびテスト時の管理者および開発者に対するリソース効率が高くなります。
  • ワーカーノード: 必須ではありませんが、一般的な実稼働クラスターには複数のワーカーノードがあります。

    重要

    ワーカーノードが 1 つしかないクラスターは、パフォーマンスが低下した状態のルーターおよび Ingress トラフィックでデプロイされるので、デプロイしないでください。

  • ネットワークインターフェイス: 各ノードでは、ルーティング可能な baremetal ネットワークに 1 つ以上のネットワークインターフェイスが必要です。デプロイメントに provisioning ネットワークを使用する場合、各ノードに provisioning ネットワーク用に 1 つのネットワークインターフェイスが必要になります。provisioning ネットワークの使用はデフォルト設定です。

    注記

    同じサブネット上の 1 つのネットワークカード (NIC) のみが、ゲートウェイ経由でトラフィックをルーティングできます。デフォルトでは、アドレス解決プロトコル (ARP) は番号が最も小さい NIC を使用します。ネットワーク負荷分散が期待どおりに機能するようにするには、同じサブネット内の各ノードに 1 つの NIC を使用します。同じサブネット内のノードに複数の NIC を使用する場合は、単一のボンディングまたはチームインターフェイスを使用します。次に、エイリアス IP アドレスの形式で他の IP アドレスをそのインターフェイスに追加します。ネットワークインターフェイスレベルでフォールトトレランスまたは負荷分散が必要な場合は、ボンディングまたはチームインターフェイスでエイリアス IP アドレスを使用します。または、同じサブネットでセカンダリー NIC を無効にするか、IP アドレスがないことを確認できます。

  • Unified Extensible Firmware Interface (UEFI): installer-provisioned installation では、provisioning ネットワークで IPv6 アドレスを使用する場合に、すべての OpenShift Container Platform ノードで UEFI ブートが必要になります。さらに、UEFI Device PXE Settings (UEFI デバイス PXE 設定) は provisioning ネットワーク NIC で IPv6 プロトコルを使用するように設定する必要がありますが、provisioning ネットワークを省略すると、この要件はなくなります。

    重要

    ISO イメージなどの仮想メディアからインストールを開始する場合は、古い UEFI ブートテーブルエントリーをすべて削除します。ブートテーブルに、ファームウェアによって提供される一般的なエントリーではないエントリーが含まれている場合、インストールは失敗する可能性があります。

  • Secure Boot: 多くの実稼働シナリオでは、UEFI ファームウェアドライバー、EFI アプリケーション、オペレーティングシステムなど、信頼できるソフトウェアのみを使用してノードが起動することを確認するために、Secure Boot が有効にされているノードが必要です。手動またはマネージドの Secure Boot を使用してデプロイすることができます。

    1. 手動: 手動で Secure Boot を使用して OpenShift Container Platform クラスターをデプロイするには、UEFI ブートモードおよび Secure Boot を各コントロールプレーンノードおよび各ワーカーノードで有効にする必要があります。Red Hat は、installer-provisioned installation で Redfish 仮想メディアを使用している場合にのみ、手動で有効にした UEFI および Secure Boot で、Secure Boot をサポートします。詳細は、「ノードの設定」セクションの「手動での Secure Boot のノードの設定」を参照してください。
    2. マネージド: マネージド Secure Boot で OpenShift Container Platform クラスターをデプロイするには、install-config.yaml ファイルで bootMode の値を UEFISecureBoot に設定する必要があります。Red Hat は、第 10 世代 HPE ハードウェアおよび 13 世代 Dell ハードウェア (ファームウェアバージョン 2.75.75.75 以上を実行) でマネージド Secure Boot を使用した installer-provisioned installation のみをサポートします。マネージド Secure Boot を使用したデプロイには、Redfish 仮想メディアは必要ありません。詳細は、「OpenShift インストールの環境のセットアップ」セクションの「マネージド Secure Boot の設定」を参照してください。

      注記

      Red Hat は、セキュアブートの自己生成キーまたは他のキーの管理をサポートしていません。

2.2. クラスターインストールの最小リソース要件

それぞれのクラスターマシンは、以下の最小要件を満たしている必要があります。

Expand
表2.1 最小リソース要件
マシンオペレーティングシステムCPU [1]RAMストレージ1 秒あたりの入出力 (IOPS) [2]

ブートストラップ

RHEL

4

16 GB

100 GB

300

コントロールプレーン

RHCOS

4

16 GB

100 GB

300

Compute

RHCOS

2

8 GB

100 GB

300

  1. 1 つの CPU は、同時マルチスレッド (SMT) またはハイパースレッディングが有効にされていない場合に 1 つの物理コアと同等です。これが有効にされている場合、(コアごとのスレッド x コア数) x ソケット数 = CPU という数式を使用して対応する比率を計算します。
  2. OpenShift Container Platform と Kubernetes は、ディスクのパフォーマンスの影響を受けるため、特にコントロールプレーンノードの etcd には、より高速なストレージが推奨されます。多くのクラウドプラットフォームでは、ストレージサイズと IOPS スケールが一緒にあるため、十分なパフォーマンスを得るためにストレージボリュームの割り当てが必要になる場合があります。
注記

OpenShift Container Platform バージョン 4.13 の時点で、RHCOS は RHEL バージョン 9.2 に基づいており、マイクロアーキテクチャーの要件を更新します。次のリストには、各アーキテクチャーに必要な最小限の命令セットアーキテクチャー (ISA) が含まれています。

  • x86-64 アーキテクチャーには x86-64-v2 ISA が必要
  • ARM64 アーキテクチャーには ARMv8.0-A ISA が必要
  • IBM Power アーキテクチャーには Power 9 ISA が必要
  • s390x アーキテクチャーには z14 ISA が必要

詳細は、アーキテクチャー (RHEL ドキュメント) を参照してください。

プラットフォームのインスタンスタイプがクラスターマシンの最小要件を満たす場合、これは OpenShift Container Platform で使用することがサポートされます。

2.3. OpenShift 仮想化のためのベアメタルクラスターの計画

OpenShift 仮想化を使用する場合は、ベアメタルクラスターをインストールする前に、いくつかの要件を認識することが重要です。

  • ライブマイグレーション機能を使用する場合は、クラスターのインストール時に 複数のワーカーノードが必要です。これは、ライブマイグレーションではクラスターレベルの高可用性 (HA) フラグを true に設定する必要があるためです。HA フラグは、クラスターのインストール時に設定され、後で変更することはできません。クラスターのインストール時に定義されたワーカーノードが 2 つ未満の場合、クラスターの存続期間中、HA フラグは false に設定されます。

    注記

    単一ノードのクラスターに OpenShift Virtualization をインストールできますが、単一ノードの OpenShift は高可用性をサポートしていません。

  • ライブマイグレーションには共有ストレージが必要です。OpenShift Virtualization のストレージは、ReadWriteMany (RWX) アクセスモードをサポートし、使用する必要があります。
  • Single Root I/O Virtualization (SR-IOV) を使用する予定の場合は、ネットワークインターフェイスコントローラー (NIC) が OpenShift Container Platform でサポートされていることを確認してください。

2.4. 仮想メディアを使用したインストールのファームウェア要件

installer-provisioned OpenShift Container Platform クラスターのインストールプログラムは、Redfish 仮想メディアとのハードウェアおよびファームウェアの互換性を検証します。ノードファームウェアに互換性がない場合、インストールプログラムはノードへのインストールを開始しません。以下の表は、Redfish 仮想メディアを使用してデプロイされる installer-provisioned OpenShift Container Platform クラスターで機能するようにテストおよび検証された最小ファームウェアバージョンの一覧です。

注記

Red Hat は、ファームウェア、ハードウェア、またはその他のサードパーティーコンポーネントの組み合わせをすべてテストしません。サードパーティーサポートの詳細は、Red Hat サードパーティーサポートポリシー を参照してください。ファームウェアの更新は、ノードのハードウェアドキュメントを参照するか、ハードウェアベンダーにお問い合わせください。

Expand
表2.2 HP ハードウェアと Redfish 仮想メディアのファームウェアの互換性
モデル管理ファームウェアのバージョン

第 11 世代

iLO6

1.57 以降

第 10 世代

iLO5

2.63 以降

Expand
表2.3 Redfish 仮想メディアを使用した Dell ハードウェアのファームウェアの互換性
モデル管理ファームウェアのバージョン

第 16 世代

iDRAC 9

v7.10.70.00

第 15 世代

iDRAC 9

v6.10.30.00 および v7.10.70.00

第 14 世代

iDRAC 9

v6.10.30.00

Expand
表2.4 Redfish 仮想メディアを使用した Cisco UCS ハードウェアのファームウェア互換性
モデル管理ファームウェアのバージョン

UCS UCSX-210C-M6

CIMC

5.2(2) 以降

2.5. ネットワーク要件

OpenShift Container Platform の installer-provisioned installation には、複数のネットワーク要件があります。まず、installer-provisioned installation では、各ベアメタルノードにオペレーティングシステムをプロビジョニングするためのルーティング不可能な provisioning ネットワークをオプションで使用します。次に、installer-provisioned installation では、ルーティング可能な baremetal ネットワークを使用します。

2.5.1. 必須ポートが開いていることを確認する

クラスター間で特定のノードが開いてなければ、installer-provisioned によるインストールは正常に完了しません。ファーエッジワーカーノードに別のサブネットを使用する場合などの特定の状況では、これらのサブネット内のノードが、次の必須ポートで他のサブネット内のノードと通信できることを確認する必要があります。

Expand
表2.5 必須ポート
ポート説明

6768

プロビジョニングネットワークを使用する場合、クラスターノードは、ポート 67 および 68 を使用して、プロビジョニングネットワークインターフェイス経由で dnsmasq DHCP サーバーにアクセスします。

69

プロビジョニングネットワークを使用する場合、クラスターノードはプロビジョニングネットワークインターフェイスを使用してポート 69 で TFTP サーバーと通信します。TFTP サーバーはブートストラップ仮想マシン上で実行されます。ブートストラップ仮想マシンはプロビジョナーノード上で実行されます。

80

イメージキャッシュオプションを使用しない場合、または仮想メディアを使用する場合、プロビジョナーノードからクラスターノードに Red Hat Enterprise Linux CoreOS (RHCOS) イメージをストリーミングするには、プロビジョナーノードのポート 80baremetal マシンのネットワークインターフェイス上で開いている必要があります。

123

クラスターノードは、baremetal マシンネットワークを使用して、ポート 123 の NTP サーバーにアクセスする必要があります。

5050

Ironic Inspector API は、コントロールプレーンノード上で実行され、ポート 5050 でリッスンします。Inspector API は、ベアメタルノードのハードウェア特性に関する情報を収集するハードウェアイントロスペクションを担当します。

5051

ポート 5050 はポート 5051 をプロキシーとして使用します。

6180

仮想メディアを使用して TLS を使用せずにデプロイする場合、ワーカーノードのベースボード管理コントローラー (BMC) が RHCOS イメージにアクセスできるように、プロビジョナーノードとコントロールプレーンノードのポート 6180 は、baremetal マシンのネットワークインターフェイスで開いている必要があります。OpenShift Container Platform 4.13 以降、デフォルトの HTTP ポートは 6180 です。

6183

仮想メディアを使用して TLS でデプロイする場合、ワーカーノードの BMC が RHCOS イメージにアクセスできるように、プロビジョナーノードとコントロールプレーンノードのポート 6183 は、baremetal マシンのネットワークインターフェイスで開いている必要があります。

6385

Ironic API サーバーは、最初はブートストラップ仮想マシン上で実行され、その後はコントロールプレーンノード上で実行され、ポート 6385 でリッスンします。Ironic API を使用すると、クライアントは Ironic と対話して、新しいノードの登録、電源状態の管理、イメージのデプロイ、ハードウェアのクリーニングなどの操作を含むベアメタルノードのプロビジョニングと管理を行うことができます。

6388

ポート 6385 はポート 6388 をプロキシーとして使用します。

8080

TLS なしでイメージキャッシュを使用する場合、ポート 8080 がプロビジョナーノードで開いており、クラスターノードの BMC インターフェイスからアクセスできる必要があります。

8083

TLS ありでイメージキャッシュオプションを使用する場合、ポート 8083 がプロビジョナーノードで開いており、クラスターノードの BMC インターフェイスからアクセスできる必要があります。

9999

デフォルトでは、Ironic Python Agent (IPA) は、ポート 9999 で Ironic conductor サービスからの API 呼び出しを TCP リッスンします。IPA が実行されているベアメタルノードと Ironic conductor サービス間の通信には、このポートが使用されます。

2.5.2. ネットワーク MTU の増加

OpenShift Container Platform をデプロイする前に、ネットワークの最大伝送単位 (MTU) を 1500 以上に増やします。MTU が 1500 未満の場合、ノードの起動に使用される Ironic イメージが Ironic インスペクター Pod との通信に失敗し、検査が失敗する可能性があります。これが発生すると、インストールにノードを使用できないため、インストールが停止します。

2.5.3. NIC の設定

OpenShift Container Platform は、2 つのネットワークを使用してデプロイします。

  • provisioning: provisioning ネットワークは、OpenShift Container Platform クラスターの一部である基礎となるオペレーティングシステムを各ノードにプロビジョニングするために使用されるオプションのルーティング不可能なネットワークです。各クラスターノードの provisioning ネットワークのネットワークインターフェイスには、BIOS または UEFI が PXE ブートに設定されている必要があります。

    provisioningNetworkInterface 設定は、コントロールプレーンノード上の provisioning ネットワークの NIC 名を指定します。これは、コントロールプレーンノードと同じでなければなりません。bootMACAddress 設定は、provisioning ネットワーク用に各ノードで特定の NIC を指定する手段を提供します。

    provisioning ネットワークは任意ですが、PXE ブートには必要です。provisioning ネットワークなしでデプロイする場合、redfish-virtualmediaidrac-virtualmedia などの仮想メディア BMC アドレス指定オプションを使用する必要があります。

  • baremetal: baremetal ネットワークはルーティング可能なネットワークです。NIC が provisioning ネットワークを使用するように設定されていない場合には、baremetal ネットワークとのインターフェイスには任意の NIC を使用することができます。
重要

VLAN を使用する場合、それぞれの NIC は、適切なネットワークに対応する別個の VLAN 上にある必要があります。

2.5.4. DNS 要件

クライアントは、baremetal ネットワークで OpenShift Container Platform クラスターにアクセスします。ネットワーク管理者は、正規名の拡張がクラスター名であるサブドメインまたはサブゾーンを設定する必要があります。

<cluster_name>.<base_domain>
Copy to Clipboard Toggle word wrap

以下に例を示します。

test-cluster.example.com
Copy to Clipboard Toggle word wrap

OpenShift Container Platform には、クラスターメンバーシップ情報を使用して A/AAAA レコードを生成する機能が含まれます。これにより、ノード名が IP アドレスに解決されます。ノードが API に登録されると、クラスターは CoreDNS-mDNS を使用せずにこれらのノード情報を分散できます。これにより、マルチキャスト DNS に関連付けられたネットワークトラフィックがなくなります。

CoreDNS を正しく機能させるには、アップストリームの DNS サーバーへの TCP 接続と UDP 接続の両方が必要です。アップストリームの DNS サーバーが OpenShift Container Platform クラスターノードから TCP 接続と UDP 接続の両方を受信できることを確認します。

OpenShift Container Platform のデプロイメントでは、以下のコンポーネントに DNS 名前解決が必要です。

  • The Kubernetes API
  • OpenShift Container Platform のアプリケーションワイルドカード Ingress API

A/AAAA レコードは名前解決に使用され、PTR レコードは逆引き名前解決に使用されます。Red Hat Enterprise Linux CoreOS (RHCOS) は、逆引きレコードまたは DHCP を使用して、すべてのノードのホスト名を設定します。

installer-provisioned installation には、クラスターメンバーシップ情報を使用して A/AAAA レコードを生成する機能が含まれています。これにより、ノード名が IP アドレスに解決されます。各レコードで、<cluster_name> はクラスター名で、<base_domain> は、install-config.yaml ファイルに指定するベースドメインです。完全な DNS レコードは <component>.<cluster_name>.<base_domain>. の形式を取ります。

Expand
表2.6 必要な DNS レコード
コンポーネントレコード説明

Kubernetes API

api.<cluster_name>.<base_domain>.

A/AAAA レコードと PTR レコード。API ロードバランサーを識別します。これらのレコードは、クラスター外のクライアントおよびクラスター内のすべてのノードで解決できる必要があります。

ルート

*.apps.<cluster_name>.<base_domain>.

ワイルドカード A/AAAA レコードは、アプリケーションの Ingress ロードバランサーを参照します。アプリケーション Ingress ロードバランサーは、Ingress コントローラー Pod を実行するノードをターゲットにします。Ingress Controller Pod は、デフォルトでワーカーノードで実行されます。これらのレコードは、クラスター外のクライアントおよびクラスター内のすべてのノードで解決できる必要があります。

たとえば、console-openshift-console.apps.<cluster_name>.<base_domain> は、OpenShift Container Platform コンソールへのワイルドカードルートとして使用されます。

ヒント

dig コマンドを使用して、DNS 解決を確認できます。

2.5.5. Dynamic Host Configuration Protocol (DHCP) の要件

デフォルトでは、installer-provisioned installation は、provisioning ネットワーク用に DHCP を有効にして ironic-dnsmasq をデプロイします。provisioningNetwork 設定が、デフォルト値の managed に設定されている場合、provisioning ネットワーク上で他の DHCP サーバーを実行することはできません。provisioning ネットワーク上で DHCP サーバーを実行している場合は、install-config.yaml ファイルで provisioningNetwork 設定を unmanaged に設定する必要があります。

ネットワーク管理者は、外部 DHCP サーバー上の baremetal ネットワーク用に、OpenShift Container Platform クラスター内の各ノードの IP アドレスを予約する必要があります。

2.5.6. DHCP サーバーを使用するノードの IP アドレスの確保

baremetal ネットワークの場合、ネットワーク管理者は、以下を含むいくつかの IP アドレスを予約する必要があります。

  1. 2 つの一意の仮想 IP アドレス。

    • API エンドポイントの 1 つの仮想 IP アドレス。
    • ワイルドカード Ingress エンドポイントの 1 つの仮想 IP アドレス
  2. プロビジョナーノードの 1 つの IP アドレス
  3. コントロールプレーンノードごとに 1 つの IP アドレス。
  4. 各ワーカーノードの 1 つの IP アドレス (適用可能な場合)
IP アドレスの予約し、それらを静的 IP アドレスにする

一部の管理者は、各ノードの IP アドレスが DHCP サーバーがない状態で一定になるように静的 IP アドレスの使用を選択します。NMState を使用して静的 IP アドレスを設定する場合は、「OpenShift インストールの環境のセットアップ」セクションの「ホストネットワークインターフェイスの設定 (オプション)」を参照してください。

外部ロードバランサーとコントロールプレーンノード間のネットワーク

外部の負荷分散サービスとコントロールプレーンノードは同じ L2 ネットワークで実行する必要があります。また、VLAN を使用して負荷分散サービスとコントロールプレーンノード間のトラフィックをルーティングする際に同じ VLAN で実行する必要があります。

重要

ストレージインターフェイスには、DHCP 予約または静的 IP が必要です。

以下の表は、完全修飾ドメイン名の具体例を示しています。API およびネームサーバーのアドレスは、正規名の拡張で始まります。コントロールプレーンおよびワーカーノードのホスト名は例であるため、任意のホストの命名規則を使用することができます。

Expand
使用法ホスト名IP

API

api.<cluster_name>.<base_domain>

<ip>

Ingress LB (アプリケーション)

*.apps.<cluster_name>.<base_domain>

<ip>

プロビジョナーノード

provisioner.<cluster_name>.<base_domain>

<ip>

Control-plane-0

openshift-control-plane-0.<cluster_name>.<base_domain>

<ip>

Control-plane-1

openshift-control-plane-1.<cluster_name>-.<base_domain>

<ip>

Control-plane-2

openshift-control-plane-2.<cluster_name>.<base_domain>

<ip>

Worker-0

openshift-worker-0.<cluster_name>.<base_domain>

<ip>

Worker-1

openshift-worker-1.<cluster_name>.<base_domain>

<ip>

Worker-n

openshift-worker-n.<cluster_name>.<base_domain>

<ip>

注記

DHCP 予約を作成しない場合、Kubernetes API ノード、プロビジョナーノード、コントロールプレーンノード、およびワーカーノードのホスト名を設定するために、インストールプログラムで逆引き DNS 解決が必要になります。

2.5.7. プロビジョナーノードの要件

インストール設定でプロビジョナーノードの MAC アドレスを指定する必要があります。通常、bootMacAddress 仕様は PXE ネットワークブートに関連付けられています。ただし、Ironic プロビジョニングサービスでは、クラスターの検査中またはクラスター内のノードの再デプロイ中にノードを識別するために、bootMacAddress 仕様も必要です。

プロビジョナーノードには、ネットワークの起動、DHCP と DNS の解決、およびローカルネットワーク通信のためのレイヤー 2 接続が必要です。プロビジョナーノードには、仮想メディアの起動にレイヤー 3 接続が必要です。

2.5.8. ネットワークタイムプロトコル (NTP)

クラスター内の各 OpenShift Container Platform ノードは NTP サーバーにアクセスできる必要があります。OpenShift Container Platform ノードは NTP を使用してクロックを同期します。たとえば、クラスターノードは検証を必要とする SSL/TLS 証明書を使用しますが、ノード間の日付と時刻が同期していないと、検証が失敗する可能性があります。

重要

各クラスターノードの BIOS 設定で一貫性のあるクロックの日付と時刻の形式を定義してください。そうしないと、インストールが失敗する可能性があります。

切断されたクラスター上で NTP サーバーとして機能するようにコントロールプレーンノードを再設定し、コントロールプレーンノードから時間を取得するようにワーカーノードを再設定することができます。

2.5.9. 帯域外管理 IP アドレスのポートアクセス

帯域外管理 IP アドレスは、ノードとは別のネットワーク上にあります。インストール中に帯域外管理がプロビジョナーノードと確実に通信できるようにするには、帯域外管理 IP アドレスに、プロビジョナーノードおよび OpenShift Container Platform コントロールプレーンノード上のポート 6180 へのアクセスを許可する必要があります。TLS ポート 6183 は、たとえば Redfish などを使用する仮想メディアのインストールに必要です。

2.6. ノードの設定

2.6.1. provisioning ネットワークを使用する場合のノードの設定

クラスター内の各ノードには、適切なインストールを行うために以下の設定が必要です。

警告

ノード間で一致していないと、インストールに失敗します。

クラスターノードには 3 つ以上の NIC を追加できますが、インストールプロセスでは最初の 2 つの NIC のみに焦点が当てられます。以下の表では、NIC1 は OpenShift Container Platform クラスターのインストールにのみ使用されるルーティング不可能なネットワーク (provisioning) です。

Expand
NICネットワークVLAN

NIC1

provisioning

<provisioning_vlan>

NIC2

baremetal

<baremetal_vlan>

プロビジョナーノードでの Red Hat Enterprise Linux (RHEL) 9.x インストールプロセスは異なる可能性があります。ローカルの Satellite サーバー、PXE サーバー、PXE 対応の NIC2 を使用して Red Hat Enterprise Linux (RHEL) 9.x をインストールする場合は、以下のようになります。

Expand
PXEブート順序

NIC1 PXE 対応の provisioning ネットワーク

1

NIC2 baremetal ネットワークPXE 対応はオプションです。

2

注記

他のすべての NIC で PXE が無効になっていることを確認します。

コントロールプレーンおよびワーカーノードを以下のように設定します。

Expand
PXEブート順序

NIC1 PXE 対応 (プロビジョニングネットワーク)

1

2.6.2. provisioning ネットワークを使用しないノードの設定

インストールプロセスには、1 つの NIC が必要です。

Expand
NICネットワークVLAN

NICx

baremetal

<baremetal_vlan>

NICx は、OpenShift Container Platform クラスターのインストールに使用されるルーティング可能なネットワーク (baremetal) であり、インターネットにルーティング可能です。

重要

provisioning ネットワークは任意ですが、PXE ブートには必要です。provisioning ネットワークなしでデプロイする場合、redfish-virtualmediaidrac-virtualmedia などの仮想メディア BMC アドレス指定オプションを使用する必要があります。

2.6.3. 手動での Secure Boot のノードの設定

Secure Boot は、ノードが UEFI ファームウェアドライバー、EFI アプリケーション、オペレーティングシステムなどの信頼できるソフトウェアのみを使用していることを確認できない場合は、ノードの起動を阻止します。

注記

Red Hat は、Redfish 仮想メディアを使用してデプロイする場合にのみ、手動で設定された Secure Boot をサポートします。

Secure Boot を手動で有効にするには、ノードのハードウェアガイドを参照し、以下を実行してください。

手順

  1. ノードを起動し、BIOS メニューを入力します。
  2. ノードのブートモードを UEFI Enabled に設定します。
  3. Secure Boot を有効にします。
重要

Red Hat は、自己生成したキーを使用する Secure Boot をサポートしません。

2.7. アウトオブバンド管理

ノードには通常、ベースボード管理コントローラー (BMC) が使用する追加の NIC があります。この BMC はプロビジョナーノードからアクセスできる必要があります。

各ノードは、アウトオブバンド管理を介してアクセスできる必要があります。アウトオブバンド管理ネットワークを使用する場合、OpenShift Container Platform のインストールを正常に行うには、プロビジョナーノードがアウトオブバンド管理ネットワークにアクセスできる必要があります。

アウトオブバンド管理の設定は、このドキュメントの範囲外です。アウトオブバンド管理用に別の管理ネットワークを使用すると、パフォーマンスが向上し、セキュリティーが強化されます。ただし、provisioning ネットワークまたはベアメタルネットワークの使用は有効なオプションになります。

注記

ブートストラップ仮想マシンには、最大 2 つのネットワークインターフェイスがあります。帯域外管理用に別の管理ネットワークを設定し、プロビジョニングネットワークを使用している場合、ブートストラップ仮想マシンでは、いずれかのネットワークインターフェイスを介して管理ネットワークへのルーティングアクセスが必要になります。このシナリオでは、ブートストラップ仮想マシンは 3 つのネットワークにアクセスできます。

  • ベアメタルネットワーク
  • プロビジョニングネットワーク
  • 管理インターフェイスの 1 つを介してルーティングされる管理ネットワーク

2.8. インストールに必要なデータ

OpenShift Container Platform クラスターのインストール前に、すべてのクラスターノードから以下の情報を収集します。

  • アウトオブバンド管理 IP

      • Dell (iDRAC) IP
      • HP (iLO) IP
      • Fujitsu (iRMC) IP

provisioning ネットワークを使用する場合

  • NIC (provisioning) MAC アドレス
  • NIC (baremetal) MAC アドレス

provisioning ネットワークを省略する場合

  • NIC (baremetal) MAC アドレス

2.9. ノードの検証チェックリスト

provisioning ネットワークを使用する場合

  • ❏ NIC1 VLAN が provisioning ネットワーに設定されている。
  • provisioning ネットワークの NIC1 は、プロビジョナー、コントロールプレーン、およびワーカーノードで PXE 対応として使用できる。
  • ❏ NIC2 VLAN が baremetal ネットワークに設定されている。
  • ❏ PXE が他のすべての NIC で無効にされている。
  • ❏ DNS は API および Ingress エンドポイントで設定されている。
  • ❏ コントロールプレーンおよびワーカーノードが設定されている。
  • ❏ すべてのノードがアウトオブバンド管理でアクセス可能である。
  • ❏ (オプション) 別個の管理ネットワークが作成されている。
  • ❏ インストールに必要なデータ。

provisioning ネットワークを省略する場合

  • ❏ NIC1 VLAN が baremetal ネットワークに設定されている。
  • ❏ DNS は API および Ingress エンドポイントで設定されている。
  • ❏ コントロールプレーンおよびワーカーノードが設定されている。
  • ❏ すべてのノードがアウトオブバンド管理でアクセス可能である。
  • ❏ (オプション) 別個の管理ネットワークが作成されている。
  • ❏ インストールに必要なデータ。

2.10. インストールの概要

インストールプログラムは対話型モードをサポートしています。ただし、すべてのベアメタルホストのプロビジョニングの詳細と関連するクラスターの詳細を含む install-config.yaml ファイルを事前に準備することができます。

インストールプログラムは install-config.yaml ファイルを読み込み、管理者はマニフェストを生成し、すべての前提条件を確認します。

インストールプログラムは次のタスクを実行します。

  • クラスター内のすべてのノードを登録する
  • ブートストラップ仮想マシン (VM) を起動する
  • 次のコンテナーを持つ、metal プラットフォームコンポーネントを systemd サービスとして起動する

    • Ironic-dnsmasq: プロビジョニングネットワーク上のさまざまなノードのプロビジョニングインターフェイスに IP アドレスを引き渡す役割を担う DHCP サーバー。Ironic-dnsmasq は、プロビジョニングネットワークを使用して OpenShift Container Platform クラスターをデプロイする場合にのみ有効になります。
    • Ironic-httpd: イメージをノードに送信するために使用される HTTP サーバー。
    • Image-customization
    • Ironic
    • Ironic-inspector (OpenShift Container Platform 4.16 以前で利用可能)
    • Ironic-ramdisk-logs
    • Extract-machine-os
    • Provisioning-interface
    • Metal3-baremetal-operator

ノードは検証フェーズに入り、Ironic がベースボード管理コントローラー (BMC) にアクセスするための認証情報を検証した後、各ノードは 管理可能 な状態に移行します。

ノードが管理可能な状態になると、検査 フェーズが開始されます。検査フェーズでは、ハードウェアが OpenShift Container Platform の正常なデプロイメントに必要な最小要件を満たしていることを確認します。

install-config.yaml ファイルには、プロビジョニングネットワークの詳細が記述されています。ブートストラップ仮想マシンでは、インストールプログラムは Pre-Boot Execution Environment (PXE) を使用して、Ironic Python Agent (IPA) がロードされているすべてのノードにライブイメージをプッシュします。仮想メディアを使用する場合、各ノードの BMC に直接接続してイメージを仮想的にアタッチします。

PXE ブートを使用する場合、プロセスを開始するためにすべてのノードが再起動します。

  • ブートストラップ仮想マシン上で実行されている ironic-dnsmasq サービスは、ノードと TFTP ブートサーバーの IP アドレスを提供します。
  • 最初のブートソフトウェアは、HTTP 経由でルートファイルシステムをロードします。
  • ブートストラップ仮想マシン上の ironic サービスは、各ノードからハードウェア情報を受信します。

ノードはクリーニング状態になり、各ノードは設定を続行する前にすべてのディスクをクリーニングする必要があります。

クリーニング状態が終了すると、ノードは使用可能な状態になり、インストールプログラムはノードをデプロイ状態に移動します。

IPA は coreos-installer コマンドを実行して、install-config.yaml ファイルの rootDeviceHints パラメーターで定義されたディスクに Red Hat Enterprise Linux CoreOS (RHCOS)イメージをインストールします。ノードは RHCOS を使用して起動します。

インストールプログラムは、コントロールプレーンノードを設定した後、ブートストラップ仮想マシンからコントロールプレーンノードに制御を移動し、ブートストラップ仮想マシンを削除します。

ベアメタル Operator は、ワーカー、ストレージ、およびインフラノードのデプロイメントを継続します。

インストールが完了すると、ノードはアクティブ状態に移行します。その後、インストール後の設定やその他の Day 2 タスクに進むことができます。

第3章 OpenShift インストールの環境のセットアップ

3.1. RHEL のプロビジョナーノードへのインストール

前提条件の設定が完了したら、次のステップとして RHEL 9.x をプロビジョナーノードにインストールします。インストーラーは、OpenShift Container Platform クラスターをインストールする間にプロビジョナーノードをオーケレーターとして使用します。このドキュメントの目的上、RHEL のプロビジョナーノードへのインストールは対象外です。ただし、オプションには、RHEL Satellite サーバー、PXE、またはインストールメディアの使用も含まれますが、これらに限定されません。

3.2. OpenShift Container Platform インストールのプロビジョナーノードの準備

環境を準備するには、以下の手順を実行します。

手順

  1. ssh でプロビジョナーノードにログインします。
  2. root 以外のユーザー (kni) を作成し、そのユーザーに sudo 権限を付与します。

    # useradd kni
    Copy to Clipboard Toggle word wrap
    # passwd kni
    Copy to Clipboard Toggle word wrap
    # echo "kni ALL=(root) NOPASSWD:ALL" | tee -a /etc/sudoers.d/kni
    Copy to Clipboard Toggle word wrap
    # chmod 0440 /etc/sudoers.d/kni
    Copy to Clipboard Toggle word wrap
  3. 新規ユーザーの ssh キーを作成します。

    # su - kni -c "ssh-keygen -t ed25519 -f /home/kni/.ssh/id_rsa -N ''"
    Copy to Clipboard Toggle word wrap
  4. プロビジョナーノードで新規ユーザーとしてログインします。

    # su - kni
    Copy to Clipboard Toggle word wrap
  5. Red Hat Subscription Manager を使用してプロビジョナーノードを登録します。

    $ sudo subscription-manager register --username=<user> --password=<pass> --auto-attach
    Copy to Clipboard Toggle word wrap
    $ sudo subscription-manager repos --enable=rhel-9-for-<architecture>-appstream-rpms --enable=rhel-9-for-<architecture>-baseos-rpms
    Copy to Clipboard Toggle word wrap
    注記

    Red Hat Subscription Manager の詳細は、Using and Configuring Red Hat Subscription Manager を参照してください。

  6. 以下のパッケージをインストールします。

    $ sudo dnf install -y libvirt qemu-kvm mkisofs python3-devel jq ipmitool
    Copy to Clipboard Toggle word wrap
  7. ユーザーを変更して、新たに作成したユーザーに libvirt グループを追加します。

    $ sudo usermod --append --groups libvirt <user>
    Copy to Clipboard Toggle word wrap
  8. firewalld を再起動して、http サービスを有効にします。

    $ sudo systemctl start firewalld
    Copy to Clipboard Toggle word wrap
    $ sudo firewall-cmd --zone=public --add-service=http --permanent
    Copy to Clipboard Toggle word wrap
    $ sudo firewall-cmd --reload
    Copy to Clipboard Toggle word wrap
  9. モジュラー libvirt デーモンのソケットを起動します。

    $ for drv in qemu interface network nodedev nwfilter secret storage; do sudo systemctl start virt${drv}d{,-ro,-admin}.socket; done
    Copy to Clipboard Toggle word wrap
  10. default ストレージプールを作成して、これを起動します。

    $ sudo virsh pool-define-as --name default --type dir --target /var/lib/libvirt/images
    Copy to Clipboard Toggle word wrap
    $ sudo virsh pool-start default
    Copy to Clipboard Toggle word wrap
    $ sudo virsh pool-autostart default
    Copy to Clipboard Toggle word wrap
  11. pull-secret.txt ファイルを作成します。

    $ vim pull-secret.txt
    Copy to Clipboard Toggle word wrap

    Web ブラウザーで、Install OpenShift on Bare Metal with installer-provisioned infrastructure に移動します。Copy pull secret をクリックします。pull-secret.txt ファイルにコンテンツを貼り付け、そのコンテンツを kni ユーザーのホームディレクトリーに保存します。

3.3. NTP サーバーの同期を確認する

OpenShift Container Platform インストールプログラムは、chrony Network Time Protocol (NTP) サービスをクラスターノードにインストールします。インストールを完了するには、各ノードが NTP タイムサーバーにアクセスできる必要があります。chrony サービスを使用して、NTP サーバーの同期を確認できます。

切断されたクラスターの場合は、コントロールプレーンノード上で NTP サーバーを設定する必要があります。詳細は、関連情報 セクションを参照してください。

前提条件

  • ターゲットノードに chrony パッケージがインストールされました。

手順

  1. ssh コマンドを使用してノードにログインします。
  2. 次のコマンドを実行して、ノードで利用可能な NTP サーバーを表示します。

    $ chronyc sources
    Copy to Clipboard Toggle word wrap

    出力例

    MS Name/IP address         Stratum Poll Reach LastRx Last sample
    ===============================================================================
    ^+ time.cloudflare.com           3  10   377   187   -209us[ -209us] +/-   32ms
    ^+ t1.time.ir2.yahoo.com         2  10   377   185  -4382us[-4382us] +/-   23ms
    ^+ time.cloudflare.com           3  10   377   198   -996us[-1220us] +/-   33ms
    ^* brenbox.westnet.ie            1  10   377   193  -9538us[-9761us] +/-   24ms
    Copy to Clipboard Toggle word wrap

  3. ping コマンドを使用して、ノードが NTP サーバーにアクセスできることを確認します。次に例を示します。

    $ ping time.cloudflare.com
    Copy to Clipboard Toggle word wrap

    出力例

    PING time.cloudflare.com (162.159.200.123) 56(84) bytes of data.
    64 bytes from time.cloudflare.com (162.159.200.123): icmp_seq=1 ttl=54 time=32.3 ms
    64 bytes from time.cloudflare.com (162.159.200.123): icmp_seq=2 ttl=54 time=30.9 ms
    64 bytes from time.cloudflare.com (162.159.200.123): icmp_seq=3 ttl=54 time=36.7 ms
    ...
    Copy to Clipboard Toggle word wrap

3.4. ネットワークの設定

インストールの前に、プロビジョナーノードでネットワークを設定する必要があります。installer-provisioned クラスターは、ベアメタルブリッジとネットワーク、およびオプションのプロビジョニングブリッジとネットワークを使用してデプロイされます。

注記

Web コンソールからネットワークを設定することもできます。

手順

  1. 次のコマンドを実行して、ベアメタルネットワーク NIC 名をエクスポートします。

    $ export PUB_CONN=<baremetal_nic_name>
    Copy to Clipboard Toggle word wrap
  2. ベアメタルネットワークを設定します。

    注記

    これらの手順を実行した後、SSH 接続が切断される場合があります。

    1. DHCP を使用するネットワークの場合は、次のコマンドを実行します。

      $ sudo nohup bash -c "
          nmcli con down \"$PUB_CONN\"
          nmcli con delete \"$PUB_CONN\"
          # RHEL 8.1 appends the word \"System\" in front of the connection, delete in case it exists
          nmcli con down \"System $PUB_CONN\"
          nmcli con delete \"System $PUB_CONN\"
          nmcli connection add ifname baremetal type bridge <con_name> baremetal bridge.stp no 
      1
      
          nmcli con add type bridge-slave ifname \"$PUB_CONN\" master baremetal
          pkill dhclient;dhclient baremetal
      "
      Copy to Clipboard Toggle word wrap
      1
      <con_name> を接続名に置き換えます。
    2. 静的 IP アドレスを使用し、DHCP ネットワークを使用しないネットワークの場合は、次のコマンドを実行します。

      $ sudo nohup bash -c "
          nmcli con down \"$PUB_CONN\"
          nmcli con delete \"$PUB_CONN\"
          # RHEL 8.1 appends the word \"System\" in front of the connection, delete in case it exists
          nmcli con down \"System $PUB_CONN\"
          nmcli con delete \"System $PUB_CONN\"
          nmcli connection add ifname baremetal type bridge con-name baremetal bridge.stp no ipv4.method manual ipv4.addr "x.x.x.x/yy" ipv4.gateway "a.a.a.a" ipv4.dns "b.b.b.b" 
      1
      
          nmcli con add type bridge-slave ifname \"$PUB_CONN\" master baremetal
          nmcli con up baremetal
      "
      Copy to Clipboard Toggle word wrap
      1
      <con_name> を接続名に置き換えます。x.x.x.x/yy をネットワークの IP アドレスと CIDR に置き換えます。a.a.a.a をネットワークゲートウェイに置き換えます。b.b.b.b を DNS サーバーの IP アドレスに置き換えます。
  3. オプション: プロビジョニングネットワークを使用してデプロイする場合は、次のコマンドを実行してプロビジョニングネットワークの NIC 名をエクスポートします。

    $ export PROV_CONN=<prov_nic_name>
    Copy to Clipboard Toggle word wrap
  4. オプション: プロビジョニングネットワークを使用してデプロイする場合は、次のコマンドを実行してプロビジョニングネットワークを設定します。

    $ sudo nohup bash -c "
        nmcli con down \"$PROV_CONN\"
        nmcli con delete \"$PROV_CONN\"
        nmcli connection add ifname provisioning type bridge con-name provisioning
        nmcli con add type bridge-slave ifname \"$PROV_CONN\" master provisioning
        nmcli connection modify provisioning ipv6.addresses fd00:1101::1/64 ipv6.method manual
        nmcli con down provisioning
        nmcli con up provisioning
    "
    Copy to Clipboard Toggle word wrap
    注記

    これらの手順を実行した後、SSH 接続が切断される場合があります。

    IPv6 アドレスは、ベアメタルネットワーク経由でルーティングできない任意のアドレスにすることができます。

    IPv6 アドレスを使用する場合に UEFI PXE 設定が有効にされており、UEFI PXE 設定が IPv6 プロトコルに設定されていることを確認します。

  5. オプション: プロビジョニングネットワークを使用してデプロイする場合は、次のコマンドを実行して、プロビジョニングネットワーク接続で IPv4 アドレスを設定します。

    $ nmcli connection modify provisioning ipv4.addresses 172.22.0.254/24 ipv4.method manual
    Copy to Clipboard Toggle word wrap
  6. 次のコマンドを実行して、provisioner ノードに SSH で戻ります (必要な場合)。

    # ssh kni@provisioner.<cluster-name>.<domain>
    Copy to Clipboard Toggle word wrap
  7. 次のコマンドを実行して、接続ブリッジが適切に作成されたことを確認します。

    $ sudo nmcli con show
    Copy to Clipboard Toggle word wrap

    出力例

    NAME               UUID                                  TYPE      DEVICE
    baremetal          4d5133a5-8351-4bb9-bfd4-3af264801530  bridge    baremetal
    provisioning       43942805-017f-4d7d-a2c2-7cb3324482ed  bridge    provisioning
    virbr0             d9bca40f-eee1-410b-8879-a2d4bb0465e7  bridge    virbr0
    bridge-slave-eno1  76a8ed50-c7e5-4999-b4f6-6d9014dd0812  ethernet  eno1
    bridge-slave-eno2  f31c3353-54b7-48de-893a-02d2b34c4736  ethernet  eno2
    Copy to Clipboard Toggle word wrap

3.5. カスタマイズされた br-ex ブリッジを含むマニフェストオブジェクトの作成

configure-ovs.sh シェルスクリプトを使用してベアメタルプラットフォームで br-ex ブリッジを設定する代わりに、NMState 設定ファイルを含む MachineConfig オブジェクトを作成できます。ホスト nmstate-configuration.service および nmstate.service は、クラスターで実行される各ノードに NMState 設定ファイルを適用します。

カスタマイズされた br-ex ブリッジを含むマニフェストオブジェクトを作成する場合は、次のユースケースを検討してください。

  • Open vSwitch (OVS) または OVN-Kubernetes br-ex ブリッジネットワークの変更など、ブリッジにインストール後の変更を加えたい場合。configure-ovs.sh シェルスクリプトは、ブリッジへのインストール後の変更をサポートしていません。
  • ホストまたはサーバーの IP アドレスで使用可能なインターフェイスとは異なるインターフェイスにブリッジをデプロイします。
  • configure-ovs.sh シェルスクリプトでは不可能な、ブリッジの高度な設定を実行したいと考えています。これらの設定にスクリプトを使用すると、ブリッジが複数のネットワークインターフェイスに接続できず、インターフェイス間のデータ転送が促進されない可能性があります。
注記

単一のネットワークインターフェイスコントローラー (NIC) とデフォルトのネットワーク設定を備えた環境が必要な場合は、configure-ovs.sh シェルスクリプトを使用します。

Red Hat Enterprise Linux CoreOS (RHCOS) をインストールしてシステムを再起動すると、Machine Config Operator がクラスター内の各ノードに Ignition 設定ファイルを挿入し、各ノードが br-ex ブリッジネットワーク設定を受け取るようになります。設定の競合を防ぐために、configure-ovs.sh シェルスクリプトは、br-ex ブリッジを設定しない信号を受け取ります。

前提条件

  • オプション: NMState 設定を検証できるように、nmstate API をインストールしました。

手順

  1. カスタマイズされた br-ex ブリッジネットワークの base64 情報をデコードした NMState 設定ファイルを作成します。

    カスタマイズされた br-ex ブリッジネットワークの NMState 設定の例

    interfaces:
    - name: enp2s0 
    1
    
      type: ethernet 
    2
    
      state: up 
    3
    
      ipv4:
        enabled: false 
    4
    
      ipv6:
        enabled: false
    - name: br-ex
      type: ovs-bridge
      state: up
      ipv4:
        enabled: false
        dhcp: false
      ipv6:
        enabled: false
        dhcp: false
      bridge:
        options:
          mcast-snooping-enable: true
        port:
        - name: enp2s0 
    5
    
        - name: br-ex
    - name: br-ex
      type: ovs-interface
      state: up
      copy-mac-from: enp2s0
      ipv4:
        enabled: true
        dhcp: true
        auto-route-metric: 48 
    6
    
      ipv6:
        enabled: true
        dhcp: true
        auto-route-metric: 48
    # ...
    Copy to Clipboard Toggle word wrap

    1
    インターフェイスの名前。
    2
    イーサネットのタイプ。
    3
    作成後のインターフェイスの要求された状態。
    4
    この例では、IPv4 と IPv6 を無効にします。
    5
    ブリッジが接続されるノードの NIC。
    6
    br-ex のデフォルトルートの優先順位が常に最も高い(最も低いメトリック)ようにするには、パラメーターを 48 に設定します。この設定により、NetworkManager サービスが自動的に設定するその他のインターフェイスとのルーティングの競合が回避されます。
  2. cat コマンドを使用して、NMState 設定の内容を base64 でエンコードします。

    $ cat <nmstate_configuration>.yaml | base64 
    1
    Copy to Clipboard Toggle word wrap
    1
    <nmstate_configuration> を NMState リソース YAML ファイルの名前に置き換えます。
  3. MachineConfig マニフェストファイルを作成し、次の例に類似したカスタマイズされた br-ex ブリッジネットワーク設定を定義します。

    apiVersion: machineconfiguration.openshift.io/v1
    kind: MachineConfig
    metadata:
      labels:
        machineconfiguration.openshift.io/role: worker
      name: 10-br-ex-worker 
    1
    
    spec:
      config:
        ignition:
          version: 3.2.0
        storage:
          files:
          - contents:
              source: data:text/plain;charset=utf-8;base64,<base64_encoded_nmstate_configuration> 
    2
    
            mode: 0644
            overwrite: true
            path: /etc/nmstate/openshift/worker-0.yml 
    3
    
          - contents:
              source: data:text/plain;charset=utf-8;base64,<base64_encoded_nmstate_configuration>
            mode: 0644
            overwrite: true
            path: /etc/nmstate/openshift/worker-1.yml 
    4
    
    # ...
    Copy to Clipboard Toggle word wrap
    1
    ポリシーの名前。
    2
    エンコードされた base64 情報を指定されたパスに書き込みます。
    3 4
    クラスター内の各ノードに対して、ノードへのホスト名パスと、マシンタイプに応じた base-64 でエンコードされた Ignition 設定ファイルデータを指定します。worker ロールは、クラスター内のノードのデフォルトロールです。MachineConfig マニフェストファイルで各ノードまたはすべてのノードに対して短いホスト名 (hostname -s で得られるもの) のパスを指定する際に、.yaml 拡張子は機能しません。

    /etc/nmstate/openshift/cluster.yml 設定ファイルで、クラスター内のすべてのノードに適用する単一のグローバル設定が指定されている場合は、/etc/nmstate/openshift/<node_hostname>.yml などの各ノードの短いホスト名パスを指定する必要はありません。以下に例を示します。

    # ...
          - contents:
              source: data:text/plain;charset=utf-8;base64,<base64_encoded_nmstate_configuration>
            mode: 0644
            overwrite: true
            path: /etc/nmstate/openshift/cluster.yml
    # ...
    Copy to Clipboard Toggle word wrap

次のステップ

  • コンピュートノードをスケーリングして、クラスター内に存在する各コンピュートノードに、カスタマイズされた br-ex ブリッジを含むマニフェストオブジェクトを適用します。詳細は、関連情報 セクションの「クラスターの拡張」を参照してください。

3.5.1. オプション: 各マシンセットをコンピュートノードにスケーリングする

カスタマイズされた br-ex ブリッジ設定を OpenShift Container Platform クラスター内のすべてのコンピュートノードに適用するには、MachineConfig カスタムリソース (CR) を編集し、そのロールを変更する必要があります。さらに、ホスト名、認証情報など、ベアメタルマシンの情報を定義する BareMetalHost CR を作成する必要があります。

これらのリソースを設定した後、マシンセットをスケーリングして、マシンセットが各コンピュートノードにリソース設定を適用し、ノードを再起動できるようにする必要があります。

前提条件

  • カスタマイズされた br-ex ブリッジ設定を含む MachineConfig マニフェストオブジェクトを作成しました。

手順

  1. 次のコマンドを入力して MachineConfig CR を編集します。

    $ oc edit mc <machineconfig_custom_resource_name>
    Copy to Clipboard Toggle word wrap
  2. 各コンピュートノード設定を CR に追加して、CR がクラスター内の定義済みコンピュートノードごとにロールを管理できるようにします。
  3. 最小限の静的 IP 設定を持つ extraworker-secret という名前の Secret オブジェクトを作成します。
  4. 次のコマンドを入力して、クラスター内の各ノードに extraworker-secret シークレットを適用します。このステップでは、各コンピュートノードに Ignition 設定ファイルへのアクセスを提供します。

    $ oc apply -f ./extraworker-secret.yaml
    Copy to Clipboard Toggle word wrap
  5. BareMetalHost リソースを作成し、preprovisioningNetworkDataName パラメーターでネットワークシークレットを指定します。

    ネットワークシークレットが添付された BareMetalHost リソースの例

    apiVersion: metal3.io/v1alpha1
    kind: BareMetalHost
    spec:
    # ...
      preprovisioningNetworkDataName: ostest-extraworker-0-network-config-secret
    # ...
    Copy to Clipboard Toggle word wrap

  6. クラスターの openshift-machine-api namespace 内で BareMetalHost オブジェクトを管理するために、次のコマンドを入力して namespace に変更します。

    $ oc project openshift-machine-api
    Copy to Clipboard Toggle word wrap
  7. マシンセットを取得します。

    $ oc get machinesets
    Copy to Clipboard Toggle word wrap
  8. 次のコマンドを入力して、各マシンセットをスケールします。このコマンドはマシンセットごとに実行する必要があります。

    $ oc scale machineset <machineset_name> --replicas=<n> 
    1
    Copy to Clipboard Toggle word wrap
    1
    <machineset_name> はマシンセットの名前です。<n> はコンピュートノードの数です。

3.6. クラスターで OVS balance-slb モードを有効にする

Open vSwitch (OVS)の balance-slb モードを有効にして、2 つ以上の物理インターフェイスがネットワークトラフィックを共有できるようにすることができます。Balance -slb モードインターフェイスは、ネットワークスイッチとの負荷分散を必要とせずに、仮想化ワークロードを実行するクラスターにソース負荷分散(SLB)機能を提供することができます。

現在、ソース負荷分散はボンドインターフェイスで実行され、このインターフェイスは br-phy などの補助ブリッジに接続します。ソースの負荷分散は、異なる Media Access Control (MAC)アドレスと仮想ローカルエリアネットワーク(VLAN)の組み合わせでのみ分散されます。すべての OVN-Kubernetes Pod トラフィックは同じ MAC アドレスと VLAN を使用するため、このトラフィックは多くの物理インターフェイス間で負荷分散できないことに注意してください。

次の図は、単純なクラスターインフラストラクチャーレイアウトでの balance-slb モードを示しています。仮想マシン (VM) は、特定の localnet NetworkAttachmentDefinition (NAD) カスタムリソース定義 (CRD)、NAD 0 または NAD 1 に接続します。各 NAD は、VLAN タグ付きまたはタグなしのトラフィックをサポートする基盤となる物理ネットワークにアクセスできるように、VM を提供します。br-ex OVS ブリッジは仮想マシンからのトラフィックを受信し、そのトラフィックを次の OVS ブリッジである br-phy に渡します。br-phy ブリッジは SLB ボンディングのコントローラーとして機能します。SLB ボンディングは、eno0eno1 などの物理インターフェイスリンクを介して、異なる仮想マシンポートからのトラフィックを分散します。さらに、どちらの物理インターフェイスからの Ingress トラフィックも、OVS ブリッジのセットを通過して仮想マシンに到達できます。

図3.1 2 つの NAD CRD を持つ localnet で動作する OVS balance-slb モード

OVS ボンディングを使用して、balance-slb モードインターフェイスをプライマリーまたはセカンダリーネットワークタイプに統合できます。OVS ボンディングでは、次の点に注意してください。

  • OVN-Kubernetes CNI プラグインをサポートし、プラグインと簡単に統合できます。
  • ネイティブで balance-slb モードをサポートします。

前提条件

  • プライマリーネットワークに複数の物理インターフェイスが接続されており、それらのインターフェイスを MachineConfig ファイルで定義している。
  • マニフェストオブジェクトを作成し、オブジェクト設定ファイルでカスタマイズされた br-ex ブリッジを定義している。
  • プライマリーネットワークに複数の物理インターフェイスが割り当てられ、NAD CRD ファイルでインターフェイスを定義している。

手順

  1. クラスター内に存在するベアメタルホストごとに、クラスターの install-config.yaml ファイルで、次の例のように networkConfig セクションを定義します。

    apiVersion: v1
    kind: InstallConfig
    metadata:
      name: <cluster-name>
    # ...
    networkConfig:
      interfaces:
        - name: enp1s0 
    1
    
          type: ethernet
          state: up
          ipv4:
            dhcp: true
            enabled: true
          ipv6:
            enabled: false
        - name: enp2s0 
    2
    
          type: ethernet
          state: up
          mtu: 1500 
    3
    
          ipv4:
            dhcp: true
            enabled: true
          ipv6:
            dhcp: true
            enabled: true
        - name: enp3s0 
    4
    
          type: ethernet
          state: up
          mtu: 1500
          ipv4:
            enabled: false
          ipv6:
            enabled: false
    # ...
    Copy to Clipboard Toggle word wrap
    1
    プロビジョニングされたネットワークインターフェイスコントローラー(NIC)のインターフェイス。
    2
    ボンディングインターフェイス用の Ignition 設定ファイルを取り込む最初のボンディングされたインターフェイス。
    3
    ボンディングポートで br-ex 最大伝送単位(MTU)を手動で設定します。
    4
    2 つ目のボンディングされたインターフェイスは、クラスターのインストール中に Ignition を実行する最小設定の一部です。
  2. NMState 設定ファイルで各ネットワークインターフェイスを定義します。

    多くのネットワークインターフェイスを定義する NMState 設定ファイルの例

    apiVersion: nmstate.io/v1
    kind: NodeNetworkConfigurationPolicy
    metadata:
    # ...
    ovn:
      bridge-mappings:
        - localnet: localnet-network
          bridge: br-ex
          state: present
    interfaces:
      - name: br-ex
        type: ovs-bridge
        state: up
        bridge:
          allow-extra-patch-ports: true
          port:
            - name: br-ex
            - name: patch-ex-to-phy
        ovs-db:
          external_ids:
            bridge-uplink: "patch-ex-to-phy"
      - name: br-ex
        type: ovs-interface
        state: up
        mtu: 1500 
    1
    
        ipv4:
          enabled: true
          dhcp: true
          auto-route-metric: 48
        ipv6:
          enabled: false
          dhcp: false
          auto-route-metric: 48
      - name: br-phy
        type: ovs-bridge
        state: up
        bridge:
          allow-extra-patch-ports: true
          port:
            - name: patch-phy-to-ex
            - name: ovs-bond
              link-aggregation:
                mode: balance-slb
                port:
                  - name: enp2s0
                  - name: enp3s0
      - name: patch-ex-to-phy
        type: ovs-interface
        state: up
        patch:
          peer: patch-phy-to-ex
      - name: patch-phy-to-ex
        type: ovs-interface
        state: up
        patch:
          peer: patch-ex-to-phy
      - name: enp1s0
        type: ethernet
        state: up
        ipv4:
          dhcp: true
          enabled: true
        ipv6:
          enabled: false
      - name: enp2s0
        type: ethernet
        state: up
        mtu: 1500
        ipv4:
          enabled: false
        ipv6:
          enabled: false
      - name: enp3s0
        type: ethernet
        state: up
        mtu: 1500
        ipv4:
          enabled: false
        ipv6:
          enabled: false
    # ...
    Copy to Clipboard Toggle word wrap

    1
    ボンディングポートで br-ex MTU を手動で設定します。
  3. base64 コマンドを使用して、NMState 設定ファイルのインターフェイスコンテンツをエンコードします。

    $ base64 -w0  <nmstate_configuration>.yml 
    1
    Copy to Clipboard Toggle word wrap
    1
    -w0 オプションは、base64 エンコード操作中に行の折り返しを防止します。
  4. master ロールと worker ロールの MachineConfig マニフェストファイルを作成します。前のコマンドの base64 でエンコードされた文字列を各 MachineConfig マニフェストファイルに埋め込むようにしてください。次のマニフェストファイルの例では、クラスター内に存在するすべてのノードに対して master ロールを設定します。ノード固有の master ロールと worker ロールのマニフェストファイルを作成することもできます。

    apiVersion: machineconfiguration.openshift.io/v1
    kind: MachineConfig
    metadata:
      labels:
        machineconfiguration.openshift.io/role: master
      name: 10-br-ex-master 
    1
    
    spec:
      config:
        ignition:
          version: 3.2.0
        storage:
          files:
          - contents:
              source: data:text/plain;charset=utf-8;base64,<base64_encoded_nmstate_configuration> 
    2
    
            mode: 0644
            overwrite: true
            path: /etc/nmstate/openshift/cluster.yml 
    3
    Copy to Clipboard Toggle word wrap
    1
    ポリシーの名前。
    2
    エンコードされた base64 情報を指定されたパスに書き込みます。
    3
    cluster.yml ファイルへのパスを指定します。クラスター内の各ノードに対して、<node_short_hostname>.yml など、ノードへの短いホスト名パスを指定できます。
  5. MachineConfig マニフェストファイルを ./<installation_directory>/manifests ディレクトリー に保存します。ここで、< installation_directory > は、インストールプログラムがファイルを作成するディレクトリーに移動します。

    Machine Config Operator (MCO)は各マニフェストファイルからコンテンツを取得し、ローリング更新中に選択されたすべてのノードにコンテンツを一貫して適用します。

3.7. サブネット間の通信を確立する

一般的な OpenShift Container Platform クラスターのセットアップでは、コントロールプレーンとコンピュートノードを含むすべてのノードが同じネットワーク内に存在します。ただし、エッジコンピューティングのシナリオでは、コンピュートノードをエッジの近くに配置することが有益な場合があります。その場合、コントロールプレーンやローカルコンピュートノードが使用するサブネットとは異なるネットワークセグメントまたはサブネットをリモートノードに使用することもよくあります。このようなセットアップにより、エッジのレイテンシーが減少し、拡張性が向上します。

OpenShift Container Platform をインストールする前に、リモートノードを含むエッジサブネットがコントロールプレーンノードを含むサブネットに到達し、コントロールプレーンからのトラフィックも受信できるように、ネットワークを適切に設定する必要があります。

重要

クラスターのインストール中に、install-config.yaml 設定ファイルのネットワーク設定でノードに永続的な IP アドレスを割り当てます。これを行わないと、ノードに一時的な IP アドレスが割り当てられ、トラフィックがノードに到達する方法に影響する可能性があります。たとえば、ノードに一時的な IP アドレスが割り当てられていて、ノードに対して結合されたインターフェイスを設定した場合、結合されたインターフェイスは別の IP アドレスを受け取る可能性があります。

デフォルトのロードバランサーの代わりにユーザー管理のロードバランサーを設定することで、同じサブネットまたは複数のサブネットでコントロールプレーンノードを実行できます。複数のサブネット環境を使用すると、ハードウェア障害やネットワーク停止によって OpenShift Container Platform クラスターが失敗するリスクを軽減できます。詳細は、「ユーザー管理ロードバランサーのサービス」および「ユーザー管理ロードバランサーの設定」を参照してください。

複数のサブネット環境でコントロールプレーンノードを実行するには、次の主要なタスクを完了する必要があります。

  • install-config.yaml ファイルの loadBalancer.type パラメーターで UserManaged を指定して、デフォルトのロードバランサーの代わりにユーザー管理のロードバランサーを設定します。
  • install-config.yaml ファイルの ingressVIPs および apiVIPs パラメーターでユーザー管理のロードバランサーのアドレスを設定します。
  • 複数のサブネットの Classless Inter-Domain Routing (CIDR) とユーザー管理のロードバランサーの IP アドレスを、install-config.yaml ファイルの networking.machineNetworks パラメーターに追加します。
注記

複数のサブネットを持つクラスターをデプロイするには、redfish-virtualmediaidrac-virtualmedia などの仮想メディアを使用する必要があります。

この手順では、2 番目のサブネットにあるリモートコンピュートノードが 1 番目のサブネットにあるコントロールプレーンノードと効果的に通信できるようにするために必要なネットワーク設定と、1 番目のサブネットにあるコントロールプレーンノードが 2 番目のサブネットにあるリモートコンピュートノードと効果的に通信できるようにするために必要なネットワーク設定を詳しく説明します。

この手順では、クラスターは 2 つのサブネットにまたがります。

  • 1 番目のサブネット (10.0.0.0) には、コントロールプレーンとローカルコンピュートノードが含まれています。
  • 2 番目のサブネット (192.168.0.0) には、エッジコンピュートノードが含まれています。

手順

  1. 1 番目のサブネットが 2 番目のサブネットと通信するように設定します。

    1. 次のコマンドを実行して、コントロールプレーンノードに root としてログインします。

      $ sudo su -
      Copy to Clipboard Toggle word wrap
    2. 次のコマンドを実行して、ネットワークインターフェイスの名前を取得します。

      # nmcli dev status
      Copy to Clipboard Toggle word wrap
    3. 次のコマンドを実行して、ゲートウェイを経由する 2 番目のサブネット (192.168.0.0) へのルートを追加します。

      # nmcli connection modify <interface_name> +ipv4.routes "192.168.0.0/24 via <gateway>"
      Copy to Clipboard Toggle word wrap

      <interface_name> をインターフェイス名に置き換えます。<gateway> を実際のゲートウェイの IP アドレスに置き換えます。

      # nmcli connection modify eth0 +ipv4.routes "192.168.0.0/24 via 192.168.0.1"
      Copy to Clipboard Toggle word wrap

    4. 次のコマンドを実行して変更を適用します。

      # nmcli connection up <interface_name>
      Copy to Clipboard Toggle word wrap

      <interface_name> をインターフェイス名に置き換えます。

    5. ルーティングテーブルを検証して、ルートが正常に追加されたことを確認します。

      # ip route
      Copy to Clipboard Toggle word wrap
    6. 1 番目のサブネットの各コントロールプレーンノードに対して前の手順を繰り返します。

      注記

      コマンドは、実際のインターフェイス名とゲートウェイに合わせて調整してください。

  2. 1 番目のサブネットと通信するように 2 番目のサブネットを設定します。

    1. 次のコマンドを実行して、リモートコンピュートノードに root としてログインします。

      $ sudo su -
      Copy to Clipboard Toggle word wrap
    2. 次のコマンドを実行して、ネットワークインターフェイスの名前を取得します。

      # nmcli dev status
      Copy to Clipboard Toggle word wrap
    3. 次のコマンドを実行して、ゲートウェイを経由する最初のサブネット (10.0.0.0) へのルートを追加します。

      # nmcli connection modify <interface_name> +ipv4.routes "10.0.0.0/24 via <gateway>"
      Copy to Clipboard Toggle word wrap

      <interface_name> をインターフェイス名に置き換えます。<gateway> を実際のゲートウェイの IP アドレスに置き換えます。

      # nmcli connection modify eth0 +ipv4.routes "10.0.0.0/24 via 10.0.0.1"
      Copy to Clipboard Toggle word wrap

    4. 次のコマンドを実行して変更を適用します。

      # nmcli connection up <interface_name>
      Copy to Clipboard Toggle word wrap

      <interface_name> をインターフェイス名に置き換えます。

    5. 次のコマンドを実行して、ルーティングテーブルを検証し、ルートが正常に追加されたことを確認します。

      # ip route
      Copy to Clipboard Toggle word wrap
    6. 2 番目のサブネット内の各コンピュートノードに対して、上記の手順を繰り返します。

      注記

      コマンドは、実際のインターフェイス名とゲートウェイに合わせて調整してください。

  3. ネットワークを設定したら、接続をテストして、リモートノードがコントロールプレーンノードに到達できること、およびコントロールプレーンノードがリモートノードに到達できることを確認します。

    1. 1 番目のサブネットのコントロールプレーンノードから、次のコマンドを実行して、2 番目のサブネットのリモートノードに ping を実行します。

      $ ping <remote_node_ip_address>
      Copy to Clipboard Toggle word wrap

      ping が成功した場合は、1 番目のサブネットのコントロールプレーンノードが 2 番目のサブネットのリモートノードに到達できています。応答がない場合は、ネットワーク設定を確認し、ノードに対して手順を繰り返します。

    2. 2 番目のサブネットのリモートノードから、次のコマンドを実行して、1 番目のサブネットのコントロールプレーンノードに ping を実行します。

      $ ping <control_plane_node_ip_address>
      Copy to Clipboard Toggle word wrap

      ping が成功した場合は、2 番目のサブネットのリモートコンピュートノードが 1 番目のサブネットのコントロールプレーンに到達できています。応答がない場合は、ネットワーク設定を確認し、ノードに対して手順を繰り返します。

3.8. OpenShift Container Platform インストーラーの取得

インストールプログラムの stable-4.x バージョンと選択したアーキテクチャーを使用して、OpenShift Container Platform の一般公開の安定バージョンをデプロイします。

$ export VERSION=stable-4.16
Copy to Clipboard Toggle word wrap
$ export RELEASE_ARCH=<architecture>
Copy to Clipboard Toggle word wrap
$ export RELEASE_IMAGE=$(curl -s https://mirror.openshift.com/pub/openshift-v4/$RELEASE_ARCH/clients/ocp/$VERSION/release.txt | grep 'Pull From: quay.io' | awk -F ' ' '{print $3}')
Copy to Clipboard Toggle word wrap

3.9. OpenShift Container Platform インストールのデプロイメント

インストーラーを取得したら、インストーラーを展開します。

手順

  1. 環境変数を設定します。

    $ export cmd=openshift-baremetal-install
    Copy to Clipboard Toggle word wrap
    $ export pullsecret_file=~/pull-secret.txt
    Copy to Clipboard Toggle word wrap
    $ export extract_dir=$(pwd)
    Copy to Clipboard Toggle word wrap
  2. oc バイナリーを取得します。

    $ curl -s https://mirror.openshift.com/pub/openshift-v4/clients/ocp/$VERSION/openshift-client-linux.tar.gz | tar zxvf - oc
    Copy to Clipboard Toggle word wrap
  3. インストーラーを実行します。

    $ sudo cp oc /usr/local/bin
    Copy to Clipboard Toggle word wrap
    $ oc adm release extract --registry-config "${pullsecret_file}" --command=$cmd --to "${extract_dir}" ${RELEASE_IMAGE}
    Copy to Clipboard Toggle word wrap
    $ sudo cp openshift-baremetal-install /usr/local/bin
    Copy to Clipboard Toggle word wrap

3.10. オプション: RHCOS イメージキャッシュの作成

イメージキャッシングを使用するには、ブートストラップ VM がクラスターノードをプロビジョニングするために使用する Red Hat Enterprise Linux CoreOS(RHCOS) イメージをダウンロードする必要があります。イメージのキャッシュはオプションですが、帯域幅が制限されているネットワークでインストールプログラムを実行する場合に特に便利です。

注記

正しいイメージがリリースペイロードにあるため、インストールプログラムは、clusterOSImage RHCOS イメージを必要としなくなりました。

帯域幅が制限されたネットワークでインストールプログラムを実行していて、RHCOS イメージのダウンロードに 15〜20 分以上かかる場合、インストールプログラムはタイムアウトになります。このような場合、Web サーバーでイメージをキャッシュすることができます。

警告

HTTPD サーバーに対して TLS を有効にする場合、ルート証明書がクライアントによって信頼された機関によって署名されていることを確認し、OpenShift Container Platform ハブおよびスポーククラスターと HTTPD サーバー間の信頼された証明書チェーンを検証する必要があります。信頼されていない証明書で設定されたサーバーを使用すると、イメージがイメージ作成サービスにダウンロードされなくなります。信頼されていない HTTPS サーバーの使用はサポートされていません。

イメージを含むコンテナーをインストールします。

手順

  1. podman をインストールします。

    $ sudo dnf install -y podman
    Copy to Clipboard Toggle word wrap
  2. RHCOS イメージのキャッシュに使用されるファイアウォールのポート 8080 を開きます。

    $ sudo firewall-cmd --add-port=8080/tcp --zone=public --permanent
    Copy to Clipboard Toggle word wrap
    $ sudo firewall-cmd --reload
    Copy to Clipboard Toggle word wrap
  3. bootstraposimage を保存するディレクトリーを作成します。

    $ mkdir /home/kni/rhcos_image_cache
    Copy to Clipboard Toggle word wrap
  4. 新規に作成されたディレクトリーに適切な SELinux コンテキストを設定します。

    $ sudo semanage fcontext -a -t httpd_sys_content_t "/home/kni/rhcos_image_cache(/.*)?"
    Copy to Clipboard Toggle word wrap
    $ sudo restorecon -Rv /home/kni/rhcos_image_cache/
    Copy to Clipboard Toggle word wrap
  5. インストールプログラムがブートストラップ VM にデプロイする RHCOS イメージの URI を取得します。

    $ export RHCOS_QEMU_URI=$(/usr/local/bin/openshift-baremetal-install coreos print-stream-json | jq -r --arg ARCH "$(arch)" '.architectures[$ARCH].artifacts.qemu.formats["qcow2.gz"].disk.location')
    Copy to Clipboard Toggle word wrap
  6. インストールプログラムがブートストラップ VM にデプロイするイメージの名前を取得します。

    $ export RHCOS_QEMU_NAME=${RHCOS_QEMU_URI##*/}
    Copy to Clipboard Toggle word wrap
  7. ブートストラップ仮想マシンにデプロイされる RHCOS イメージの SHA ハッシュを取得します。

    $ export RHCOS_QEMU_UNCOMPRESSED_SHA256=$(/usr/local/bin/openshift-baremetal-install coreos print-stream-json | jq -r --arg ARCH "$(arch)" '.architectures[$ARCH].artifacts.qemu.formats["qcow2.gz"].disk["uncompressed-sha256"]')
    Copy to Clipboard Toggle word wrap
  8. イメージをダウンロードして、/home/kni/rhcos_image_cache ディレクトリーに配置します。

    $ curl -L ${RHCOS_QEMU_URI} -o /home/kni/rhcos_image_cache/${RHCOS_QEMU_NAME}
    Copy to Clipboard Toggle word wrap
  9. 新しいファイルの SELinux タイプが httpd_sys_content_t であることを確認します。

    $ ls -Z /home/kni/rhcos_image_cache
    Copy to Clipboard Toggle word wrap
  10. Pod を作成します。

    $ podman run -d --name rhcos_image_cache \
    1
    
    -v /home/kni/rhcos_image_cache:/var/www/html \
    -p 8080:8080/tcp \
    registry.access.redhat.com/ubi9/httpd-24
    Copy to Clipboard Toggle word wrap
    1
    rhcos_image_cache という名前のキャッシング Web サーバーを作成します。この Pod は、デプロイメント用に install-config.yaml ファイルの bootstrapOSImage イメージを提供します。
  11. bootstrapOSImage 設定を生成します。

    $ export BAREMETAL_IP=$(ip addr show dev baremetal | awk '/inet /{print $2}' | cut -d"/" -f1)
    Copy to Clipboard Toggle word wrap
    $ export BOOTSTRAP_OS_IMAGE="http://${BAREMETAL_IP}:8080/${RHCOS_QEMU_NAME}?sha256=${RHCOS_QEMU_UNCOMPRESSED_SHA256}"
    Copy to Clipboard Toggle word wrap
    $ echo "    bootstrapOSImage=${BOOTSTRAP_OS_IMAGE}"
    Copy to Clipboard Toggle word wrap
  12. platform.baremetal 下の install-config.yaml ファイルに必要な設定を追加します。

    platform:
      baremetal:
        bootstrapOSImage: <bootstrap_os_image>  
    1
    Copy to Clipboard Toggle word wrap
    1
    <bootstrap_os_image>$BOOTSTRAP_OS_IMAGE の値に置き換えます。

    詳細は、「install-config.yaml ファイルの設定」セクションを参照してください。

3.11. ユーザー管理ロードバランサーのサービス

デフォルトのロードバランサーの代わりに、ユーザーが管理するロードバランサーを使用するように OpenShift Container Platform クラスターを設定できます。

重要

ユーザー管理ロードバランサーの設定は、ベンダーのロードバランサーによって異なります。

このセクションの情報と例は、ガイドラインのみを目的としています。ベンダーのロードバランサーに関する詳細は、ベンダーのドキュメントを参照してください。

Red Hat は、ユーザー管理ロードバランサーに対して次のサービスをサポートしています。

  • Ingress Controller
  • OpenShift API
  • OpenShift MachineConfig API

ユーザー管理ロードバランサーに対して、これらのサービスの 1 つを設定するか、すべてを設定するかを選択できます。一般的な設定オプションは、Ingress Controller サービスのみを設定することです。次の図は、各サービスの詳細を示しています。

図3.2 OpenShift Container Platform 環境で動作する Ingress Controller を示すネットワークワークフローの例

図3.3 OpenShift Container Platform 環境で動作する OpenShift API を示すネットワークワークフローの例

図3.4 OpenShift Container Platform 環境で動作する OpenShift MachineConfig API を示すネットワークワークフローの例

ユーザー管理ロードバランサーでは、次の設定オプションがサポートされています。

  • ノードセレクターを使用して、Ingress Controller を特定のノードのセットにマッピングします。このセットの各ノードに静的 IP アドレスを割り当てるか、Dynamic Host Configuration Protocol (DHCP) から同じ IP アドレスを受け取るように各ノードを設定する必要があります。インフラストラクチャーノードは通常、このタイプの設定を受け取ります。
  • サブネット上のすべての IP アドレスをターゲットにします。この設定では、ロードバランサーターゲットを再設定せずにネットワーク内でノードを作成および破棄できるため、メンテナンスオーバーヘッドを削減できます。/27/28 などの小規模なネットワーク上に設定されたマシンを使用して Ingress Pod をデプロイする場合、ロードバランサーのターゲットを簡素化できます。

    ヒント

    マシン config プールのリソースを確認することで、ネットワーク内に存在するすべての IP アドレスをリスト表示できます。

OpenShift Container Platform クラスターのユーザー管理ロードバランサーを設定する前に、以下の情報を考慮してください。

  • フロントエンド IP アドレスの場合、フロントエンド IP アドレス、Ingress Controller のロードバランサー、および API ロードバランサーに同じ IP アドレスを使用できます。この機能は、ベンダーのドキュメントを確認してください。
  • バックエンド IP アドレスの場合、ユーザー管理ロードバランサーの有効期間中に OpenShift Container Platform コントロールプレーンノードの IP アドレスが変更されないことを確認します。次のいずれかのアクションを実行すると、これを実現できます。

    • 各コントロールプレーンノードに静的 IP アドレスを割り当てます。
    • ノードが DHCP リースを要求するたびに、DHCP から同じ IP アドレスを受信するように各ノードを設定します。ベンダーによっては、DHCP リースは IP 予約または静的 DHCP 割り当ての形式になる場合があります。
  • Ingress Controller バックエンドサービスのユーザー管理ロードバランサーで Ingress Controller を実行する各ノードを手動で定義します。たとえば、Ingress Controller が未定義のノードに移動すると、接続が停止する可能性があります。

3.11.1. ユーザー管理ロードバランサーの設定

デフォルトのロードバランサーの代わりに、ユーザーが管理するロードバランサーを使用するように OpenShift Container Platform クラスターを設定できます。

重要

ユーザー管理ロードバランサーを設定する前に、「ユーザー管理ロードバランサーのサービス」セクションを必ずお読みください。

ユーザー管理ロードバランサー用に設定するサービスに適用される次の前提条件をお読みください。

注記

クラスター上で実行される MetalLB は、ユーザー管理ロードバランサーとして機能します。

OpenShift API の前提条件

  • フロントエンド IP アドレスを定義している。
  • TCP ポート 6443 および 22623 は、ロードバランサーのフロントエンド IP アドレスで公開されている。以下の項目を確認します。

    • ポート 6443 が OpenShift API サービスにアクセスできる。
    • ポート 22623 が Ignition 起動設定をノードに提供できる。
  • フロントエンド IP アドレスとポート 6443 へは、OpenShift Container Platform クラスターの外部の場所にいるシステムのすべてのユーザーがアクセスできる。
  • フロントエンド IP アドレスとポート 22623 は、OpenShift Container Platform ノードからのみ到達できる。
  • ロードバランサーバックエンドは、ポート 6443 および 22623 の OpenShift Container Platform コントロールプレーンノードと通信できる。

Ingress Controller の前提条件

  • フロントエンド IP アドレスを定義している。
  • TCP ポート 443 および 80 はロードバランサーのフロントエンド IP アドレスで公開されている。
  • フロントエンドの IP アドレス、ポート 80、ポート 443 へは、OpenShift Container Platform クラスターの外部の場所にあるシステムの全ユーザーがアクセスできる。
  • フロントエンドの IP アドレス、ポート 80、ポート 443 は、OpenShift Container Platform クラスターで動作するすべてのノードから到達できる。
  • ロードバランサーバックエンドは、ポート 80、443、および 1936 で Ingress Controller を実行する OpenShift Container Platform ノードと通信できる。

ヘルスチェック URL 仕様の前提条件

ほとんどのロードバランサーは、サービスが使用可能か使用不可かを判断するヘルスチェック URL を指定して設定できます。OpenShift Container Platform は、OpenShift API、Machine Configuration API、および Ingress Controller バックエンドサービスのこれらのヘルスチェックを提供します。

次の例は、前にリスト表示したバックエンドサービスのヘルスチェック仕様を示しています。

Kubernetes API ヘルスチェック仕様の例

Path: HTTPS:6443/readyz
Healthy threshold: 2
Unhealthy threshold: 2
Timeout: 10
Interval: 10
Copy to Clipboard Toggle word wrap

Machine Config API ヘルスチェック仕様の例

Path: HTTPS:22623/healthz
Healthy threshold: 2
Unhealthy threshold: 2
Timeout: 10
Interval: 10
Copy to Clipboard Toggle word wrap

Ingress Controller のヘルスチェック仕様の例

Path: HTTP:1936/healthz/ready
Healthy threshold: 2
Unhealthy threshold: 2
Timeout: 5
Interval: 10
Copy to Clipboard Toggle word wrap

手順

  1. HAProxy Ingress Controller を設定して、ポート 6443、22623、443、および 80 でロードバランサーからクラスターへのアクセスを有効化できるようにします。必要に応じて、HAProxy 設定で単一のサブネットの IP アドレスまたは複数のサブネットの IP アドレスを指定できます。

    1 つのサブネットをリストした HAProxy 設定の例

    # ...
    listen my-cluster-api-6443
        bind 192.168.1.100:6443
        mode tcp
        balance roundrobin
      option httpchk
      http-check connect
      http-check send meth GET uri /readyz
      http-check expect status 200
        server my-cluster-master-2 192.168.1.101:6443 check inter 10s rise 2 fall 2
        server my-cluster-master-0 192.168.1.102:6443 check inter 10s rise 2 fall 2
        server my-cluster-master-1 192.168.1.103:6443 check inter 10s rise 2 fall 2
    
    listen my-cluster-machine-config-api-22623
        bind 192.168.1.100:22623
        mode tcp
        balance roundrobin
      option httpchk
      http-check connect
      http-check send meth GET uri /healthz
      http-check expect status 200
        server my-cluster-master-2 192.168.1.101:22623 check inter 10s rise 2 fall 2
        server my-cluster-master-0 192.168.1.102:22623 check inter 10s rise 2 fall 2
        server my-cluster-master-1 192.168.1.103:22623 check inter 10s rise 2 fall 2
    
    listen my-cluster-apps-443
        bind 192.168.1.100:443
        mode tcp
        balance roundrobin
      option httpchk
      http-check connect
      http-check send meth GET uri /healthz/ready
      http-check expect status 200
        server my-cluster-worker-0 192.168.1.111:443 check port 1936 inter 10s rise 2 fall 2
        server my-cluster-worker-1 192.168.1.112:443 check port 1936 inter 10s rise 2 fall 2
        server my-cluster-worker-2 192.168.1.113:443 check port 1936 inter 10s rise 2 fall 2
    
    listen my-cluster-apps-80
       bind 192.168.1.100:80
       mode tcp
       balance roundrobin
      option httpchk
      http-check connect
      http-check send meth GET uri /healthz/ready
      http-check expect status 200
        server my-cluster-worker-0 192.168.1.111:80 check port 1936 inter 10s rise 2 fall 2
        server my-cluster-worker-1 192.168.1.112:80 check port 1936 inter 10s rise 2 fall 2
        server my-cluster-worker-2 192.168.1.113:80 check port 1936 inter 10s rise 2 fall 2
    # ...
    Copy to Clipboard Toggle word wrap

    複数のサブネットをリストした HAProxy 設定の例

    # ...
    listen api-server-6443
        bind *:6443
        mode tcp
          server master-00 192.168.83.89:6443 check inter 1s
          server master-01 192.168.84.90:6443 check inter 1s
          server master-02 192.168.85.99:6443 check inter 1s
          server bootstrap 192.168.80.89:6443 check inter 1s
    
    listen machine-config-server-22623
        bind *:22623
        mode tcp
          server master-00 192.168.83.89:22623 check inter 1s
          server master-01 192.168.84.90:22623 check inter 1s
          server master-02 192.168.85.99:22623 check inter 1s
          server bootstrap 192.168.80.89:22623 check inter 1s
    
    listen ingress-router-80
        bind *:80
        mode tcp
        balance source
          server worker-00 192.168.83.100:80 check inter 1s
          server worker-01 192.168.83.101:80 check inter 1s
    
    listen ingress-router-443
        bind *:443
        mode tcp
        balance source
          server worker-00 192.168.83.100:443 check inter 1s
          server worker-01 192.168.83.101:443 check inter 1s
    
    listen ironic-api-6385
        bind *:6385
        mode tcp
        balance source
          server master-00 192.168.83.89:6385 check inter 1s
          server master-01 192.168.84.90:6385 check inter 1s
          server master-02 192.168.85.99:6385 check inter 1s
          server bootstrap 192.168.80.89:6385 check inter 1s
    
    listen inspector-api-5050
        bind *:5050
        mode tcp
        balance source
          server master-00 192.168.83.89:5050 check inter 1s
          server master-01 192.168.84.90:5050 check inter 1s
          server master-02 192.168.85.99:5050 check inter 1s
          server bootstrap 192.168.80.89:5050 check inter 1s
    # ...
    Copy to Clipboard Toggle word wrap

  2. curl CLI コマンドを使用して、ユーザー管理ロードバランサーとそのリソースが動作していることを確認します。

    1. 次のコマンドを実行して応答を観察し、クラスターマシン設定 API が Kubernetes API サーバーリソースにアクセスできることを確認します。

      $ curl https://<loadbalancer_ip_address>:6443/version --insecure
      Copy to Clipboard Toggle word wrap

      設定が正しい場合は、応答として JSON オブジェクトを受信します。

      {
        "major": "1",
        "minor": "11+",
        "gitVersion": "v1.11.0+ad103ed",
        "gitCommit": "ad103ed",
        "gitTreeState": "clean",
        "buildDate": "2019-01-09T06:44:10Z",
        "goVersion": "go1.10.3",
        "compiler": "gc",
        "platform": "linux/amd64"
      }
      Copy to Clipboard Toggle word wrap
    2. 次のコマンドを実行して出力を確認し、クラスターマシン設定 API がマシン設定サーバーリソースからアクセスできることを確認します。

      $ curl -v https://<loadbalancer_ip_address>:22623/healthz --insecure
      Copy to Clipboard Toggle word wrap

      設定が正しい場合、コマンドの出力には次の応答が表示されます。

      HTTP/1.1 200 OK
      Content-Length: 0
      Copy to Clipboard Toggle word wrap
    3. 次のコマンドを実行して出力を確認し、コントローラーがポート 80 の Ingress Controller リソースにアクセスできることを確認します。

      $ curl -I -L -H "Host: console-openshift-console.apps.<cluster_name>.<base_domain>" http://<load_balancer_front_end_IP_address>
      Copy to Clipboard Toggle word wrap

      設定が正しい場合、コマンドの出力には次の応答が表示されます。

      HTTP/1.1 302 Found
      content-length: 0
      location: https://console-openshift-console.apps.ocp4.private.opequon.net/
      cache-control: no-cache
      Copy to Clipboard Toggle word wrap
    4. 次のコマンドを実行して出力を確認し、コントローラーがポート 443 の Ingress Controller リソースにアクセスできることを確認します。

      $ curl -I -L --insecure --resolve console-openshift-console.apps.<cluster_name>.<base_domain>:443:<Load Balancer Front End IP Address> https://console-openshift-console.apps.<cluster_name>.<base_domain>
      Copy to Clipboard Toggle word wrap

      設定が正しい場合、コマンドの出力には次の応答が表示されます。

      HTTP/1.1 200 OK
      referrer-policy: strict-origin-when-cross-origin
      set-cookie: csrf-token=UlYWOyQ62LWjw2h003xtYSKlh1a0Py2hhctw0WmV2YEdhJjFyQwWcGBsja261dGLgaYO0nxzVErhiXt6QepA7g==; Path=/; Secure; SameSite=Lax
      x-content-type-options: nosniff
      x-dns-prefetch-control: off
      x-frame-options: DENY
      x-xss-protection: 1; mode=block
      date: Wed, 04 Oct 2023 16:29:38 GMT
      content-type: text/html; charset=utf-8
      set-cookie: 1e2670d92730b515ce3a1bb65da45062=1bf5e9573c9a2760c964ed1659cc1673; path=/; HttpOnly; Secure; SameSite=None
      cache-control: private
      Copy to Clipboard Toggle word wrap
  3. ユーザー管理ロードバランサーのフロントエンド IP アドレスをターゲットにするようにクラスターの DNS レコードを設定します。ロードバランサー経由で、クラスター API およびアプリケーションの DNS サーバーのレコードを更新する必要があります。

    変更された DNS レコードの例

    <load_balancer_ip_address>  A  api.<cluster_name>.<base_domain>
    A record pointing to Load Balancer Front End
    Copy to Clipboard Toggle word wrap

    <load_balancer_ip_address>   A apps.<cluster_name>.<base_domain>
    A record pointing to Load Balancer Front End
    Copy to Clipboard Toggle word wrap
    重要

    DNS の伝播では、各 DNS レコードが使用可能になるまでに時間がかかる場合があります。各レコードを検証する前に、各 DNS レコードが伝播されることを確認してください。

  4. OpenShift Container Platform クラスターでユーザー管理ロードバランサーを使用するには、クラスターの install-config.yaml ファイルで次の設定を指定する必要があります。

    # ...
    platform:
      baremetal:
        loadBalancer:
          type: UserManaged 
    1
    
        apiVIPs:
        - <api_ip> 
    2
    
        ingressVIPs:
        - <ingress_ip> 
    3
    
    # ...
    Copy to Clipboard Toggle word wrap
    1
    クラスターのユーザー管理ロードバランサーを指定するには、type パラメーターに UserManaged を設定します。パラメーターのデフォルトは OpenShiftManagedDefault で、これはデフォルトの内部ロードバランサーを示します。openshift-kni-infra namespace で定義されたサービスの場合、ユーザー管理ロードバランサーは coredns サービスをクラスター内の Pod にデプロイできますが、keepalived および haproxy サービスは無視します。
    2
    ユーザー管理ロードバランサーを指定する場合に必須のパラメーターです。Kubernetes API がユーザー管理ロードバランサーと通信できるように、ユーザー管理ロードバランサーのパブリック IP アドレスを指定します。
    3
    ユーザー管理ロードバランサーを指定する場合に必須のパラメーターです。ユーザー管理ロードバランサーのパブリック IP アドレスを指定して、ユーザー管理ロードバランサーがクラスターの Ingress トラフィックを管理できるようにします。

検証

  1. curl CLI コマンドを使用して、ユーザー管理ロードバランサーと DNS レコード設定が動作していることを確認します。

    1. 次のコマンドを実行して出力を確認し、クラスター API にアクセスできることを確認します。

      $ curl https://api.<cluster_name>.<base_domain>:6443/version --insecure
      Copy to Clipboard Toggle word wrap

      設定が正しい場合は、応答として JSON オブジェクトを受信します。

      {
        "major": "1",
        "minor": "11+",
        "gitVersion": "v1.11.0+ad103ed",
        "gitCommit": "ad103ed",
        "gitTreeState": "clean",
        "buildDate": "2019-01-09T06:44:10Z",
        "goVersion": "go1.10.3",
        "compiler": "gc",
        "platform": "linux/amd64"
        }
      Copy to Clipboard Toggle word wrap
    2. 次のコマンドを実行して出力を確認し、クラスターマシン設定にアクセスできることを確認します。

      $ curl -v https://api.<cluster_name>.<base_domain>:22623/healthz --insecure
      Copy to Clipboard Toggle word wrap

      設定が正しい場合、コマンドの出力には次の応答が表示されます。

      HTTP/1.1 200 OK
      Content-Length: 0
      Copy to Clipboard Toggle word wrap
    3. 以下のコマンドを実行して出力を確認し、ポートで各クラスターアプリケーションにアクセスできることを確認します。

      $ curl http://console-openshift-console.apps.<cluster_name>.<base_domain> -I -L --insecure
      Copy to Clipboard Toggle word wrap

      設定が正しい場合、コマンドの出力には次の応答が表示されます。

      HTTP/1.1 302 Found
      content-length: 0
      location: https://console-openshift-console.apps.<cluster-name>.<base domain>/
      cache-control: no-cacheHTTP/1.1 200 OK
      referrer-policy: strict-origin-when-cross-origin
      set-cookie: csrf-token=39HoZgztDnzjJkq/JuLJMeoKNXlfiVv2YgZc09c3TBOBU4NI6kDXaJH1LdicNhN1UsQWzon4Dor9GWGfopaTEQ==; Path=/; Secure
      x-content-type-options: nosniff
      x-dns-prefetch-control: off
      x-frame-options: DENY
      x-xss-protection: 1; mode=block
      date: Tue, 17 Nov 2020 08:42:10 GMT
      content-type: text/html; charset=utf-8
      set-cookie: 1e2670d92730b515ce3a1bb65da45062=9b714eb87e93cf34853e87a92d6894be; path=/; HttpOnly; Secure; SameSite=None
      cache-control: private
      Copy to Clipboard Toggle word wrap
    4. 次のコマンドを実行して出力を確認し、ポート 443 で各クラスターアプリケーションにアクセスできることを確認します。

      $ curl https://console-openshift-console.apps.<cluster_name>.<base_domain> -I -L --insecure
      Copy to Clipboard Toggle word wrap

      設定が正しい場合、コマンドの出力には次の応答が表示されます。

      HTTP/1.1 200 OK
      referrer-policy: strict-origin-when-cross-origin
      set-cookie: csrf-token=UlYWOyQ62LWjw2h003xtYSKlh1a0Py2hhctw0WmV2YEdhJjFyQwWcGBsja261dGLgaYO0nxzVErhiXt6QepA7g==; Path=/; Secure; SameSite=Lax
      x-content-type-options: nosniff
      x-dns-prefetch-control: off
      x-frame-options: DENY
      x-xss-protection: 1; mode=block
      date: Wed, 04 Oct 2023 16:29:38 GMT
      content-type: text/html; charset=utf-8
      set-cookie: 1e2670d92730b515ce3a1bb65da45062=1bf5e9573c9a2760c964ed1659cc1673; path=/; HttpOnly; Secure; SameSite=None
      cache-control: private
      Copy to Clipboard Toggle word wrap

3.12. DHCP を使用したクラスターノードのホスト名の設定

Red Hat Enterprise Linux CoreOS (RHCOS) マシンでは、NetworkManager がホスト名を設定します。デフォルトでは、DHCP が NetworkManager にホスト名を提供します。これが推奨される方法です。NetworkManager は、次の場合に逆 DNS ルックアップを通じてホスト名を取得します。

  • DHCP がホスト名を提供しない場合
  • カーネル引数を使用してホスト名を設定する場合
  • 別の方法でホスト名を設定する場合

逆 DNS ルックアップは、ノード上でネットワークが初期化された後に実行し、NetworkManager がホスト名を設定するのにかかる時間が長くなる可能性があります。NetworkManager がホスト名を設定する前に他のシステムサービスが起動することがあり、その場合は、それらのサービスが localhost などのデフォルトのホスト名を使用する可能性があります。

ヒント

DHCP を使用して各クラスターノードにホスト名を提供することで、ホスト名の設定の遅延を回避できます。また、DHCP を介してホスト名を設定すると、DNS スプリットホライズンが実装されている環境での手動の DNS レコード名設定エラーを回避できます。

3.13. install-config.yaml ファイルの設定

3.13.1. install-config.yaml ファイルの設定

install-config.yaml ファイルには、追加の詳細情報が必要です。ほとんどの情報は、インストールプログラムと結果として作成されるクラスターに、完全に管理できる使用可能なハードウェアを十分に説明しています。

注記

正しいイメージがリリースペイロードにあるため、インストールプログラムは、clusterOSImage RHCOS イメージを必要としなくなりました。

  1. install-config.yaml を設定します。pullSecretsshKey など、環境に合わせて適切な変数を変更します。

    apiVersion: v1
    baseDomain: <domain>
    metadata:
      name: <cluster_name>
    networking:
      machineNetwork:
      - cidr: <public_cidr>
      networkType: OVNKubernetes
    compute:
    - name: worker
      replicas: 2 
    1
    
    controlPlane:
      name: master
      replicas: 3
      platform:
        baremetal: {}
    platform:
      baremetal:
        apiVIPs:
          - <api_ip>
        ingressVIPs:
          - <wildcard_ip>
        provisioningNetworkCIDR: <CIDR>
        bootstrapExternalStaticIP: <bootstrap_static_ip_address> 
    2
    
        bootstrapExternalStaticGateway: <bootstrap_static_gateway> 
    3
    
        bootstrapExternalStaticDNS: <bootstrap_static_dns> 
    4
    
        hosts:
          - name: openshift-master-0
            role: master
            bmc:
              address: ipmi://<out_of_band_ip> 
    5
    
              username: <user>
              password: <password>
            bootMACAddress: <NIC1_mac_address>
            rootDeviceHints:
             deviceName: "<installation_disk_drive_path>" 
    6
    
          - name: <openshift_master_1>
            role: master
            bmc:
              address: ipmi://<out_of_band_ip>
              username: <user>
              password: <password>
            bootMACAddress: <NIC1_mac_address>
            rootDeviceHints:
             deviceName: "<installation_disk_drive_path>"
          - name: <openshift_master_2>
            role: master
            bmc:
              address: ipmi://<out_of_band_ip>
              username: <user>
              password: <password>
            bootMACAddress: <NIC1_mac_address>
            rootDeviceHints:
             deviceName: "<installation_disk_drive_path>"
          - name: <openshift_worker_0>
            role: worker
            bmc:
              address: ipmi://<out_of_band_ip>
              username: <user>
              password: <password>
            bootMACAddress: <NIC1_mac_address>
          - name: <openshift_worker_1>
            role: worker
            bmc:
              address: ipmi://<out_of_band_ip>
              username: <user>
              password: <password>
            bootMACAddress: <NIC1_mac_address>
            rootDeviceHints:
             deviceName: "<installation_disk_drive_path>"
    pullSecret: '<pull_secret>'
    sshKey: '<ssh_pub_key>'
    Copy to Clipboard Toggle word wrap
    1
    OpenShift Container Platform クラスターの一部であるコンピュートノードの数に基づいて、コンピュートマシンをスケーリングします。replicas 値の有効なオプションは 0 で、2 以上の整数です。3 ノードクラスターのみが含まれる 3 ノードクラスターをデプロイするには、レプリカ数を 0 に設定します。3 ノードクラスターは、テスト、開発、本番に使用できる、より小さく、よりリソース効率の良いクラスターです。コンピュートノードが 1 つだけのクラスターをインストールすることはできません。
    2
    静的 IP アドレスを使用してクラスターをデプロイする場合、ベアメタルネットワークに DHCP サーバーがない場合は、bootstrapExternalStaticIP 設定を設定して、ブートストラップ VM の静的 IP アドレスを指定する必要があります。
    3
    静的 IP アドレスを使用してクラスターをデプロイする場合、ベアメタルネットワークに DHCP サーバーがない場合は、bootstrapExternalStaticGateway 設定を設定して、ブートストラップ仮想マシンのゲートウェイ IP アドレスを指定する必要があります。
    4
    静的 IP アドレスを使用してクラスターをデプロイする場合、ベアメタルネットワークに DHCP サーバーがない場合は、bootstrapExternalStaticDNS 設定を設定して、ブートストラップ仮想マシンの DNS アドレスを指定する必要があります。
    5
    その他のオプションについては、BMC アドレス指定のセクションを参照してください。
    6
    インストールディスクドライブへのパスを設定するには、ディスクのカーネル名を入力します。たとえば、/dev/sda です。
    重要

    ディスクの検出順序は保証されていないため、複数のディスクを持つマシンでは、起動オプションによってディスクのカーネル名が変わる可能性があります。たとえば、/dev/sda/dev/sdb になり、その逆も同様です。この問題を回避するには、ディスクの World Wide Name (WWN) や /dev/disk/by-path/ などの永続的なディスク属性を使用する必要があります。ストレージの場所への /dev/disk/by-path/<device_path> リンクを使用することを推奨します。ディスク WWN を使用するには、deviceName パラメーターを wwnWithExtension パラメーターに置き換えます。使用するパラメーターに応じて、次のいずれかの値を入力します。

    • ディスク名。たとえば、/dev/sda、または /dev/disk/by-path/ です。
    • ディスクの WWN。たとえば、"0x64cd98f04fde100024684cf3034da5c2" です。ディスク WWN 値が 16 進数値ではなく文字列値として使用されるように、ディスク WWN 値を引用符で囲んで入力してください。

    これらの rootDeviceHints パラメーター要件を満たさない場合、次のエラーが発生する可能性があります。

    ironic-inspector inspection failed: No disks satisfied root device hints
    Copy to Clipboard Toggle word wrap
    注記

    OpenShift Container Platform 4.12 より前では、クラスターインストールプログラムが、apiVIP および ingressVIP 設定の IPv4 アドレスまたは IPv6 アドレスのみを受け入れていました。OpenShift Container Platform 4.12 以降では、これらの設定は非推奨です。代わりに、apiVIPs および ingressVIPs 設定でリスト形式を使用して、IPv4 アドレス、IPv6 アドレス、または両方の IP アドレス形式を指定してください。

  2. クラスター設定を保存するディレクトリーを作成します。

    $ mkdir ~/clusterconfigs
    Copy to Clipboard Toggle word wrap
  3. install-config.yaml ファイルを新しいディレクトリーにコピーします。

    $ cp install-config.yaml ~/clusterconfigs
    Copy to Clipboard Toggle word wrap
  4. OpenShift Container Platform クラスターをインストールする前に、すべてのベアメタルノードの電源がオフになっていることを確認します。

    $ ipmitool -I lanplus -U <user> -P <password> -H <management-server-ip> power off
    Copy to Clipboard Toggle word wrap
  5. 以前に試行したデプロイメントにより古いブートストラップリソースが残っている場合は、これを削除します。

    for i in $(sudo virsh list | tail -n +3 | grep bootstrap | awk {'print $2'});
    do
      sudo virsh destroy $i;
      sudo virsh undefine $i;
      sudo virsh vol-delete $i --pool $i;
      sudo virsh vol-delete $i.ign --pool $i;
      sudo virsh pool-destroy $i;
      sudo virsh pool-undefine $i;
    done
    Copy to Clipboard Toggle word wrap

3.13.2. 追加の install-config パラメーター

install-config.yaml ファイルに必要なパラメーター hosts パラメーターおよび bmc パラメーターは、以下の表を参照してください。

Expand
表3.1 必須パラメーター
パラメーターデフォルト説明

baseDomain

 

クラスターのドメイン名。たとえば、example.com です。

bootMode

UEFI

ノードのブートモード。オプションは、legacyUEFI、および UEFISecureBoot です。bootMode が設定されていない場合は、ノードを検査する間に Ironic がこれを設定します。

bootstrapExternalStaticDNS

 

ブートストラップノードの静的ネットワーク DNS。ベアメタルネットワークに Dynamic Host Configuration Protocol (DHCP) サーバーがない場合に、静的 IP アドレスを使用してクラスターをデプロイする場合は、この値を設定する必要があります。この値を設定しないと、インストールプログラムが bootstrapExternalStaticGateway の値を使用します。そのため、ゲートウェイと DNS の IP アドレス値が異なる場合に問題が発生します。

bootstrapExternalStaticIP

 

ブートストラップ VM の静的 IP アドレス。ベアメタルネットワークに DHCP サーバーがない場合に、静的 IP アドレスを使用してクラスターをデプロイする場合は、この値を設定する必要があります。

bootstrapExternalStaticGateway

 

ブートストラップ VM のゲートウェイの静的 IP アドレス。ベアメタルネットワークに DHCP サーバーがない場合に、静的 IP アドレスを使用してクラスターをデプロイする場合は、この値を設定する必要があります。

sshKey

 

sshKey 設定には、コントロールプレーンノードとコンピュートノードにアクセスするために必要な、~/.ssh/id_rsa.pub ファイル内のキーを含めます。通常、このキーは provisioner ノードのキーです。

pullSecret

 

pullSecret 設定には、プロビジョナーノードの準備の際に Install OpenShift on Bare Metal ページからダウンロードしたプルシークレットのコピーが含まれます。

metadata:
    name:
Copy to Clipboard Toggle word wrap
 

OpenShift Container Platform クラスターに指定される名前。たとえば、openshift です。

networking:
    machineNetwork:
    - cidr:
Copy to Clipboard Toggle word wrap
 

外部ネットワークの公開 CIDR (Classless Inter-Domain Routing)。たとえば、10.0.0.0/24 です。

compute:
  - name: worker
Copy to Clipboard Toggle word wrap
 

OpenShift Container Platform クラスターでは、ノードがゼロの場合でも、コンピュートノードに名前を付ける必要があります。

compute:
    replicas: 2
Copy to Clipboard Toggle word wrap
 

replicas は、OpenShift Container Platform クラスターのコンピュートノードの数を設定します。

controlPlane:
    name: master
Copy to Clipboard Toggle word wrap
 

OpenShift Container Platform クラスターでは、コントロールプレーンノードに名前が必要です。

controlPlane:
    replicas: 3
Copy to Clipboard Toggle word wrap
 

replicas は、OpenShift Container Platform クラスターの一部として含まれるコントロールプレーンノードの数を設定します。

provisioningNetworkInterface

 

ベアメタルネットワークに接続されたノード上のネットワークインターフェイス名。OpenShift Container Platform 4.9 以降のリリースのために、NIC の名前を識別するために provisioningNetworkInterface 設定を使用する代わりに、Ironic が NIC の IP アドレスを識別できるように bootMACAddress 設定を使用します。

defaultMachinePlatform

 

プラットフォーム設定なしでマシンプールに使用されるデフォルト設定。

apiVIPs

 

(オプション) Kubernetes API 通信の仮想 IP アドレス。

この設定は、MachineNetwork からの予約済み IP として install-config.yaml ファイルで提供するか、デフォルト名が正しく解決されるように DNS で事前設定する必要があります。install-config.yaml ファイルの apiVIPs 設定に値を追加するときは、FQDN ではなく仮想 IP アドレスを使用します。デュアルスタックネットワークを使用する場合、プライマリー IP アドレスは IPv4 ネットワークからのものにする必要があります。設定されていないと、インストールプログラムは api.<cluster_name>.<base_domain> を使用して DNS から IP アドレスを取得します。

注記

OpenShift Container Platform 4.12 より前では、クラスターのインストールプログラムは apiVIP 設定の IPv4 アドレスまたは IPv6 アドレスのみを受け入れていました。OpenShift Container Platform 4.12 以降から、apiVIP 設定は非推奨になりました。代わりに、apiVIPs 設定のリスト形式を使用して、IPv4 アドレス、IPv6 アドレス、または両方の IP アドレス形式を指定します。

disableCertificateVerification

False

redfish および redfish-virtualmedia では、このパラメーターで BMC アドレスを管理する必要があります。BMC アドレスに自己署名証明書を使用する場合は、値を True にする必要があります。

ingressVIPs

 

(オプション) Ingress トラフィックの仮想 IP アドレス。

この設定は、MachineNetwork からの予約済み IP として install-config.yaml ファイルで提供するか、デフォルト名が正しく解決されるように DNS で事前設定する必要があります。install-config.yaml ファイルの ingressVIPs 構成設定に値を追加するときは、FQDN ではなく仮想 IP アドレスを使用してください。デュアルスタックネットワークを使用する場合、プライマリー IP アドレスは IPv4 ネットワークからのものにする必要があります。設定されていないと、インストールプログラムは test.apps.<cluster_name>.<base_domain> を使用して DNS から IP アドレスを取得します。

注記

OpenShift Container Platform 4.12 より前では、クラスターのインストールプログラムは ingressVIP 設定の IPv4 アドレスまたは IPv6 アドレスのみを受け入れていました。OpenShift Container Platform 4.12 以降では、ingressVIP 設定は非推奨です。代わりに、ingressVIPs 設定のリスト形式を使用して、IPv4 アドレス、IPv6 アドレス、または両方の IP アドレス形式を指定します。

Expand
表3.2 オプションのパラメーター
パラメーターデフォルト説明

provisioningDHCPRange

172.22.0.10,172.22.0.100

プロビジョニングネットワークでノードの IP 範囲を定義します。

provisioningNetworkCIDR

172.22.0.0/24

プロビジョニングに使用するネットワークの CIDR。このオプションは、プロビジョニングネットワークでデフォルトのアドレス範囲を使用しない場合に必要です。

clusterProvisioningIP

provisioningNetworkCIDR の 3 番目の IP アドレス。

プロビジョニングサービスが実行されるクラスター内の IP アドレス。デフォルトは、プロビジョニングサブネットの 3 番目の IP アドレスに設定されます。たとえば、172.22.0.3 です。

bootstrapProvisioningIP

provisioningNetworkCIDR の 2 番目の IP アドレス

インストーラーがコントロールプレーン (マスター) ノードをデプロイしている間にプロビジョニングサービスが実行されるブートストラップ仮想マシンの IP アドレス。デフォルトは、プロビジョニングサブネットの 2 番目の IP アドレスに設定されます。たとえば、172.22.0.2 または 2620:52:0:1307::2 です。

externalBridge

baremetal

ベアメタルネットワークに接続されたハイパーバイザーのベアメタルブリッジの名前。

provisioningBridge

provisioning

プロビジョニングネットワークに接続されている provisioner ホストのプロビジョニングブリッジの名前。

architecture

 

クラスターのホストアーキテクチャーを定義します。有効な値は amd64 または arm64 です。

defaultMachinePlatform

 

プラットフォーム設定なしでマシンプールに使用されるデフォルト設定。

bootstrapOSImage

 

ブートストラップノードのデフォルトのオペレーティングシステムイメージを上書きするための URL。URL にはイメージの SHA-256 ハッシュが含まれている必要があります。たとえば、https://mirror.openshift.com/rhcos-<version>-qemu.qcow2.gz?sha256=<uncompressed_sha256> です。

provisioningNetwork

 

provisioningNetwork 設定は、クラスターがプロビジョニングネットワークを使用するかどうかを決定します。これが存在すると、設定はクラスターがネットワークを管理するかどうかも決定します。

Disabled: プロビジョニングネットワークの要件を無効にするには、このパラメーターを Disabled に設定します。Disabled に設定すると、仮想メディアベースのプロビジョニングのみを使用するか、Assisted Installer を使用してクラスターを起動する必要があります。Disabled にして、電源管理を使用する場合、BMC はベアメタルネットワークからアクセスできる必要があります。Disabled の場合は、プロビジョニングサービスに使用されるベアメタルネットワークで 2 つの IP アドレスを指定する必要があります。

Managed: DHCP、TFTP などを含むプロビジョニングネットワークを完全に管理するには、このパラメーターを Managed (デフォルト) に設定します。

Unmanaged: このパラメーターを Unmanaged に設定してプロビジョニングネットワークを引き続き有効にしますが、DHCP の手動設定を行います。仮想メディアのプロビジョニングが推奨されますが、必要に応じて PXE を引き続き利用できます。

httpProxy

 

このパラメーターを、環境内で使用する適切な HTTP プロキシーに設定します。

httpsProxy

 

このパラメーターを、環境内で使用する適切な HTTPS プロキシーに設定します。

noProxy

 

このパラメーターを、環境内のプロキシーの使用に対する例外のリストに設定します。

3.13.2.1. ホスト

hosts パラメーターは、クラスターのビルドに使用される個別のベアメタルアセットのリストです。

Expand
表3.3 ホスト
名前デフォルト説明

name

 

詳細情報に関連付ける BareMetalHost リソースの名前。たとえば、openshift-master-0 です。

role

 

ベアメタルノードのロール。master (コントロールプレーンノード) または worker (コンピュートノード) のいずれか。

bmc

 

ベースボード管理コントローラーの接続詳細。詳細は、BMC アドレス指定のセクションを参照してください。

bootMACAddress

 

ホストがプロビジョニングネットワークに使用する NIC の MAC アドレス。Ironic は、bootMACAddress 設定を使用して IP アドレスを取得します。次に、ホストにバインドします。

注記

プロビジョニングネットワークを無効にした場合は、ホストから有効な MAC アドレスを提供する必要があります。

networkConfig

 

このオプションのパラメーターを設定して、ホストのネットワークインターフェイスを設定します。詳細は、「(オプション) ホストネットワークインターフェイスの設定」を参照してください。

3.13.3. BMC アドレス指定

ほとんどのベンダーは、Intelligent Platform Management Interface(IPMI) でベースボード管理コントローラー (BMC) アドレスに対応しています。IPMI は通信を暗号化しません。これは、セキュリティーが保護された管理ネットワークまたは専用の管理ネットワークを介したデータセンター内での使用に適しています。ベンダーを確認して、Redfish ネットワークブートをサポートしているかどうかを確認します。Redfish は、コンバージド、ハイブリッド IT および Software Defined Data Center (SDDC) 向けのシンプルでセキュアな管理を行います。Redfish は人による判読が可能、かつ機械対応が可能であり、インターネットや Web サービスの標準を活用して、最新のツールチェーンに情報を直接公開します。ハードウェアが Redfish ネットワークブートに対応していない場合には、IPMI を使用します。

ノードが Registering 状態にある間、インストール中に BMC アドレスを変更できます。ノードの Registering 状態が終了した後に BMC アドレスを変更する必要がある場合は、ノードを Ironic から切断し、BareMetalHost リソースを編集して、ノードを Ironic に再接続する必要があります。詳細は、BareMetalHost リソースの編集 セクションを参照してください。

3.13.3.1. IPMI

IPMI を使用するホストは ipmi://<out-of-band-ip>:<port> アドレス形式を使用します。これは、指定がない場合はポート 623 にデフォルトで設定されます。以下の例は、install-config.yaml ファイル内の IPMI 設定を示しています。

platform:
  baremetal:
    hosts:
      - name: openshift-master-0
        role: master
        bmc:
          address: ipmi://<out-of-band-ip>
          username: <user>
          password: <password>
Copy to Clipboard Toggle word wrap
重要

BMC アドレス指定に IPMI を使用して PXE ブートする場合は、provisioning ネットワークが必要です。provisioning ネットワークなしでは、PXE ブートホストを行うことはできません。provisioning ネットワークなしでデプロイする場合、redfish-virtualmediaidrac-virtualmedia などの仮想メディア BMC アドレス指定オプションを使用する必要があります。詳細は、「HPE iLO の BMC アドレス指定」セクションの「HPE iLO の Redfish 仮想メディア」、または「Dell iDRAC の BMC アドレス指定」セクションの「Dell iDRAC の Redfish 仮想メディア」を参照してください。

3.13.3.2. Redfish ネットワークブート

Redfish を有効にするには、redfish:// または redfish+http:// を使用して TLS を無効にします。インストーラーには、ホスト名または IP アドレスとシステム ID へのパスの両方が必要です。以下の例は、install-config.yaml ファイル内の Redfish 設定を示しています。

platform:
  baremetal:
    hosts:
      - name: openshift-master-0
        role: master
        bmc:
          address: redfish://<out-of-band-ip>/redfish/v1/Systems/1
          username: <user>
          password: <password>
Copy to Clipboard Toggle word wrap

アウトオブバンド管理のアドレスには認証局証明書を用意することを推奨します。ただし、自己署名証明書を使用する場合は、bmc 設定に disableCertificateVerification: True を含める必要があります。以下の例は、install-config.yaml ファイル内の disableCertificateVerification: True 設定パラメーターを使用する Redfish 設定を示しています。

platform:
  baremetal:
    hosts:
      - name: openshift-master-0
        role: master
        bmc:
          address: redfish://<out-of-band-ip>/redfish/v1/Systems/1
          username: <user>
          password: <password>
          disableCertificateVerification: True
Copy to Clipboard Toggle word wrap

3.13.4. Redfish API のサポートの確認

Redfish API を使用してインストールする場合、ベアメタル上で installer-provisioned infrastructure を使用する際に、インストールプログラムはベースボード管理コントローラー (BMC) 上の複数の Redfish エンドポイントを呼び出します。Redfish を使用する場合は、インストール前に BMC がすべての Redfish API をサポートしていることを確認してください。

手順

  1. 次のコマンドを実行して、BMC の IP アドレスまたはホスト名を設定します。

    $ export SERVER=<ip_address> 
    1
    Copy to Clipboard Toggle word wrap
    1
    <ip_address> を、BMC の IP アドレスまたはホスト名に置き換えます。
  2. 次のコマンドを実行して、システムの ID を設定します。

    $ export SystemID=<system_id> 
    1
    Copy to Clipboard Toggle word wrap
    1
    <system_id> をシステム ID に置き換えます。たとえば、System.Embedded.1 または 1 です。詳細は、以下のベンダー固有 BMC セクションを参照してください。

Redfish API のリスト

  1. 次のコマンドを実行して、power on のサポートを確認します。

    $ curl -u $USER:$PASS -X POST -H'Content-Type: application/json' -H'Accept: application/json' -d '{"ResetType": "On"}' https://$SERVER/redfish/v1/Systems/$SystemID/Actions/ComputerSystem.Reset
    Copy to Clipboard Toggle word wrap
  2. 次のコマンドを実行して、power off のサポートを確認します。

    $ curl -u $USER:$PASS -X POST -H'Content-Type: application/json' -H'Accept: application/json' -d '{"ResetType": "ForceOff"}' https://$SERVER/redfish/v1/Systems/$SystemID/Actions/ComputerSystem.Reset
    Copy to Clipboard Toggle word wrap
  3. 次のコマンドを実行して、pxe を使用する一時的なブート実装を確認します。

    $ curl -u $USER:$PASS -X PATCH -H "Content-Type: application/json" -H "If-Match: <ETAG>"  https://$Server/redfish/v1/Systems/$SystemID/ -d '{"Boot": {"BootSourceOverrideTarget": "pxe", "BootSourceOverrideEnabled": "Once"}}
    Copy to Clipboard Toggle word wrap
  4. 次のコマンドを実行して、Legacy または UEFI を使用するファームウェアブートモードの設定ステータスを確認します。

    $ curl -u $USER:$PASS -X PATCH -H "Content-Type: application/json" -H "If-Match: <ETAG>"  https://$Server/redfish/v1/Systems/$SystemID/ -d '{"Boot": {"BootSourceOverrideMode":"UEFI"}}
    Copy to Clipboard Toggle word wrap

Redfish 仮想メディア API のリスト

  1. 次のコマンドを実行して、cd または dvd を使用する一時ブートデバイスを設定できるか確認します。

    $ curl -u $USER:$PASS -X PATCH -H "Content-Type: application/json" -H "If-Match: <ETAG>" https://$Server/redfish/v1/Systems/$SystemID/ -d '{"Boot": {"BootSourceOverrideTarget": "cd", "BootSourceOverrideEnabled": "Once"}}'
    Copy to Clipboard Toggle word wrap
  2. 仮想メディアは、ハードウェアに応じて POST または PATCH を使用する場合があります。次のいずれかのコマンドを実行して、仮想メディアをマウントできるかどうかを確認します。

    $ curl -u $USER:$PASS -X POST -H "Content-Type: application/json" https://$Server/redfish/v1/Managers/$ManagerID/VirtualMedia/$VmediaId -d '{"Image": "https://example.com/test.iso", "TransferProtocolType": "HTTPS", "UserName": "", "Password":""}'
    Copy to Clipboard Toggle word wrap
    $ curl -u $USER:$PASS -X PATCH -H "Content-Type: application/json" -H "If-Match: <ETAG>" https://$Server/redfish/v1/Managers/$ManagerID/VirtualMedia/$VmediaId -d '{"Image": "https://example.com/test.iso", "TransferProtocolType": "HTTPS", "UserName": "", "Password":""}'
    Copy to Clipboard Toggle word wrap
注記

Redfish API の PowerOn および PowerOff コマンドは、Redfish 仮想メディア API と同じです。一部のハードウェアでは、VirtualMedia リソースが Managers/$ManagerID ではなく Systems/$SystemID にのみ存在する場合があります。VirtualMedia リソースの場合、UserNamePassword のフィールドはオプションです。

重要

TransferProtocolTypes でサポートされているパラメータータイプは、HTTPSHTTP のみです。

3.13.5. Dell iDRAC の BMC アドレス指定

bmc エントリーの address 設定は、URL スキーム内のコントローラーのタイプとネットワーク上の場所を含む、OpenShift Container Platform クラスターノードに接続するための URL です。各 bmc エントリーの username 設定では、Administrator 権限を持つユーザーを指定する必要があります。

platform:
  baremetal:
    hosts:
      - name: <hostname>
        role: <master | worker>
        bmc:
          address: <address> 
1

          username: <user> 
2

          password: <password>
Copy to Clipboard Toggle word wrap
1
address 設定ではプロトコルを指定します。
2
username 設定では、Administrator 権限を持つユーザーを指定する必要があります。

Dell ハードウェアの場合、Red Hat は統合 Dell Remote Access Controller (iDRAC) 仮想メディア、Redfish ネットワークブート、および IPMI をサポートします。

3.13.5.1. Dell iDRAC の BMC アドレス形式
Expand
プロトコルアドレスのフォーマット

iDRAC 仮想メディア

idrac-virtualmedia://<out_of_band_ip>/redfish/v1/Systems/System.Embedded.1

Redfish ネットワークブート

redfish://<out_of_band_ip>/redfish/v1/Systems/System.Embedded.1

IPMI

ipmi://<out_of_band_ip>

重要

idrac-virtualmedia を Redfish 仮想メディアのプロトコルとして使用します。redfish-virtualmedia は Dell ハードウェアでは機能しません。Dell の idrac-virtualmedia は、Dell の OEM 拡張機能が含まれる Redfish 標準を使用します。

詳細は、以下のセクションを参照してください。

3.13.5.2. Dell iDRAC の Redfish 仮想メディア

Dell サーバーの Redfish 仮想メディアについては、address 設定で idrac-virtualmedia:// を使用します。redfish-virtualmedia:// を使用しても機能しません。

注記

idrac-virtualmedia:// を Redfish 仮想メディアのプロトコルとして使用します。redfish-virtualmedia:// の使用は、idrac-virtualmedia:// プロトコルが idrac ハードウェアタイプおよび Ironic の Redfish プロトコルに対応しているため、Dell ハードウェアでは機能しません。Dell の idrac-virtualmedia:// プロトコルは、Dell の OEM 拡張機能が含まれる Redfish 標準を使用します。Ironic は、WSMAN プロトコルのある idrac タイプもサポートします。したがって、Dell ハードウェア上の仮想メディアで Redfish を使用する際に予期しない動作を回避するために、idrac-virtualmedia:// を指定する必要があります。

以下の例は、install-config.yaml ファイル内で iDRAC 仮想メディアを使用する方法を示しています。

platform:
  baremetal:
    hosts:
      - name: openshift-master-0
        role: master
        bmc:
          address: idrac-virtualmedia://<out_of_band_ip>/redfish/v1/Systems/System.Embedded.1
          username: <user>
          password: <password>
Copy to Clipboard Toggle word wrap

アウトバウンド管理のアドレスに認証局の証明書を使用することが推奨されますが、自己署名証明書を使用する場合には、bmc 設定に disableCertificateVerification: True を含める必要があります。

注記

OpenShift Container Platform クラスターノードについて、iDRAC コンソールで AutoAttach が有効にされていることを確認します。メニューパスは ConfigurationVirtual MediaAttach ModeAutoAttach です。

次の例は、install-config.yaml ファイル内の disableCertificateVerification: True 設定パラメーターを使用した Redfish 設定を示しています。

platform:
  baremetal:
    hosts:
      - name: openshift-master-0
        role: master
        bmc:
          address: idrac-virtualmedia://<out_of_band_ip>/redfish/v1/Systems/System.Embedded.1
          username: <user>
          password: <password>
          disableCertificateVerification: True
Copy to Clipboard Toggle word wrap
3.13.5.3. iDRAC の Redfish ネットワークブート

Redfish を有効にするには、redfish:// または redfish+http:// を使用してトランスポート層セキュリティー (TLS) を無効にします。インストールプログラムにより、ホスト名または IP アドレスとシステム ID へのパスが求められます。以下の例は、install-config.yaml ファイル内の Redfish 設定を示しています。

platform:
  baremetal:
    hosts:
      - name: openshift-master-0
        role: master
        bmc:
          address: redfish://<out_of_band_ip>/redfish/v1/Systems/System.Embedded.1
          username: <user>
          password: <password>
Copy to Clipboard Toggle word wrap

アウトオブバンド管理のアドレスには認証局証明書を用意することを推奨します。ただし、自己署名証明書を使用する場合は、bmc 設定に disableCertificateVerification: True を含める必要があります。次の例は、install-config.yaml ファイル内の disableCertificateVerification: True 設定パラメーターを使用した Redfish 設定を示しています。

platform:
  baremetal:
    hosts:
      - name: openshift-master-0
        role: master
        bmc:
          address: redfish://<out_of_band_ip>/redfish/v1/Systems/System.Embedded.1
          username: <user>
          password: <password>
          disableCertificateVerification: True
Copy to Clipboard Toggle word wrap
注記

ファームウェアバージョン 04.40.00.00 を使用する Dell iDRAC 9 と、ベアメタルデプロイメントで installer-provisioned installation 用の 5.xx シリーズを含むすべてのリリースには既知の問題があります。Virtual Console プラグインは、HTML5 の拡張バージョンである eHTML5 にデフォルト設定されているため、InsertVirtualMedia ワークフローで問題が発生します。この問題を回避するには、HTML5 を使用するようにプラグインを設定します。メニューパスは以下の通りです。ConfigurationVirtual consolePlug-in TypeHTML5

OpenShift Container Platform クラスターノードについて、iDRAC コンソールで AutoAttach が有効にされていることを確認します。メニューパスは以下のようになります。ConfigurationVirtual MediaAttach ModeAutoAttach

3.13.6. HPE iLO の BMC アドレス指定

それぞれの bmc エントリーの address フィールドは、URL スキーム内のコントローラーのタイプやネットワーク上のその場所を含む、OpenShift Container Platform クラスターノードに接続する URL です。

platform:
  baremetal:
    hosts:
      - name: <hostname>
        role: <master | worker>
        bmc:
          address: <address> 
1

          username: <user>
          password: <password>
Copy to Clipboard Toggle word wrap
1
address 設定はプロトコルを指定します。

HPE integrated Lights Out (iLO) の場合、Red Hat は Redfish 仮想メディア、Redfish ネットワークブート、および IPMI をサポートします。

Expand
表3.4 HPE iLO の BMC アドレス形式
プロトコルアドレスのフォーマット

Redfish 仮想メディア

redfish-virtualmedia://<out-of-band-ip>/redfish/v1/Systems/1

Redfish ネットワークブート

redfish://<out-of-band-ip>/redfish/v1/Systems/1

IPMI

ipmi://<out-of-band-ip>

詳細は、以下のセクションを参照してください。

3.13.6.1. HPE iLO の Redfish 仮想メディア

HPE サーバーの Redfish 仮想メディアを有効にするには、address 設定で redfish-virtualmedia:// を使用します。以下の例は、install-config.yaml ファイル内で Redfish 仮想メディアを使用する方法を示しています。

platform:
  baremetal:
    hosts:
      - name: openshift-master-0
        role: master
        bmc:
          address: redfish-virtualmedia://<out-of-band-ip>/redfish/v1/Systems/1
          username: <user>
          password: <password>
Copy to Clipboard Toggle word wrap

アウトオブバンド管理のアドレスには認証局証明書を用意することを推奨します。ただし、自己署名証明書を使用する場合は、bmc 設定に disableCertificateVerification: True を含める必要があります。以下の例は、install-config.yaml ファイル内の disableCertificateVerification: True 設定パラメーターを使用する Redfish 設定を示しています。

platform:
  baremetal:
    hosts:
      - name: openshift-master-0
        role: master
        bmc:
          address: redfish-virtualmedia://<out-of-band-ip>/redfish/v1/Systems/1
          username: <user>
          password: <password>
          disableCertificateVerification: True
Copy to Clipboard Toggle word wrap
注記

Ironic は、仮想メディアで iLO4 をサポートしないので、Redfish 仮想メディアは、iLO4 を実行する第 9 世代のシステムではサポートされません。

3.13.6.2. HPE iLO の Redfish ネットワークブート

Redfish を有効にするには、redfish:// または redfish+http:// を使用して TLS を無効にします。インストーラーには、ホスト名または IP アドレスとシステム ID へのパスの両方が必要です。以下の例は、install-config.yaml ファイル内の Redfish 設定を示しています。

platform:
  baremetal:
    hosts:
      - name: openshift-master-0
        role: master
        bmc:
          address: redfish://<out-of-band-ip>/redfish/v1/Systems/1
          username: <user>
          password: <password>
Copy to Clipboard Toggle word wrap

アウトオブバンド管理のアドレスには認証局証明書を用意することを推奨します。ただし、自己署名証明書を使用する場合は、bmc 設定に disableCertificateVerification: True を含める必要があります。以下の例は、install-config.yaml ファイル内の disableCertificateVerification: True 設定パラメーターを使用する Redfish 設定を示しています。

platform:
  baremetal:
    hosts:
      - name: openshift-master-0
        role: master
        bmc:
          address: redfish://<out-of-band-ip>/redfish/v1/Systems/1
          username: <user>
          password: <password>
          disableCertificateVerification: True
Copy to Clipboard Toggle word wrap

3.13.7. Fujitsu iRMC の BMC アドレス指定

それぞれの bmc エントリーの address フィールドは、URL スキーム内のコントローラーのタイプやネットワーク上のその場所を含む、OpenShift Container Platform クラスターノードに接続する URL です。

platform:
  baremetal:
    hosts:
      - name: <hostname>
        role: <master | worker>
        bmc:
          address: <address> 
1

          username: <user>
          password: <password>
Copy to Clipboard Toggle word wrap
1
address 設定はプロトコルを指定します。

Fujitsu ハードウェアの場合、Red Hat は、統合 Remote Management Controller (iRMC) および IPMI をサポートします。

Expand
表3.5 Fujitsu iRMC の BMC アドレス形式
プロトコルアドレスのフォーマット

iRMC

irmc://<out-of-band-ip>

IPMI

ipmi://<out-of-band-ip>

iRMC

Fujitsu ノードは irmc://<out-of-band-ip> を使用し、デフォルトではポート 443 に設定されます。以下の例は、install-config.yaml ファイル内の iRMC 設定を示しています。

platform:
  baremetal:
    hosts:
      - name: openshift-master-0
        role: master
        bmc:
          address: irmc://<out-of-band-ip>
          username: <user>
          password: <password>
Copy to Clipboard Toggle word wrap
注記

現在 Fujitsu は、ベアメタルへの installer-provisioned installation 用に iRMC S5 ファームウェアバージョン 3.05P 以降をサポートしています。

3.13.8. Cisco CIMC の BMC アドレス指定

それぞれの bmc エントリーの address フィールドは、URL スキーム内のコントローラーのタイプやネットワーク上のその場所を含む、OpenShift Container Platform クラスターノードに接続する URL です。

platform:
  baremetal:
    hosts:
      - name: <hostname>
        role: <master | worker>
        bmc:
          address: <address> 
1

          username: <user>
          password: <password>
Copy to Clipboard Toggle word wrap
1
address 設定はプロトコルを指定します。

Cisco UCS UCSX-210C-M6 ハードウェアの場合、Red Hat は Cisco Integrated Management Controller (CIMC) をサポートします。

Expand
表3.6 Cisco CIMC の BMC アドレス形式
プロトコルアドレスのフォーマット

Redfish 仮想メディア

redfish-virtualmedia://<server_kvm_ip>/redfish/v1/Systems/<serial_number>

Cisco UCS UCSX-210C-M6 ハードウェアの Redfish 仮想メディアを有効にするには、address 設定で redfish-virtualmedia:// を使用します。以下の例は、install-config.yaml ファイル内で Redfish 仮想メディアを使用する方法を示しています。

platform:
  baremetal:
    hosts:
      - name: openshift-master-0
        role: master
        bmc:
          address: redfish-virtualmedia://<server_kvm_ip>/redfish/v1/Systems/<serial_number>
          username: <user>
          password: <password>
Copy to Clipboard Toggle word wrap

アウトオブバンド管理のアドレスには認証局証明書を用意することを推奨します。ただし、自己署名証明書を使用する場合は、bmc 設定に disableCertificateVerification: True を含める必要があります。次の例は、install-config.yaml ファイル内の disableCertificateVerification: True 設定パラメーターを使用した Redfish 設定を示しています。

platform:
  baremetal:
    hosts:
      - name: openshift-master-0
        role: master
        bmc:
          address: redfish-virtualmedia://<server_kvm_ip>/redfish/v1/Systems/<serial_number>
          username: <user>
          password: <password>
          disableCertificateVerification: True
Copy to Clipboard Toggle word wrap

3.13.9. ルートデバイスのヒント

rootDeviceHints パラメーターは、インストーラーが Red Hat Enterprise Linux CoreOS (RHCOS) イメージを特定のデバイスにプロビジョニングできるようにします。インストーラーは、検出順にデバイスを検査し、検出された値をヒントの値と比較します。インストーラーは、ヒント値に一致する最初に検出されたデバイスを使用します。この設定は複数のヒントを組み合わせることができますが、デバイスは、インストーラーがこれを選択できるようにすべてのヒントに一致する必要があります。

Expand
表3.7 サブフィールド
サブフィールド説明

deviceName

/dev/vda/dev/disk/by-path/ などの Linux デバイス名を含む文字列。

注記

ストレージの場所への /dev/disk/by-path/<device_path> リンクを使用することを推奨します。

ヒントは、実際の値と完全に一致する必要があります。

hctl

0:0:0:0 などの SCSI バスアドレスを含む文字列。ヒントは、実際の値と完全に一致する必要があります。

model

ベンダー固有のデバイス識別子を含む文字列。ヒントは、実際の値のサブ文字列になります。

vendor

デバイスのベンダーまたは製造元の名前が含まれる文字列。ヒントは、実際の値のサブ文字列になります。

serialNumber

デバイスのシリアル番号を含む文字列。ヒントは、実際の値と完全に一致する必要があります。

minSizeGigabytes

デバイスの最小サイズ (ギガバイト単位) を表す整数。

wwn

一意のストレージ ID を含む文字列。ヒントは、実際の値と完全に一致する必要があります。

wwnWithExtension

ベンダー拡張が追加された一意のストレージ ID を含む文字列。ヒントは、実際の値と完全に一致する必要があります。

wwnVendorExtension

一意のベンダーストレージ ID を含む文字列。ヒントは、実際の値と完全に一致する必要があります。

rotational

デバイスがローテーションするディスクである (true) か、そうでないか (false) を示すブール値。

使用例

     - name: master-0
       role: master
       bmc:
         address: ipmi://10.10.0.3:6203
         username: admin
         password: redhat
       bootMACAddress: de:ad:be:ef:00:40
       rootDeviceHints:
         deviceName: "/dev/sda"
Copy to Clipboard Toggle word wrap

3.13.10. オプション: プロキシー設定の設定

プロキシーを使用して OpenShift Container Platform クラスターをデプロイするには、install-config.yaml ファイルに以下の変更を加えます。

apiVersion: v1
baseDomain: <domain>
proxy:
  httpProxy: http://USERNAME:PASSWORD@proxy.example.com:PORT
  httpsProxy: https://USERNAME:PASSWORD@proxy.example.com:PORT
  noProxy: <WILDCARD_OF_DOMAIN>,<PROVISIONING_NETWORK/CIDR>,<BMC_ADDRESS_RANGE/CIDR>
Copy to Clipboard Toggle word wrap

以下は、値を含む noProxy の例です。

noProxy: .example.com,172.22.0.0/24,10.10.0.0/24
Copy to Clipboard Toggle word wrap

プロキシーを有効な状態にして、対応するキー/値のペアでプロキシーの適切な値を設定します。

主な留意事項:

  • プロキシーに HTTPS プロキシーがない場合、httpsProxy の値を https:// から http:// に変更します。
  • provisioning ネットワークを使用する場合、これを noProxy 設定に含めます。そうしない場合、インストーラーは失敗します。
  • プロビジョナーノード内の環境変数としてすべてのプロキシー設定を設定します。たとえば、HTTP_PROXYHTTPS_PROXY、および NO_PROXY が含まれます。
注記

IPv6 でプロビジョニングする場合、noProxy 設定で CIDR アドレスブロックを定義することはできません。各アドレスを個別に定義する必要があります。

3.13.11. オプション: プロビジョニングネットワークを使用しないデプロイ

provisioning ネットワークなしに OpenShift Container Platform をデプロイするには、install-config.yaml ファイルに以下の変更を加えます。

platform:
  baremetal:
    apiVIPs:
      - <api_VIP>
    ingressVIPs:
      - <ingress_VIP>
    provisioningNetwork: "Disabled" 
1
Copy to Clipboard Toggle word wrap
1
provisioningNetwork 設定を追加して、必要な場合はこれを Disabled に設定します。
重要

PXE ブートには provisioning ネットワークが必要です。provisioning ネットワークなしでデプロイする場合、redfish-virtualmediaidrac-virtualmedia などの仮想メディア BMC アドレス指定オプションを使用する必要があります。詳細は、「HPE iLO の BMC アドレス指定」セクションの「HPE iLO の Redfish 仮想メディア」、または「Dell iDRAC の BMC アドレス指定」セクションの「Dell iDRAC の Redfish 仮想メディア」を参照してください。

3.13.12. デュアルスタックネットワークを使用した IP アドレス指定のデプロイ

ブートストラップ仮想マシン(VM)のデュアルスタックネットワークを使用した IP アドレス指定をデプロイする場合、ブートストラップ仮想マシンは 1 つの IP バージョンで機能します。

注記

以下は DHCP 用です。DHCP ベースのデュアルスタッククラスターは、毎日 1 日に 1 つの IPv4 および 1 つの IPv6 仮想 IP アドレス(VIP)を使用してデプロイできます。

静的 IP アドレスを使用してクラスターをデプロイするには、ブートストラップ VM、API、および Ingress VIP の IP アドレスを設定する必要があります。install-config で静的 IP セットを使用してデュアルスタックを設定するには、API と Ingress 用にそれぞれ 1 つの VIP が必要です。デプロイ後にセカンダリー VIP を追加します。

OpenShift Container Platform クラスターのデュアルスタックネットワークでは、クラスターノードの IPv4 および IPv6 アドレスエンドポイントを設定できます。クラスターノードの IPv4 および IPv6 アドレスエンドポイントを設定するには、install-config.yaml ファイルで machineNetworkclusterNetwork、および serviceNetwork 設定を編集します。それぞれの設定には、それぞれ 2 つの CIDR エントリーが必要です。プライマリーアドレスファミリーとして IPv4 ファミリーを持つクラスターの場合は、最初に IPv4 設定を指定します。プライマリーアドレスファミリーとして IPv6 ファミリーを持つクラスターの場合は、最初に IPv6 設定を指定します。

クラスターノードの IPv4 および IPv6 アドレスエンドポイントを含む NMState YAML 設定ファイルの例

machineNetwork:
- cidr: {{ extcidrnet }}
- cidr: {{ extcidrnet6 }}
clusterNetwork:
- cidr: 10.128.0.0/14
  hostPrefix: 23
- cidr: fd02::/48
  hostPrefix: 64
serviceNetwork:
- 172.30.0.0/16
- fd03::/112
Copy to Clipboard Toggle word wrap

重要

ベアメタルプラットフォームで、install-config.yaml ファイルの networkConfig セクションで NMState 設定を指定した場合は、クラスターをデュアルスタックネットワークにデプロイできない問題を解決するために、interfaces.wait-ip: ipv4+ipv6 を NMState YAML ファイルに追加し、あし。

wait-ip パラメーターを含む NMState YAML 設定ファイルの例

networkConfig:
  nmstate:
    interfaces:
    - name: <interface_name>
# ...
      wait-ip: ipv4+ipv6
# ...
Copy to Clipboard Toggle word wrap

IPv4 および IPv6 アドレスを使用するアプリケーションのクラスターへのインターフェイスを提供するには、Ingress VIP および API VIP サービスの IPv4 および IPv6 仮想 IP (VIP) アドレスエンドポイントを設定します。IPv4 および IPv6 アドレスエンドポイントを設定するには、install-config.yaml ファイルで apiVIPs および ingressVIPs 設定を編集します。apiVIPs および ingressVIPs 設定では、リスト形式を使用します。リストの順序は、各サービスのプライマリーおよびセカンダリー VIP アドレスを示しています。

platform:
  baremetal:
    apiVIPs:
      - <api_ipv4>
      - <api_ipv6>
    ingressVIPs:
      - <wildcard_ipv4>
      - <wildcard_ipv6>
Copy to Clipboard Toggle word wrap
注記

デュアルスタックネットワーク設定のクラスターの場合、IPv4 アドレスと IPv6 アドレスの両方を同じインターフェイスに割り当てる必要があります。

3.13.13. オプション: ホストネットワークインターフェイスの設定

インストールの前に、install-config.yaml ファイルで networkConfig 設定を設定し、NMState を使用してホストネットワークインターフェイスを設定できます。

この機能の最も一般的な使用例は、ベアメタルネットワークで静的 IP アドレスを指定することですが、ストレージネットワークなどの他のネットワークを設定することもできます。この機能は、VLAN、VXLAN、ブリッジ、ボンド、ルート、MTU、DNS リゾルバー設定など、他の NMState 機能をサポートします。

警告

クラスターの DNS リゾルバー設定で、サポートされていない rotate オプションを設定しないでください。このオプションは、内部 API の DNS 解決機能を妨害します。

前提条件

  • 静的 IP アドレスを持つ各ノードの有効なホスト名で PTR DNS レコードを設定する。
  • NMState CLI (nmstate) をインストールする。
重要

プロビジョニングネットワークを使用する場合は、Ironic の dnsmasq ツールを使用して設定してください。完全に静的なデプロイメントを行うには、仮想メディアを使用する必要があります。

手順

  1. オプション: インストールプログラムは NMState YAML 構文をチェックしないため、install-config.yaml ファイルに NMState 構文を含める前に、nmstatectl gc を使用して NMState 構文をテストすることを検討してください。

    注記

    YAML 構文にエラーがあると、ネットワーク設定の適用に失敗する可能性があります。YAML 構文を検証して管理することは、デプロイ後に Kubernetes NMState を使用して変更を適用するときや、クラスターを拡張するときに役立ちます。

    1. NMState YAML ファイルを作成します。

      interfaces: 
      1
      
      - name: <nic1_name>
        type: ethernet
        state: up
        ipv4:
          address:
          - ip: <ip_address>
            prefix-length: 24
          enabled: true
      dns-resolver:
        config:
          server:
          - <dns_ip_address>
      routes:
        config:
        - destination: 0.0.0.0/0
          next-hop-address: <next_hop_ip_address>
          next-hop-interface: <next_hop_nic1_name>
      Copy to Clipboard Toggle word wrap
      1
      <nic1_name><ip_address><dns_ip_address><next_hop_ip_address>、および <next_hop_nic1_name> を適切な値に置き換えます。
    2. 次のコマンドを実行して、設定ファイルをテストします。

      $ nmstatectl gc <nmstate_yaml_file>
      Copy to Clipboard Toggle word wrap

      <nmstate_yaml_file> を設定ファイル名に置き換えます。

  2. install-config.yaml ファイル内のホストに NMState 設定を追加して、networkConfig 設定を使用します。

        hosts:
          - name: openshift-master-0
            role: master
            bmc:
              address: redfish+http://<out_of_band_ip>/redfish/v1/Systems/
              username: <user>
              password: <password>
              disableCertificateVerification: null
            bootMACAddress: <NIC1_mac_address>
            bootMode: UEFI
            rootDeviceHints:
              deviceName: "/dev/sda"
            networkConfig: 
    1
    
              interfaces: 
    2
    
              - name: <nic1_name>
                type: ethernet
                state: up
                ipv4:
                  address:
                  - ip: <ip_address>
                    prefix-length: 24
                  enabled: true
              dns-resolver:
                config:
                  server:
                  - <dns_ip_address>
              routes:
                config:
                - destination: 0.0.0.0/0
                  next-hop-address: <next_hop_ip_address>
                  next-hop-interface: <next_hop_nic1_name>
    Copy to Clipboard Toggle word wrap
    1
    NMState YAML 構文を追加して、ホストインターフェイスを設定します。
    2
    <nic1_name><ip_address><dns_ip_address><next_hop_ip_address>、および <next_hop_nic1_name> を適切な値に置き換えます。
    重要

    クラスターをデプロイした後、install-config.yaml ファイルの networkConfig 設定を変更して、ホストネットワークインターフェイスを変更することはできません。Kubernetes NMState Operator を使用して、デプロイ後にホストネットワークインターフェイスに変更を加えます。

3.13.14. サブネット用のホストネットワークインターフェイスの設定

エッジコンピューティングのシナリオでは、コンピュートノードをエッジの近くに配置することが有益な場合があります。サブネット内のリモートノードを見つけるために、コントロールプレーンサブネットやローカルコンピュートノードに使用したものとは異なるネットワークセグメントまたはサブネットをリモートノードに使用できます。エッジコンピューティングシナリオ用にサブネットを設定することで、エッジのレイテンシーが短縮され、拡張性が向上します。

重要

デフォルトのロードバランサー OpenShiftManagedDefault を使用してリモートノードを OpenShift Container Platform クラスターに追加する場合は、すべてのコントロールプレーンノードが同じサブネット内で実行されている必要があります。複数のサブネットを使用する場合、マニフェストを使用して、コントロールプレーンノード上で実行されるように Ingress VIP を設定することもできます。詳細は、「コントロールプレーンで実行するネットワークコンポーネントの設定」を参照してください。

「サブネット間の通信を確立する」セクションの説明どおりにリモートノードに異なるネットワークセグメントまたはサブネットを確立した場合、ワーカーが静的 IP アドレス、ボンディング、またはその他の高度なネットワークを使用している場合は、machineNetwork 設定でサブネットを指定する必要があります。各リモートノードの networkConfig パラメーターでノード IP アドレスを設定する場合、静的 IP アドレスを使用する際に、コントロールプレーンノードを含むサブネットのゲートウェイと DNS サーバーも指定する必要があります。これにより、リモートノードがコントロールプレーンを含むサブネットに到達し、コントロールプレーンからネットワークトラフィックを受信できるようになります。

注記

複数のサブネットを持つクラスターをデプロイするには、redfish-virtualmediaidrac-virtualmedia などの仮想メディアを使用する必要があります。リモートノードがローカルプロビジョニングネットワークにアクセスできないためです。

手順

  1. 静的 IP アドレスを使用する場合は、install-config.yaml ファイルの machineNetwork にサブネットを追加します。

    networking:
      machineNetwork:
      - cidr: 10.0.0.0/24
      - cidr: 192.168.0.0/24
      networkType: OVNKubernetes
    Copy to Clipboard Toggle word wrap
  2. 静的 IP アドレスまたはボンディングなどの高度なネットワークを使用する場合は、NMState 構文を使用して、各エッジコンピュートノードの networkConfig パラメーターにゲートウェイと DNS 設定を追加します。

    networkConfig:
      interfaces:
      - name: <interface_name> 
    1
    
        type: ethernet
        state: up
        ipv4:
          enabled: true
          dhcp: false
          address:
          - ip: <node_ip> 
    2
    
            prefix-length: 24
          gateway: <gateway_ip> 
    3
    
      dns-resolver:
        config:
          server:
          - <dns_ip> 
    4
    Copy to Clipboard Toggle word wrap
    1
    <interface_name> をインターフェイス名に置き換えます。
    2
    <node_ip> をノードの IP アドレスに置き換えます。
    3
    <gateway_ip> をゲートウェイの IP アドレスに置き換えます。
    4
    <dns_ip> を DNS サーバーの IP アドレスに置き換えます。

Stateless Address AutoConfiguration (SLAAC) を使用するデュアルスタッククラスターの場合は、ipv6.addr-gen-mode ネットワーク設定のグローバル値を指定する必要があります。NMState を使用してこの値を設定し、RAM ディスクとクラスター設定ファイルを設定できます。これらの場所で一貫した ipv6.addr-gen-mode を設定しないと、クラスター内の CSR リソースと BareMetalHost リソース間で IPv6 アドレスの不一致が発生する可能性があります。

前提条件

  • NMState CLI (nmstate) をインストールする。

手順

  1. オプション: インストールプログラムは NMState YAML 構文をチェックしないため、install-config.yaml ファイルに含める前に nmstatectl gc コマンドを使用して NMState YAML 構文をテストすることを検討してください。

    1. NMState YAML ファイルを作成します。

      interfaces:
      - name: eth0
        ipv6:
          addr-gen-mode: <address_mode> 
      1
      Copy to Clipboard Toggle word wrap
      1
      <address_mode> を、クラスター内の IPv6 アドレスに必要なアドレス生成モードのタイプに置き換えます。有効な値は、eui64stable-privacy、または random です。
    2. 次のコマンドを実行して、設定ファイルをテストします。

      $ nmstatectl gc <nmstate_yaml_file> 
      1
      Copy to Clipboard Toggle word wrap
      1
      <nmstate_yaml_file> を、テスト設定ファイルの名前に置き換えます。
  2. NMState 設定を、install-config.yaml ファイル内の hosts.networkConfig セクションに追加します。

        hosts:
          - name: openshift-master-0
            role: master
            bmc:
              address: redfish+http://<out_of_band_ip>/redfish/v1/Systems/
              username: <user>
              password: <password>
              disableCertificateVerification: null
            bootMACAddress: <NIC1_mac_address>
            bootMode: UEFI
            rootDeviceHints:
              deviceName: "/dev/sda"
            networkConfig:
              interfaces:
              - name: eth0
                ipv6:
                  addr-gen-mode: <address_mode> 
    1
    
    ...
    Copy to Clipboard Toggle word wrap
    1
    <address_mode> を、クラスター内の IPv6 アドレスに必要なアドレス生成モードのタイプに置き換えます。有効な値は、eui64stable-privacy、または random です。

3.13.16. デュアルポート NIC 用のホストネットワークインターフェイスの設定

インストール前に、install-config.yaml ファイルで networkConfig を設定し、NMState を使用してデュアルポートネットワークインターフェイスコントローラー (NIC) をサポートすることで、ホストネットワークインターフェイスを設定できます。

重要

SR-IOV デバイスの NIC パーティショニングの有効化に関連する Day 1 操作のサポートは、テクノロジープレビュー機能のみです。テクノロジープレビュー機能は、Red Hat 製品のサービスレベルアグリーメント (SLA) の対象外であり、機能的に完全ではないことがあります。Red Hat は、実稼働環境でこれらを使用することを推奨していません。テクノロジープレビュー機能は、最新の製品機能をいち早く提供して、開発段階で機能のテストを行い、フィードバックを提供していただくことを目的としています。

Red Hat のテクノロジープレビュー機能のサポート範囲に関する詳細は、テクノロジープレビュー機能のサポート範囲 を参照してください。

OpenShift Virtualization は以下のボンドモードのみをサポートします。

  • mode=1 active-backup
  • mode=2 balance-xor
  • mode=4 802.3ad

前提条件

  • 静的 IP アドレスを持つ各ノードの有効なホスト名で PTR DNS レコードを設定する。
  • NMState CLI (nmstate) をインストールする。
注記

YAML 構文にエラーがあると、ネットワーク設定の適用に失敗する可能性があります。YAML 構文を検証して管理することは、デプロイ後に Kubernetes NMState を使用して変更を適用するときや、クラスターを拡張するときに役立ちます。

手順

  1. install-config.yaml ファイル内のホストの networkConfig フィールドに NMState 設定を追加します。

        hosts:
          - name: worker-0
            role: worker
            bmc:
              address: redfish+http://<out_of_band_ip>/redfish/v1/Systems/
              username: <user>
              password: <password>
              disableCertificateVerification: false
            bootMACAddress: <NIC1_mac_address>
            bootMode: UEFI
            networkConfig: 
    1
    
              interfaces: 
    2
    
               - name: eno1 
    3
    
                 type: ethernet 
    4
    
                 state: up
                 mac-address: 0c:42:a1:55:f3:06
                 ipv4:
                   enabled: true
                   dhcp: false 
    5
    
                 ethernet:
                   sr-iov:
                     total-vfs: 2 
    6
    
                 ipv6:
                   enabled: false
                   dhcp: false
               - name: sriov:eno1:0
                 type: ethernet
                 state: up 
    7
    
                 ipv4:
                   enabled: false 
    8
    
                 ipv6:
                   enabled: false
               - name: sriov:eno1:1
                 type: ethernet
                 state: down
               - name: eno2
                 type: ethernet
                 state: up
                 mac-address: 0c:42:a1:55:f3:07
                 ipv4:
                   enabled: true
                 ethernet:
                   sr-iov:
                     total-vfs: 2
                 ipv6:
                   enabled: false
               - name: sriov:eno2:0
                 type: ethernet
                 state: up
                 ipv4:
                   enabled: false
                 ipv6:
                   enabled: false
               - name: sriov:eno2:1
                 type: ethernet
                 state: down
               - name: bond0
                 type: bond
                 state: up
                 min-tx-rate: 100 
    9
    
                 max-tx-rate: 200 
    10
    
                 link-aggregation:
                   mode: active-backup 
    11
    
                   options:
                     primary: sriov:eno1:0 
    12
    
                   port:
                     - sriov:eno1:0
                     - sriov:eno2:0
                 ipv4:
                   address:
                     - ip: 10.19.16.57 
    13
    
                       prefix-length: 23
                   dhcp: false
                   enabled: true
                 ipv6:
                   enabled: false
              dns-resolver:
                config:
                  server:
                    - 10.11.5.160
                    - 10.2.70.215
              routes:
                config:
                  - destination: 0.0.0.0/0
                    next-hop-address: 10.19.17.254
                    next-hop-interface: bond0 
    14
    
                    table-id: 254
    Copy to Clipboard Toggle word wrap
    1
    networkConfig フィールドには、ホストのネットワーク設定に関する情報を含めます。interfacesdns-resolverroutes などのサブフィールドがあります。
    2
    interfaces フィールドは、ホスト用に定義されたネットワークインターフェイスの配列です。
    3
    インターフェイスの名前。
    4
    インターフェイスのタイプ。この例では、イーサネットインターフェイスを作成します。
    5
    厳密に必要ではない場合、物理機能 (PF) の DHCP を無効にするには、これを false に設定します。
    6
    インスタンス化する SR-IOV 仮想機能 (VF) の数に設定します。
    7
    これを up に設定します。
    8
    ボンドに接続された VF の IPv4 アドレス指定を無効にするには、これを false に設定します。
    9
    VF の最小伝送速度 (Mbps) を設定します。このサンプル値は、100 Mbps のレートを設定します。
    • この値は、最大伝送レート以下である必要があります。
    • Intel NIC は min-tx-rate パラメーターをサポートしていません。詳細は、BZ#1772847 を参照してください。
    10
    VF の最大伝送速度 (Mbps) を設定します。このサンプル値は、200 Mbps のレートを設定します。
    11
    必要な結合モードを設定します。
    12
    ボンディングインターフェイスの優先ポートを設定します。ボンディングは、プライマリーデバイスをボンディングインターフェイスの最初のデバイスとして使用します。ボンディングは、障害が発生しない限り、プライマリーデバイスインターフェイスを放棄しません。この設定が特に役立つのは、ボンディングインターフェイスの NIC の 1 つが高速なため、大規模な負荷に対応できる場合です。この設定は、ボンディングインターフェイスが active-backup モード(モード 1)の場合にのみ有効です。
    13
    ボンドインターフェイスの静的 IP アドレスを設定します。これはノードの IP アドレスです。
    14
    デフォルトルートのゲートウェイとして bond0 を設定します。
    重要

    クラスターをデプロイした後は、install-config.yaml ファイルの networkConfig 設定を変更してホストネットワークインターフェイスを変更することはできません。Kubernetes NMState Operator を使用して、デプロイ後にホストネットワークインターフェイスに変更を加えます。

3.13.17. 複数のクラスターノードの設定

同じ設定で OpenShift Container Platform クラスターノードを同時に設定できます。複数のクラスターノードを設定すると、各ノードの冗長な情報が install-config.yaml ファイルに追加されることを回避できます。このファイルには、クラスター内の複数のノードに同一の設定を適用するための特定のパラメーターが含まれています。

コンピュートノードは、コントローラーノードとは別に設定されます。ただし、両方のノードタイプの設定では、install-config.yaml ファイルで強調表示されているパラメーターを使用して、マルチノード設定を有効にします。次の例に示すように、networkConfig パラメーターを BOND に設定します。

hosts:
- name: ostest-master-0
 [...]
 networkConfig: &BOND
   interfaces:
   - name: bond0
     type: bond
     state: up
     ipv4:
       dhcp: true
       enabled: true
     link-aggregation:
       mode: active-backup
       port:
       - enp2s0
       - enp3s0
- name: ostest-master-1
 [...]
 networkConfig: *BOND
- name: ostest-master-2
 [...]
 networkConfig: *BOND
Copy to Clipboard Toggle word wrap
注記

複数のクラスターノードの設定は、installer-provisioned infrastructure での初期デプロイメントでのみ使用できます。

3.13.18. オプション: マネージドセキュアブートの設定

redfishredfish-virtualmediaidrac-virtualmedia などの Redfish BMC アドレス指定を使用して、installer-provisioned クラスターをデプロイする際に管理対象 Secure Boot を有効にすることができます。マネージド Secure Boot を有効にするには、bootMode 設定を各ノードに追加します。

hosts:
  - name: openshift-master-0
    role: master
    bmc:
      address: redfish://<out_of_band_ip> 
1

      username: <username>
      password: <password>
    bootMACAddress: <NIC1_mac_address>
    rootDeviceHints:
     deviceName: "/dev/sda"
    bootMode: UEFISecureBoot 
2
Copy to Clipboard Toggle word wrap

1
bmc.address 設定は、redfishredfish-virtualmedia、または idrac-virtualmedia をプロトコルとして使用することを確認します。詳細は、「HPE iLO の BMC アドレス指定」または「Dell iDRAC の BMC アドレス指定」を参照してください。
2
bootMode 設定は、デフォルトで UEFI となります。これを UEFISecureBoot に変更して、マネージド Secure Boot を有効にします。
注記

ノードがマネージド Secure Boot をサポートできるようにするには、「前提条件」の「ノードの設定」を参照してください。ノードがマネージド Secure Boot に対応していない場合には、「ノードの設定」セクションの「手動での Secure Boot のノードの設定」を参照してください。Secure Boot を手動で設定するには、Redfish 仮想メディアが必要です。

注記

IPMI は Secure Boot 管理機能を提供しないため、Red Hat では IPMI による Secure Boot のサポートはありません。

3.14. マニフェスト設定ファイル

3.14.1. OpenShift Container Platform マニフェストの作成

  1. OpenShift Container Platform マニフェストを作成します。

    $ ./openshift-baremetal-install --dir ~/clusterconfigs create manifests
    Copy to Clipboard Toggle word wrap
    INFO Consuming Install Config from target directory
    WARNING Making control-plane schedulable by setting MastersSchedulable to true for Scheduler cluster settings
    WARNING Discarding the OpenShift Manifest that was provided in the target directory because its dependencies are dirty and it needs to be regenerated
    Copy to Clipboard Toggle word wrap

3.14.2. オプション: 非接続クラスターの NTP 設定

OpenShift Container Platform は、クラスターノードに chrony Network Time Protocol (NTP) サービスをインストールします。

OpenShift Container Platform のノードは、適切に実行するために日付と時刻が一致している必要があります。コンピュートノードがコントロールプレーンノード上の NTP サーバーから日付と時刻を取得すると、ルーティング可能なネットワークに接続していないために上位層の NTP サーバーにアクセスできないクラスターのインストールと操作が可能になります。

手順

  1. 次のコマンドを使用して、インストールホストに Butane をインストールします。

    $ sudo dnf -y install butane
    Copy to Clipboard Toggle word wrap
  2. コントロールプレーンノードの chrony.conf ファイルのコンテンツを含む Butane 設定 (99-master-chrony-conf-override.bu) を作成します。

    注記

    Butane の詳細は、「Butane を使用したマシン設定の作成」を参照してください。

    Butane 設定例

    variant: openshift
    version: 4.16.0
    metadata:
      name: 99-master-chrony-conf-override
      labels:
        machineconfiguration.openshift.io/role: master
    storage:
      files:
        - path: /etc/chrony.conf
          mode: 0644
          overwrite: true
          contents:
            inline: |
              # Use public servers from the pool.ntp.org project.
              # Please consider joining the pool (https://www.pool.ntp.org/join.html).
    
              # The Machine Config Operator manages this file
              server openshift-master-0.<cluster-name>.<domain> iburst 
    1
    
              server openshift-master-1.<cluster-name>.<domain> iburst
              server openshift-master-2.<cluster-name>.<domain> iburst
    
              stratumweight 0
              driftfile /var/lib/chrony/drift
              rtcsync
              makestep 10 3
              bindcmdaddress 127.0.0.1
              bindcmdaddress ::1
              keyfile /etc/chrony.keys
              commandkey 1
              generatecommandkey
              noclientlog
              logchange 0.5
              logdir /var/log/chrony
    
              # Configure the control plane nodes to serve as local NTP servers
              # for all compute nodes, even if they are not in sync with an
              # upstream NTP server.
    
              # Allow NTP client access from the local network.
              allow all
              # Serve time even if not synchronized to a time source.
              local stratum 3 orphan
    Copy to Clipboard Toggle word wrap

    1
    <cluster-name> はクラスターの名前に置き換え、<domain> は完全修飾ドメイン名に置き換える必要があります。
  3. Butane を使用して、コントロールプレーンノードに配信される設定が含まれる MachineConfig オブジェクトファイル (99-master-chrony-conf-override.yaml) を生成します。

    $ butane 99-master-chrony-conf-override.bu -o 99-master-chrony-conf-override.yaml
    Copy to Clipboard Toggle word wrap
  4. コントロールプレーンノード上の NTP サーバーを参照するコンピュートノードの chrony.conf ファイルの内容を含む Butane 設定 99-worker-chrony-conf-override.bu を作成します。

    Butane 設定例

    variant: openshift
    version: 4.16.0
    metadata:
      name: 99-worker-chrony-conf-override
      labels:
        machineconfiguration.openshift.io/role: worker
    storage:
      files:
        - path: /etc/chrony.conf
          mode: 0644
          overwrite: true
          contents:
            inline: |
              # The Machine Config Operator manages this file.
              server openshift-master-0.<cluster-name>.<domain> iburst 
    1
    
              server openshift-master-1.<cluster-name>.<domain> iburst
              server openshift-master-2.<cluster-name>.<domain> iburst
    
              stratumweight 0
              driftfile /var/lib/chrony/drift
              rtcsync
              makestep 10 3
              bindcmdaddress 127.0.0.1
              bindcmdaddress ::1
              keyfile /etc/chrony.keys
              commandkey 1
              generatecommandkey
              noclientlog
              logchange 0.5
              logdir /var/log/chrony
    Copy to Clipboard Toggle word wrap

    1
    <cluster-name> はクラスターの名前に置き換え、<domain> は完全修飾ドメイン名に置き換える必要があります。
  5. Butane を使用して、ワーカーノードに配信される設定が含まれる MachineConfig オブジェクトファイル (99-worker-chrony-conf-override.yaml) を生成します。

    $ butane 99-worker-chrony-conf-override.bu -o 99-worker-chrony-conf-override.yaml
    Copy to Clipboard Toggle word wrap

3.14.3. コントロールプレーンで実行されるネットワークコンポーネントの設定

ネットワークコンポーネントは、コントロールプレーンノードでのみ実行するように設定できます。デフォルトで、OpenShift Container Platform はマシン設定プールの任意のノードが ingressVIP 仮想 IP アドレスをホストできるようにします。ただし、環境によっては、コントロールプレーンノードとは別のサブネットにコンピュートノードがデプロイされるため、コントロールプレーンノードで実行するために ingressVIP 仮想 IP アドレスを設定する必要があります。

重要

リモートノードを別々のサブネットにデプロイする場合は、コントロールプレーンノード専用に ingressVIP 仮想 IP アドレスを配置する必要があります。

手順

  1. install-config.yaml ファイルを保存するディレクトリーに移動します。

    $ cd ~/clusterconfigs
    Copy to Clipboard Toggle word wrap
  2. manifests サブディレクトリーに切り替えます。

    $ cd manifests
    Copy to Clipboard Toggle word wrap
  3. cluster-network-avoid-workers-99-config.yaml という名前のファイルを作成します。

    $ touch cluster-network-avoid-workers-99-config.yaml
    Copy to Clipboard Toggle word wrap
  4. エディターで cluster-network-avoid-workers-99-config.yaml ファイルを開き、Operator 設定を記述するカスタムリソース (CR) を入力します。

    apiVersion: machineconfiguration.openshift.io/v1
    kind: MachineConfig
    metadata:
      name: 50-worker-fix-ipi-rwn
      labels:
        machineconfiguration.openshift.io/role: worker
    spec:
      config:
        ignition:
          version: 3.2.0
        storage:
          files:
            - path: /etc/kubernetes/manifests/keepalived.yaml
              mode: 0644
              contents:
                source: data:,
    Copy to Clipboard Toggle word wrap

    このマニフェストは、ingressVIP 仮想 IP アドレスをコントロールプレーンノードに配置します。また、このマニフェストは、コントロールプレーンノードにのみ以下のプロセスをデプロイします。

    • openshift-ingress-operator
    • keepalived
  5. cluster-network-avoid-workers-99-config.yaml ファイルを保存します。
  6. manifests/cluster-ingress-default-ingresscontroller.yaml ファイルを作成します。

    apiVersion: operator.openshift.io/v1
    kind: IngressController
    metadata:
      name: default
      namespace: openshift-ingress-operator
    spec:
      nodePlacement:
        nodeSelector:
          matchLabels:
            node-role.kubernetes.io/master: ""
    Copy to Clipboard Toggle word wrap
  7. manifests ディレクトリーのバックアップの作成を検討してください。インストーラーは、クラスターの作成時に manifests/ ディレクトリーを削除します。
  8. cluster-scheduler-02-config.yml マニフェストを変更し、mastersSchedulable フィールドを true に設定して、コントロールプレーンノードをスケジュール対象にします。デフォルトでは、コントロールプレーンノードはスケジュール対象ではありません。以下に例を示します。

    $ sed -i "s;mastersSchedulable: false;mastersSchedulable: true;g" clusterconfigs/manifests/cluster-scheduler-02-config.yml
    Copy to Clipboard Toggle word wrap
    注記

    この手順の完了後にコントロールプレーンノードをスケジュールできない場合には、クラスターのデプロイに失敗します。

3.14.4. オプション: コンピュートノードへのルーターのデプロイ

インストール時に、インストールプログラムはルーター Pod をコンピュートノードにデプロイします。デフォルトでは、インストールプログラムは 2 つのルーター Pod をインストールします。デプロイされたクラスターが、OpenShift Container Platform クラスター内のサービスに対して予定される外部トラフィック負荷を処理するために追加のルーターを必要とする場合、yaml ファイルを作成して適切なルーターレプリカ数を設定できます。

重要

コンピュートノードが 1 つだけのクラスターのデプロイはサポートされていません。ルーターのレプリカを変更すると、1 つのコンピュートノードでデプロイする場合の degraded 状態の問題が解決されますが、クラスターで Ingress API の高可用性が失われるため、実稼働環境には適していません。

注記

デフォルトでは、インストールプログラムは 2 つのルーターをデプロイします。クラスターにコンピュートノードがない場合、インストールプログラムはデフォルトで 2 つのルーターをコントロールプレーンノードにデプロイします。

手順

  1. router-replicas.yaml ファイルを作成します。

    apiVersion: operator.openshift.io/v1
    kind: IngressController
    metadata:
      name: default
      namespace: openshift-ingress-operator
    spec:
      replicas: <num-of-router-pods>
      endpointPublishingStrategy:
        type: HostNetwork
      nodePlacement:
        nodeSelector:
          matchLabels:
            node-role.kubernetes.io/worker: ""
    Copy to Clipboard Toggle word wrap
    注記

    <num-of-router-pods> を適切な値に置き換えます。1 つのコンピュートノードのみを使用する場合は、replicas:1 に設定します。3 つ以上のコンピュートノードを使用する場合は、必要に応じて、replicas: をデフォルト値 2 から増やすことができます。

  2. router-replicas.yaml ファイルを保存し、これを clusterconfigs/openshift ディレクトリーにコピーします。

    $ cp ~/router-replicas.yaml clusterconfigs/openshift/99_router-replicas.yaml
    Copy to Clipboard Toggle word wrap

3.14.5. オプション: BIOS の設定

次の手順では、インストールプロセス中に BIOS を設定します。

手順

  1. マニフェストを作成します。
  2. ノードに対応する BareMetalHost リソースファイルを変更します。

    $ vim clusterconfigs/openshift/99_openshift-cluster-api_hosts-*.yaml
    Copy to Clipboard Toggle word wrap
  3. BIOS 設定を BareMetalHost リソースの spec セクションに追加します。

    spec:
      firmware:
        simultaneousMultithreadingEnabled: true
        sriovEnabled: true
        virtualizationEnabled: true
    Copy to Clipboard Toggle word wrap
    注記

    Red Hat は 3 つの BIOS 設定をサポートしています。BMC タイプ irmc のサーバーのみがサポートされます。他のタイプのサーバーは現在サポートされていません。

  4. クラスターを作成します。

3.14.6. オプション: RAID の設定

次の手順では、インストールプロセス中にベースボード管理コントローラー (BMC) を使用して Redundant Array of Independent Disks (RAID) を構成します。

注記

ノードにハードウェア RAID を設定する場合は、ノードにサポートされている RAID コントローラーがあることを確認してください。OpenShift Container Platform 4.16 は、ソフトウェア RAID をサポートしていません。

Expand
表3.8 ベンダーによるハードウェア RAID のサポート
ベンターBMC とプロトコルファームウェアのバージョンRAID レベル

Fujitsu

iRMC

該当なし

0、1、5、6、10

Dell

iDRAC と Redfish

バージョン 6.10.30.20 以降

0、1、5

手順

  1. マニフェストを作成します。
  2. ノードに対応する BareMetalHost リソースを変更します。

    $ vim clusterconfigs/openshift/99_openshift-cluster-api_hosts-*.yaml
    Copy to Clipboard Toggle word wrap
    注記

    OpenShift Container Platform 4.16 はソフトウェア RAID をサポートしていないため、次の例ではハードウェア RAID 設定を使用します。

    1. 特定の RAID 設定を spec セクションに追加した場合、これが原因でノードは preparing フェーズで元の RAID 設定を削除し、RAID で指定された設定を実行します。以下に例を示します。

      spec:
        raid:
          hardwareRAIDVolumes:
          - level: "0" 
      1
      
            name: "sda"
            numberOfPhysicalDisks: 1
            rotational: true
            sizeGibibytes: 0
      Copy to Clipboard Toggle word wrap
      1
      level は必須フィールドであり、その他はオプションのフィールドです。
    2. spec セクションに空の RAID 設定を追加した場合、空の設定が原因で、ノードは preparing フェーズで元の RAID 設定を削除しますが、新しい設定は実行しません。以下に例を示します。

      spec:
        raid:
          hardwareRAIDVolumes: []
      Copy to Clipboard Toggle word wrap
    3. spec セクションに raid フィールドを追加しない場合、元の RAID 設定は削除されず、新しい設定は実行されません。
  3. クラスターを作成します。

3.14.7. オプション: ノード上のストレージの設定

Machine Config Operator (MCO) によって管理される MachineConfig オブジェクトを作成することにより、OpenShift Container Platform ノード上のオペレーティングシステムに変更を加えることができます。

MachineConfig 仕様には、最初の起動時にマシンを設定するための点火設定が含まれています。この設定オブジェクトを使用して、OpenShift Container Platform マシン上で実行されているファイル、systemd サービス、およびその他のオペレーティングシステム機能を変更できます。

手順

ignition config を使用して、ノード上のストレージを設定します。次の MachineSet マニフェストの例は、プライマリーノード上のデバイスにパーティションを追加する方法を示しています。この例では、インストール前にマニフェストを適用して、プライマリーノードでサイズが 16 GiB の recovery という名前のパーティションを設定します。

  1. custom-partitions.yaml ファイルを作成し、パーティションレイアウトを含む MachineConfig オブジェクトを含めます。

    apiVersion: machineconfiguration.openshift.io/v1
    kind: MachineConfig
    metadata:
      labels:
        machineconfiguration.openshift.io/role: primary
      name: 10_primary_storage_config
    spec:
      config:
        ignition:
          version: 3.2.0
        storage:
          disks:
            - device: </dev/xxyN>
              partitions:
                - label: recovery
                  startMiB: 32768
                  sizeMiB: 16384
          filesystems:
            - device: /dev/disk/by-partlabel/recovery
              label: recovery
              format: xfs
    Copy to Clipboard Toggle word wrap
  2. custom-partitions.yaml ファイルを保存して、clusterconfigs/openshift ディレクトリーにコピーします。

    $ cp ~/<MachineConfig_manifest> ~/clusterconfigs/openshift
    Copy to Clipboard Toggle word wrap

3.15. 非接続レジストリーの作成

インストールレジストリーのローカルコピーを使用して OpenShift Container Platform クラスターをインストールする必要がある場合があります。これにより、クラスターノードがインターネットにアクセスできないネットワーク上にあるため、ネットワークの効率が高まる可能性があります。

レジストリーのローカルまたはミラーリングされたコピーには、以下が必要です。

  • レジストリーの証明書。これには、自己署名証明書を使用できます。
  • システム上のコンテナーが提供する Web サーバー。
  • 証明書およびローカルリポジトリーの情報が含まれる更新されたプルシークレット。
注記

レジストリーノードでの非接続レジストリーの作成はオプションです。レジストリーノードで切断されたレジストリーを作成する必要がある場合は、次のサブセクションをすべて完了する必要があります。

3.15.1. 前提条件

3.15.2. ミラーリングされたレジストリーをホストするためのレジストリーノードの準備

ベアメタルでミラー化されたレジストリーをホストする前に、次の手順を完了する必要があります。

手順

  1. レジストリーノードでファイアウォールポートを開きます。

    $ sudo firewall-cmd --add-port=5000/tcp --zone=libvirt  --permanent
    Copy to Clipboard Toggle word wrap
    $ sudo firewall-cmd --add-port=5000/tcp --zone=public   --permanent
    Copy to Clipboard Toggle word wrap
    $ sudo firewall-cmd --reload
    Copy to Clipboard Toggle word wrap
  2. レジストリーノードに必要なパッケージをインストールします。

    $ sudo yum -y install python3 podman httpd httpd-tools jq
    Copy to Clipboard Toggle word wrap
  3. リポジトリー情報が保持されるディレクトリー構造を作成します。

    $ sudo mkdir -p /opt/registry/{auth,certs,data}
    Copy to Clipboard Toggle word wrap

以下の手順を実行して、切断されたレジストリーの OpenShift Container Platform イメージリポジトリーをミラーリングします。

前提条件

  • ミラーホストがインターネットにアクセスできる。
  • ネットワークが制限された環境で使用するミラーレジストリーを設定し、設定した証明書および認証情報にアクセスできる。
  • Red Hat OpenShift Cluster Manager からプルシークレット をダウンロードし、ミラーリポジトリーへの認証を組み込むように変更している。

手順

  1. OpenShift Container Platform ダウンロード ページを確認し、インストールする必要のある OpenShift Container Platform のバージョンを判別し、Repository Tags ページで対応するタグを判別します。
  2. 必要な環境変数を設定します。

    1. リリースバージョンをエクスポートします。

      $ OCP_RELEASE=<release_version>
      Copy to Clipboard Toggle word wrap

      <release_version> について、インストールする OpenShift Container Platform のバージョンに対応するタグを指定します (例: 4.5.4)。

    2. ローカルレジストリー名とホストポートをエクスポートします。

      $ LOCAL_REGISTRY='<local_registry_host_name>:<local_registry_host_port>'
      Copy to Clipboard Toggle word wrap

      <local_registry_host_name> には、ミラーレジストリーのレジストリードメイン名を指定し、<local_registry_host_port> には、コンテンツの送信に使用するポートを指定します。

    3. ローカルリポジトリー名をエクスポートします。

      $ LOCAL_REPOSITORY='<local_repository_name>'
      Copy to Clipboard Toggle word wrap

      <local_repository_name> には、ocp4/openshift4 などのレジストリーに作成するリポジトリーの名前を指定します。

    4. ミラーリングするリポジトリーの名前をエクスポートします。

      $ PRODUCT_REPO='openshift-release-dev'
      Copy to Clipboard Toggle word wrap

      実稼働環境のリリースの場合には、openshift-release-dev を指定する必要があります。

    5. パスをレジストリープルシークレットにエクスポートします。

      $ LOCAL_SECRET_JSON='<path_to_pull_secret>'
      Copy to Clipboard Toggle word wrap

      <path_to_pull_secret> には、作成したミラーレジストリーのプルシークレットの絶対パスおよびファイル名を指定します。

    6. リリースミラーをエクスポートします。

      $ RELEASE_NAME="ocp-release"
      Copy to Clipboard Toggle word wrap

      実稼働環境のリリースは、ocp-release を指定する必要があります。

    7. クラスターのアーキテクチャーのタイプをエクスポートします。

      $ ARCHITECTURE=<cluster_architecture> 
      1
      Copy to Clipboard Toggle word wrap
      1
      x86_64aarch64s390x、または ppc64le など、クラスターのアーキテクチャーを指定します。
    8. ミラーリングされたイメージをホストするためにディレクトリーへのパスをエクスポートします。

      $ REMOVABLE_MEDIA_PATH=<path> 
      1
      Copy to Clipboard Toggle word wrap
      1
      最初のスラッシュ (/) 文字を含む完全パスを指定します。
  3. バージョンイメージをミラーレジストリーにミラーリングします。

    • ミラーホストがインターネットにアクセスできない場合は、以下の操作を実行します。

      1. リムーバブルメディアをインターネットに接続しているシステムに接続します。
      2. ミラーリングするイメージおよび設定マニフェストを確認します。

        $ oc adm release mirror -a ${LOCAL_SECRET_JSON}  \
             --from=quay.io/${PRODUCT_REPO}/${RELEASE_NAME}:${OCP_RELEASE}-${ARCHITECTURE} \
             --to=${LOCAL_REGISTRY}/${LOCAL_REPOSITORY} \
             --to-release-image=${LOCAL_REGISTRY}/${LOCAL_REPOSITORY}:${OCP_RELEASE}-${ARCHITECTURE} --dry-run
        Copy to Clipboard Toggle word wrap
      3. 直前のコマンドの出力の imageContentSources セクション全体を記録します。ミラーの情報はミラーリングされたリポジトリーに一意であり、インストール時に imageContentSources セクションを install-config.yaml ファイルに追加する必要があります。
      4. イメージをリムーバブルメディア上のディレクトリーにミラーリングします。

        $ oc adm release mirror -a ${LOCAL_SECRET_JSON} --to-dir=${REMOVABLE_MEDIA_PATH}/mirror quay.io/${PRODUCT_REPO}/${RELEASE_NAME}:${OCP_RELEASE}-${ARCHITECTURE}
        Copy to Clipboard Toggle word wrap
      5. メディアをネットワークが制限された環境に移し、イメージをローカルコンテナーレジストリーにアップロードします。

        $ oc image mirror -a ${LOCAL_SECRET_JSON} --from-dir=${REMOVABLE_MEDIA_PATH}/mirror "file://openshift/release:${OCP_RELEASE}*" ${LOCAL_REGISTRY}/${LOCAL_REPOSITORY} 
        1
        Copy to Clipboard Toggle word wrap
        1
        REMOVABLE_MEDIA_PATH の場合、イメージのミラーリング時に指定した同じパスを使用する必要があります。
    • ローカルコンテナーレジストリーがミラーホストに接続されている場合は、以下の操作を実行します。

      1. 以下のコマンドを使用して、リリースイメージをローカルレジストリーに直接プッシュします。

        $ oc adm release mirror -a ${LOCAL_SECRET_JSON}  \
             --from=quay.io/${PRODUCT_REPO}/${RELEASE_NAME}:${OCP_RELEASE}-${ARCHITECTURE} \
             --to=${LOCAL_REGISTRY}/${LOCAL_REPOSITORY} \
             --to-release-image=${LOCAL_REGISTRY}/${LOCAL_REPOSITORY}:${OCP_RELEASE}-${ARCHITECTURE}
        Copy to Clipboard Toggle word wrap

        このコマンドは、リリース情報をダイジェストとしてプルします。その出力には、クラスターのインストール時に必要な imageContentSources データが含まれます。

      2. 直前のコマンドの出力の imageContentSources セクション全体を記録します。ミラーの情報はミラーリングされたリポジトリーに一意であり、インストール時に imageContentSources セクションを install-config.yaml ファイルに追加する必要があります。

        注記

        ミラーリングプロセス中にイメージ名に Quay.io のパッチが適用され、podman イメージにはブートストラップ仮想マシンのレジストリーに Quay.io が表示されます。

  4. ミラーリングしたコンテンツに基づくインストールプログラムを作成するために、インストールプログラムを展開してリリースに固定します。

    • ミラーホストがインターネットにアクセスできない場合は、以下のコマンドを実行します。

      $ oc adm release extract -a ${LOCAL_SECRET_JSON} --command=openshift-baremetal-install "${LOCAL_REGISTRY}/${LOCAL_REPOSITORY}:${OCP_RELEASE}"
      Copy to Clipboard Toggle word wrap
    • ローカルコンテナーレジストリーがミラーホストに接続されている場合は、以下のコマンドを実行します。

      $ oc adm release extract -a ${LOCAL_SECRET_JSON} --command=openshift-baremetal-install "${LOCAL_REGISTRY}/${LOCAL_REPOSITORY}:${OCP_RELEASE}-${ARCHITECTURE}"
      Copy to Clipboard Toggle word wrap
      重要

      選択した OpenShift Container Platform のバージョンに適したイメージを確実に使用するために、ミラーリングしたコンテンツからインストールプログラムを展開する必要があります。

      インターネット接続のあるマシンで、このステップを実行する必要があります。

      非接続環境を使用している場合には、must-gather の一部として --image フラグを使用し、ペイロードイメージを参照します。

  5. installer-provisioned infrastructure を使用するクラスターの場合は、以下のコマンドを実行します。

    $ openshift-baremetal-install
    Copy to Clipboard Toggle word wrap

3.15.4. 非接続レジストリーを使用するように install-config.yaml ファイルを変更する

プロビジョナーノードでは、install-config.yaml ファイルは pull-secret-update.txt ファイルから新たに作成された pull-secret を使用する必要があります。install-config.yaml ファイルには、非接続レジストリーノードの証明書およびレジストリー情報も含まれる必要があります。

手順

  1. 非接続レジストリーノードの証明書を install-config.yaml ファイルに追加します。

    $ echo "additionalTrustBundle: |" >> install-config.yaml
    Copy to Clipboard Toggle word wrap

    証明書は "additionalTrustBundle: |" 行に従い、通常は 2 つのスペースで適切にインデントされる必要があります。

    $ sed -e 's/^/  /' /opt/registry/certs/domain.crt >> install-config.yaml
    Copy to Clipboard Toggle word wrap
  2. レジストリーのミラー情報を install-config.yaml ファイルに追加します。

    $ echo "imageContentSources:" >> install-config.yaml
    Copy to Clipboard Toggle word wrap
    $ echo "- mirrors:" >> install-config.yaml
    Copy to Clipboard Toggle word wrap
    $ echo "  - registry.example.com:5000/ocp4/openshift4" >> install-config.yaml
    Copy to Clipboard Toggle word wrap

    registry.example.com をレジストリーの完全修飾ドメイン名に置き換えます。

    $ echo "  source: quay.io/openshift-release-dev/ocp-release" >> install-config.yaml
    Copy to Clipboard Toggle word wrap
    $ echo "- mirrors:" >> install-config.yaml
    Copy to Clipboard Toggle word wrap
    $ echo "  - registry.example.com:5000/ocp4/openshift4" >> install-config.yaml
    Copy to Clipboard Toggle word wrap

    registry.example.com をレジストリーの完全修飾ドメイン名に置き換えます。

    $ echo "  source: quay.io/openshift-release-dev/ocp-v4.0-art-dev" >> install-config.yaml
    Copy to Clipboard Toggle word wrap

3.16. インストールの検証チェックリスト

  • ❏ OpenShift Container Platform インストーラーが取得されている。
  • ❏ OpenShift Container Platform インストーラーがデプロイメントされている。
  • install-config.yaml の必須パラメーターが設定されている。
  • install-config.yamlhosts パラメーターが設定されている。
  • install-config.yamlbmc パラメーターが設定されている。
  • bmc address フィールドで設定されている値の変換が適用されている。
  • ❏ OpenShift Container Platform マニフェストが作成されている。
  • ❏ (オプション) コンピュートノードにルーターがデプロイされている。
  • ❏ (オプション) 切断されたレジストリーを作成している。
  • ❏ (オプション) 非接続レジストリー設定が使用されている場合にこれを検証する。

第4章 クラスターのインストール

4.1. 以前のインストールのクリーンアップ

以前にデプロイが失敗した場合は、OpenShift Container Platform を再度デプロイする前に、失敗した試行のアーティファクトを削除します。

手順

  1. OpenShift Container Platform クラスターをインストールする前に、次のコマンドを使用して、すべてのベアメタルノードの電源をオフにします。

    $ ipmitool -I lanplus -U <user> -P <password> -H <management_server_ip> power off
    Copy to Clipboard Toggle word wrap
  2. 次のスクリプトを使用して、以前のデプロイ試行時に残った古いブートストラップリソースをすべて削除します。

    for i in $(sudo virsh list | tail -n +3 | grep bootstrap | awk {'print $2'});
    do
      sudo virsh destroy $i;
      sudo virsh undefine $i;
      sudo virsh vol-delete $i --pool $i;
      sudo virsh vol-delete $i.ign --pool $i;
      sudo virsh pool-destroy $i;
      sudo virsh pool-undefine $i;
    done
    Copy to Clipboard Toggle word wrap
  3. 次のコマンドを使用して、以前のインストールにより生成されたアーティファクトを削除します。

    $ cd ; /bin/rm -rf auth/ bootstrap.ign master.ign worker.ign metadata.json \
    .openshift_install.log .openshift_install_state.json
    Copy to Clipboard Toggle word wrap
  4. 次のコマンドを使用して、OpenShift Container Platform マニフェストを再作成します。

    $ ./openshift-baremetal-install --dir ~/clusterconfigs create manifests
    Copy to Clipboard Toggle word wrap

4.2. OpenShift Container Platform インストーラーを使用したクラスターのデプロイ

OpenShift Container Platform インストーラーを実行します。

$ ./openshift-baremetal-install --dir ~/clusterconfigs --log-level debug create cluster
Copy to Clipboard Toggle word wrap

4.3. インストールの進行状況を追跡

デプロイメントプロセスで、tail コマンドを install ディレクトリーフォルダーの .openshift_install.log ログファイルに対して実行して、インストールの全体のステータスを確認できます。

$ tail -f /path/to/install-dir/.openshift_install.log
Copy to Clipboard Toggle word wrap

4.4. 静的 IP アドレス設定の検証

クラスターノードの DHCP 予約で無限リースが指定されている場合、インストーラーがノードを正常にプロビジョニングした後に、dispatcher スクリプトはノードのネットワーク設定をチェックします。ネットワーク設定に無限 DHCP リースが含まれているとスクリプトが判断すると、DHCP リースの IP アドレスを静的 IP アドレスとして使用して新規接続を作成します。

注記

dispatcher スクリプトは、クラスター内の他のノードのプロビジョニングの進行中に、正常にプロビジョニングされたノードで実行される場合があります。

ネットワーク設定が正しく機能していることを確認します。

手順

  1. ノードのネットワークインターフェイス設定を確認してください。
  2. DHCP サーバーをオフにし、OpenShift Container Platform ノードを再起動して、ネットワーク設定が適切に機能していることを確認します。

第5章 インストールのトラブルシューティング

5.1. インストールプログラムワークフローのトラブルシューティング

インストール環境のトラブルシューティングを行う前に、ベアメタルへの installer-provisioned installation の全体的なフローを理解することが重要です。次の図は、環境のトラブルシューティングフローをステップごとに示したものです。

Flow-Diagram-1

ワークフロー 1/4 は、install-config.yaml ファイルにエラーがある場合や Red Hat Enterprise Linux CoreOS (RHCOS) イメージにアクセスできない場合のトラブルシューティングのワークフローを説明しています。トラブルシューティングに関する提案は、install-config.yaml のトラブルシューティング を参照してください。

Flow-Diagram-2

ワークフロー 2/4 は、ブートストラップ仮想マシンの問題クラスターノードを起動できないブートストラップ仮想マシン、および ログの検査 に関するトラブルシューティングのワークフローを説明しています。provisioning ネットワークなしに OpenShift Container Platform クラスターをインストールする場合は、このワークフローは適用されません。

Flow-Diagram-3

ワークフロー 3/4 は、PXE ブートしないクラスターノード のトラブルシューティングワークフローを示しています。Redfish 仮想メディアを使用してインストールする場合、インストールプログラムによるノードのデプロイに必要な最小ファームウェア要件を各ノードが満たしている必要があります。詳細は、前提条件 セクションの 仮想メディアを使用したインストールのファームウェア要件 を参照してください。

Flow-Diagram-4

ワークフロー 4/4 は、アクセスできない API から 検証済みのインストール までのトラブルシューティングワークフローを示しています。

5.2. install-config.yaml のトラブルシューティング

install-config.yaml 設定ファイルは、OpenShift Container Platform クラスターの一部であるすべてのノードを表します。このファイルには、apiVersionbaseDomainimageContentSources、および仮想 IP アドレスのみで構成されるがこれらに制限されない必要なオプションが含まれます。OpenShift Container Platform クラスターのデプロイメントの初期段階でエラーが発生した場合、エラーは install-config.yaml 設定ファイルにある可能性があります。

手順

  1. YAML-tips のガイドラインを使用します。
  2. syntax-check を使用して YAML 構文が正しいことを確認します。
  3. Red Hat Enterprise Linux CoreOS (RHCOS) QEMU イメージが適切に定義され、install-config.yaml で提供される URL 経由でアクセスできることを確認します。以下に例を示します。

    $ curl -s -o /dev/null -I -w "%{http_code}\n" http://webserver.example.com:8080/rhcos-44.81.202004250133-0-qemu.<architecture>.qcow2.gz?sha256=7d884b46ee54fe87bbc3893bf2aa99af3b2d31f2e19ab5529c60636fbd0f1ce7
    Copy to Clipboard Toggle word wrap

    出力が 200 の場合、ブートストラップ仮想マシンイメージを保存する Web サーバーからの有効な応答があります。

5.3. ブートストラップ仮想マシンの問題のトラブルシューティング

OpenShift Container Platform インストールプログラムは、OpenShift Container Platform クラスターノードのプロビジョニングを処理するブートストラップノードの仮想マシンを起動します。

手順

  1. インストールプログラムをトリガー後の約 10 分から 15 分後に、virsh コマンドを使用してブートストラップ仮想マシンが機能していることを確認します。

    $ sudo virsh list
    Copy to Clipboard Toggle word wrap
     Id    Name                           State
     --------------------------------------------
     12    openshift-xf6fq-bootstrap      running
    Copy to Clipboard Toggle word wrap
    注記

    ブートストラップ仮想マシンの名前は常にクラスター名で始まり、その後にランダムな文字セットが続き、"bootstrap" という単語で終わります。

  2. 10 - 15 分経ってもブートストラップ仮想マシンが実行されない場合は、次のコマンドを実行して、システム上で libvirtd が実行されていることを確認します。

    $ systemctl status libvirtd
    Copy to Clipboard Toggle word wrap
    ● libvirtd.service - Virtualization daemon
       Loaded: loaded (/usr/lib/systemd/system/libvirtd.service; enabled; vendor preset: enabled)
       Active: active (running) since Tue 2020-03-03 21:21:07 UTC; 3 weeks 5 days ago
         Docs: man:libvirtd(8)
               https://libvirt.org
     Main PID: 9850 (libvirtd)
        Tasks: 20 (limit: 32768)
       Memory: 74.8M
       CGroup: /system.slice/libvirtd.service
               ├─ 9850 /usr/sbin/libvirtd
    Copy to Clipboard Toggle word wrap

    ブートストラップ仮想マシンが動作している場合は、これにログインします。

  3. virsh console コマンドを使用して、ブートストラップ仮想マシンの IP アドレスを見つけます。

    $ sudo virsh console example.com
    Copy to Clipboard Toggle word wrap
    Connected to domain example.com
    Escape character is ^]
    Red Hat Enterprise Linux CoreOS 43.81.202001142154.0 (Ootpa) 4.3
    SSH host key: SHA256:BRWJktXZgQQRY5zjuAV0IKZ4WM7i4TiUyMVanqu9Pqg (ED25519)
    SSH host key: SHA256:7+iKGA7VtG5szmk2jB5gl/5EZ+SNcJ3a2g23o0lnIio (ECDSA)
    SSH host key: SHA256:DH5VWhvhvagOTaLsYiVNse9ca+ZSW/30OOMed8rIGOc (RSA)
    ens3:  fd35:919d:4042:2:c7ed:9a9f:a9ec:7
    ens4: 172.22.0.2 fe80::1d05:e52e:be5d:263f
    localhost login:
    Copy to Clipboard Toggle word wrap
    重要

    provisioning ネットワークなしで OpenShift Container Platform クラスターをデプロイする場合、172.22.0.2 などのプライベート IP アドレスではなく、パブリック IP アドレスを使用する必要があります。

  4. IP アドレスを取得したら、ssh コマンドを使用してブートストラップ仮想マシンにログインします。

    注記

    直前の手順のコンソール出力では、ens3 で提供される IPv6 IP アドレスまたは ens4 で提供される IPv4 IP を使用できます。

    $ ssh core@172.22.0.2
    Copy to Clipboard Toggle word wrap

ブートストラップ仮想マシンへのログインに成功しない場合は、以下いずれかのシナリオが発生した可能性があります。

  • 172.22.0.0/24 ネットワークにアクセスできない。プロビジョナーと provisioning ネットワークブリッジ間のネットワーク接続を確認します。この問題は、provisioning ネットワークを使用している場合に発生することがあります。
  • パブリックネットワーク経由でブートストラップ仮想マシンにアクセスできない。baremetal ネットワークで SSH を試行する際に、provisioner ホストの、とくに baremetal ネットワークブリッジについて接続を確認します。
  • Permission denied (publickey,password,keyboard-interactive) が出される。ブートストラップ仮想マシンへのアクセスを試行すると、Permission denied エラーが発生する可能性があります。仮想マシンへのログインを試行するユーザーの SSH キーが install-config.yaml ファイル内で設定されていることを確認します。

5.3.1. ブートストラップ仮想マシンがクラスターノードを起動できない

デプロイメント時に、ブートストラップ仮想マシンがクラスターノードの起動に失敗する可能性があり、これにより、仮想マシンがノードに RHCOS イメージをプロビジョニングできなくなります。このシナリオは、以下の原因で発生する可能性があります。

  • install-config.yaml ファイルに関連する問題。
  • ベアメタルネットワークを使用してアウトオブバンド (out-of-band) ネットワークアクセスに関する問題

この問題を確認するには、ironic に関連する 3 つのコンテナーを使用できます。

  • ironic
  • ironic-inspector

手順

  1. ブートストラップ仮想マシンにログインします。

    $ ssh core@172.22.0.2
    Copy to Clipboard Toggle word wrap
  2. コンテナーログを確認するには、以下を実行します。

    [core@localhost ~]$ sudo podman logs -f <container_name>
    Copy to Clipboard Toggle word wrap

    <container_name>ironic または ironic-inspector のいずれかに置き換えます。コントロールプレーンノードが PXE から起動しないという問題が発生した場合は、ironic Pod を確認してください。ironic Pod は、IPMI 経由でノードにログインしようとするため、クラスターノードを起動しようとする試みに関する情報を含んでいます。

考えられる理由

クラスターノードは、デプロイメントの開始時に ON 状態にある可能性があります。

解決策

IPMI でのインストールを開始する前に、OpenShift Container Platform クラスターノードの電源をオフにします。

$ ipmitool -I lanplus -U root -P <password> -H <out_of_band_ip> power off
Copy to Clipboard Toggle word wrap

5.3.2. ログの検査

RHCOS イメージのダウンロードまたはアクセスに問題が発生した場合には、最初に install-config.yaml 設定ファイルで URL が正しいことを確認します。

RHCOS イメージをホストする内部 Web サーバーの例

bootstrapOSImage: http://<ip:port>/rhcos-43.81.202001142154.0-qemu.<architecture>.qcow2.gz?sha256=9d999f55ff1d44f7ed7c106508e5deecd04dc3c06095d34d36bf1cd127837e0c
clusterOSImage: http://<ip:port>/rhcos-43.81.202001142154.0-openstack.<architecture>.qcow2.gz?sha256=a1bda656fa0892f7b936fdc6b6a6086bddaed5dafacedcd7a1e811abb78fe3b0
Copy to Clipboard Toggle word wrap

coreos-downloader コンテナーは、Web サーバーまたは外部の quay.io レジストリー (install-config.yaml 設定ファイルで指定されている方) からリソースをダウンロードします。coreos-downloader コンテナーが稼働していることを確認し、必要に応じて、そのログを調べます。

手順

  1. ブートストラップ仮想マシンにログインします。

    $ ssh core@172.22.0.2
    Copy to Clipboard Toggle word wrap
  2. 次のコマンドを実行して、ブートストラップ VM 内の coreos-downloader コンテナーのステータスを確認します。

    [core@localhost ~]$ sudo podman logs -f coreos-downloader
    Copy to Clipboard Toggle word wrap

    ブートストラップ仮想マシンがイメージへの URL にアクセスできない場合、curl コマンドを使用して、仮想マシンがイメージにアクセスできることを確認します。

  3. すべてのコンテナーがデプロイメントフェーズで起動されているかどうかを示す bootkube ログを検査するには、以下を実行します。

    [core@localhost ~]$ journalctl -xe
    Copy to Clipboard Toggle word wrap
    [core@localhost ~]$ journalctl -b -f -u bootkube.service
    Copy to Clipboard Toggle word wrap
  4. dnsmasqmariadbhttpd、および ironic を含むすべての Pod が実行中であることを確認します。

    [core@localhost ~]$ sudo podman ps
    Copy to Clipboard Toggle word wrap
  5. Pod に問題がある場合には、問題のあるコンテナーのログを確認します。ironic サービスのログを確認するには、次のコマンドを実行します。

    [core@localhost ~]$ sudo podman logs ironic
    Copy to Clipboard Toggle word wrap

5.4. 利用できない Kubernetes API の調査

Kubernetes API が利用できない場合は、コントロールプレーンノードをチェックして、正しいコンポーネントが実行されていることを確認します。また、ホスト名の解決も確認してください。

手順

  1. 次のコマンドを実行して、各コントロールプレーンノードで etcd が実行されていることを確認します。

    $ sudo crictl logs $(sudo crictl ps --pod=$(sudo crictl pods --name=etcd-member --quiet) --quiet)
    Copy to Clipboard Toggle word wrap
  2. 上記のコマンドが失敗した場合は、次のコマンドを実行して、Kubelet により etcd Pod が作成されたことを確認します。

    $ sudo crictl pods --name=etcd-member
    Copy to Clipboard Toggle word wrap

    Pod がない場合は、etcd を調査します。

  3. 次のコマンドを使用して、クラスターノードに localhost.localdomain だけでなく完全修飾ドメイン名があることを確認します。

    $ hostname
    Copy to Clipboard Toggle word wrap

    ホスト名が設定されていない場合、正しいホスト名を設定します。以下に例を示します。

    $ sudo hostnamectl set-hostname <hostname>
    Copy to Clipboard Toggle word wrap
  4. dig コマンドを使用して、各ノードの DNS サーバーでの名前解決が正しいことを確認します。

    $ dig api.<cluster_name>.example.com
    Copy to Clipboard Toggle word wrap
    ; <<>> DiG 9.11.4-P2-RedHat-9.11.4-26.P2.el8 <<>> api.<cluster_name>.example.com
    ;; global options: +cmd
    ;; Got answer:
    ;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 37551
    ;; flags: qr aa rd ra; QUERY: 1, ANSWER: 1, AUTHORITY: 1, ADDITIONAL: 2
    
    ;; OPT PSEUDOSECTION:
    ; EDNS: version: 0, flags:; udp: 4096
    ; COOKIE: 866929d2f8e8563582af23f05ec44203d313e50948d43f60 (good)
    ;; QUESTION SECTION:
    ;api.<cluster_name>.example.com. IN A
    
    ;; ANSWER SECTION:
    api.<cluster_name>.example.com. 10800 IN	A 10.19.13.86
    
    ;; AUTHORITY SECTION:
    <cluster_name>.example.com. 10800 IN NS	<cluster_name>.example.com.
    
    ;; ADDITIONAL SECTION:
    <cluster_name>.example.com. 10800 IN A	10.19.14.247
    
    ;; Query time: 0 msec
    ;; SERVER: 10.19.14.247#53(10.19.14.247)
    ;; WHEN: Tue May 19 20:30:59 UTC 2020
    ;; MSG SIZE  rcvd: 140
    Copy to Clipboard Toggle word wrap

    前述の例の出力は、api.<cluster_name>.example.com VIP の適切な IP アドレスが 10.19.13.86 であることを示しています。この IP アドレスは baremetal 上にある必要があります。

5.5. クラスターの初期化失敗のトラブルシューティング

インストールプログラムは、Cluster Version Operator を使用して、OpenShift Container Platform クラスターのすべてのコンポーネントを作成します。インストールプログラムがクラスターの初期化に失敗した場合は、ClusterVersion オブジェクトと ClusterOperator オブジェクトから最も重要な情報を取得できます。

手順

  1. 次のコマンドを実行して ClusterVersion オブジェクトを検査します。

    $ oc --kubeconfig=${INSTALL_DIR}/auth/kubeconfig get clusterversion -o yaml
    Copy to Clipboard Toggle word wrap

    出力例

    apiVersion: config.openshift.io/v1
    kind: ClusterVersion
    metadata:
      creationTimestamp: 2019-02-27T22:24:21Z
      generation: 1
      name: version
      resourceVersion: "19927"
      selfLink: /apis/config.openshift.io/v1/clusterversions/version
      uid: 6e0f4cf8-3ade-11e9-9034-0a923b47ded4
    spec:
      channel: stable-4.1
      clusterID: 5ec312f9-f729-429d-a454-61d4906896ca
    status:
      availableUpdates: null
      conditions:
      - lastTransitionTime: 2019-02-27T22:50:30Z
        message: Done applying 4.1.1
        status: "True"
        type: Available
      - lastTransitionTime: 2019-02-27T22:50:30Z
        status: "False"
        type: Failing
      - lastTransitionTime: 2019-02-27T22:50:30Z
        message: Cluster version is 4.1.1
        status: "False"
        type: Progressing
      - lastTransitionTime: 2019-02-27T22:24:31Z
        message: 'Unable to retrieve available updates: unknown version 4.1.1
        reason: RemoteFailed
        status: "False"
        type: RetrievedUpdates
      desired:
        image: registry.svc.ci.openshift.org/openshift/origin-release@sha256:91e6f754975963e7db1a9958075eb609ad226968623939d262d1cf45e9dbc39a
        version: 4.1.1
      history:
      - completionTime: 2019-02-27T22:50:30Z
        image: registry.svc.ci.openshift.org/openshift/origin-release@sha256:91e6f754975963e7db1a9958075eb609ad226968623939d262d1cf45e9dbc39a
        startedTime: 2019-02-27T22:24:31Z
        state: Completed
        version: 4.1.1
      observedGeneration: 1
      versionHash: Wa7as_ik1qE=
    Copy to Clipboard Toggle word wrap

  2. 次のコマンドを実行して状態を表示します。

    $ oc --kubeconfig=${INSTALL_DIR}/auth/kubeconfig get clusterversion version \
         -o=jsonpath='{range .status.conditions[*]}{.type}{" "}{.status}{" "}{.message}{"\n"}{end}'
    Copy to Clipboard Toggle word wrap

    最も重要な状態は、FailingAvailableProgressing です。

    出力例

    Available True Done applying 4.1.1
    Failing False
    Progressing False Cluster version is 4.0.0-0.alpha-2019-02-26-194020
    RetrievedUpdates False Unable to retrieve available updates: unknown version 4.1.1
    Copy to Clipboard Toggle word wrap

  3. 次のコマンドを実行して ClusterOperator オブジェクトを検査します。

    $ oc --kubeconfig=${INSTALL_DIR}/auth/kubeconfig get clusteroperator
    Copy to Clipboard Toggle word wrap

    このコマンドは、クラスター Operators のステータスを返します。

    出力例

    NAME                                  VERSION   AVAILABLE   PROGRESSING   FAILING   SINCE
    cluster-baremetal-operator                      True        False         False     17m
    cluster-autoscaler                              True        False         False     17m
    cluster-storage-operator                        True        False         False     10m
    console                                         True        False         False     7m21s
    dns                                             True        False         False     31m
    image-registry                                  True        False         False     9m58s
    ingress                                         True        False         False     10m
    kube-apiserver                                  True        False         False     28m
    kube-controller-manager                         True        False         False     21m
    kube-scheduler                                  True        False         False     25m
    machine-api                                     True        False         False     17m
    machine-config                                  True        False         False     17m
    marketplace-operator                            True        False         False     10m
    monitoring                                      True        False         False     8m23s
    network                                         True        False         False     13m
    node-tuning                                     True        False         False     11m
    openshift-apiserver                             True        False         False     15m
    openshift-authentication                        True        False         False     20m
    openshift-cloud-credential-operator             True        False         False     18m
    openshift-controller-manager                    True        False         False     10m
    openshift-samples                               True        False         False     8m42s
    operator-lifecycle-manager                      True        False         False     17m
    service-ca                                      True        False         False     30m
    Copy to Clipboard Toggle word wrap

  4. 次のコマンドを実行して、個々のクラスター Operator を検査します。

    $ oc --kubeconfig=${INSTALL_DIR}/auth/kubeconfig get clusteroperator <operator> -oyaml 
    1
    Copy to Clipboard Toggle word wrap
    1
    <operator> は、クラスター Operator の名前に置き換えます。このコマンドは、クラスター Operator のステータスが Available にならない理由、または Failed になる理由を特定するために使用できます。

    出力例

    apiVersion: config.openshift.io/v1
    kind: ClusterOperator
    metadata:
      creationTimestamp: 2019-02-27T22:47:04Z
      generation: 1
      name: monitoring
      resourceVersion: "24677"
      selfLink: /apis/config.openshift.io/v1/clusteroperators/monitoring
      uid: 9a6a5ef9-3ae1-11e9-bad4-0a97b6ba9358
    spec: {}
    status:
      conditions:
      - lastTransitionTime: 2019-02-27T22:49:10Z
        message: Successfully rolled out the stack.
        status: "True"
        type: Available
      - lastTransitionTime: 2019-02-27T22:49:10Z
        status: "False"
        type: Progressing
      - lastTransitionTime: 2019-02-27T22:49:10Z
        status: "False"
        type: Failing
      extension: null
      relatedObjects: null
      version: ""
    Copy to Clipboard Toggle word wrap

  5. クラスター Operator のステータス状態を取得するには、次のコマンドを実行します。

    $ oc --kubeconfig=${INSTALL_DIR}/auth/kubeconfig get clusteroperator <operator> \
         -o=jsonpath='{range .status.conditions[*]}{.type}{" "}{.status}{" "}{.message}{"\n"}{end}'
    Copy to Clipboard Toggle word wrap

    <Operator> は、上記のいずれかの Operator の名前に置き換えます。

    出力例

    Available True Successfully rolled out the stack
    Progressing False
    Failing False
    Copy to Clipboard Toggle word wrap

  6. クラスター Operator が所有するオブジェクトのリストを取得するには、次のコマンドを実行します。

    oc --kubeconfig=${INSTALL_DIR}/auth/kubeconfig get clusteroperator kube-apiserver \
       -o=jsonpath='{.status.relatedObjects}'
    Copy to Clipboard Toggle word wrap

    出力例

    [map[resource:kubeapiservers group:operator.openshift.io name:cluster] map[group: name:openshift-config resource:namespaces] map[group: name:openshift-config-managed resource:namespaces] map[group: name:openshift-kube-apiserver-operator resource:namespaces] map[group: name:openshift-kube-apiserver resource:namespaces]]
    Copy to Clipboard Toggle word wrap

5.6. コンソール URL の取得に失敗した場合のトラブルシューティング

インストールプログラムは、openshift-console namespace 内の [route][route-object] を使用して、OpenShift Container Platform コンソールの URL を取得します。インストールプログラムがコンソールの URL の取得に失敗した場合は、次の手順に従います。

手順

  1. 次のコマンドを実行して、コンソールルーターが Available 状態か Failing 状態かを確認します。

    $ oc --kubeconfig=${INSTALL_DIR}/auth/kubeconfig get clusteroperator console -oyaml
    Copy to Clipboard Toggle word wrap
    apiVersion: config.openshift.io/v1
    kind: ClusterOperator
    metadata:
      creationTimestamp: 2019-02-27T22:46:57Z
      generation: 1
      name: console
      resourceVersion: "19682"
      selfLink: /apis/config.openshift.io/v1/clusteroperators/console
      uid: 960364aa-3ae1-11e9-bad4-0a97b6ba9358
    spec: {}
    status:
      conditions:
      - lastTransitionTime: 2019-02-27T22:46:58Z
        status: "False"
        type: Failing
      - lastTransitionTime: 2019-02-27T22:50:12Z
        status: "False"
        type: Progressing
      - lastTransitionTime: 2019-02-27T22:50:12Z
        status: "True"
        type: Available
      - lastTransitionTime: 2019-02-27T22:46:57Z
        status: "True"
        type: Upgradeable
      extension: null
      relatedObjects:
      - group: operator.openshift.io
        name: cluster
        resource: consoles
      - group: config.openshift.io
        name: cluster
        resource: consoles
      - group: oauth.openshift.io
        name: console
        resource: oauthclients
      - group: ""
        name: openshift-console-operator
        resource: namespaces
      - group: ""
        name: openshift-console
        resource: namespaces
      versions: null
    Copy to Clipboard Toggle word wrap
  2. 次のコマンドを実行して、コンソール URL を手動で取得します。

    $ oc --kubeconfig=${INSTALL_DIR}/auth/kubeconfig get route console -n openshift-console \
         -o=jsonpath='{.spec.host}' console-openshift-console.apps.adahiya-1.devcluster.openshift.com
    Copy to Clipboard Toggle word wrap

5.7. kubeconfig に Ingress 証明書を追加できない場合のトラブルシューティング

インストールプログラムは、${INSTALL_DIR}/auth/kubeconfig 内の信頼できるクライアント認証局のリストにデフォルトの Ingress 証明書を追加します。インストールプログラムが Ingress 証明書を kubeconfig ファイルに追加できない場合は、クラスターから証明書を取得して追加できます。

手順

  1. 次のコマンドを使用して、クラスターから証明書を取得します。

    $ oc --kubeconfig=${INSTALL_DIR}/auth/kubeconfig get configmaps default-ingress-cert \
         -n openshift-config-managed -o=jsonpath='{.data.ca-bundle\.crt}'
    Copy to Clipboard Toggle word wrap
    -----BEGIN CERTIFICATE-----
    MIIC/TCCAeWgAwIBAgIBATANBgkqhkiG9w0BAQsFADAuMSwwKgYDVQQDDCNjbHVz
    dGVyLWluZ3Jlc3Mtb3BlcmF0b3JAMTU1MTMwNzU4OTAeFw0xOTAyMjcyMjQ2Mjha
    Fw0yMTAyMjYyMjQ2MjlaMC4xLDAqBgNVBAMMI2NsdXN0ZXItaW5ncmVzcy1vcGVy
    YXRvckAxNTUxMzA3NTg5MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA
    uCA4fQ+2YXoXSUL4h/mcvJfrgpBfKBW5hfB8NcgXeCYiQPnCKblH1sEQnI3VC5Pk
    2OfNCF3PUlfm4i8CHC95a7nCkRjmJNg1gVrWCvS/ohLgnO0BvszSiRLxIpuo3C4S
    EVqqvxValHcbdAXWgZLQoYZXV7RMz8yZjl5CfhDaaItyBFj3GtIJkXgUwp/5sUfI
    LDXW8MM6AXfuG+kweLdLCMm3g8WLLfLBLvVBKB+4IhIH7ll0buOz04RKhnYN+Ebw
    tcvFi55vwuUCWMnGhWHGEQ8sWm/wLnNlOwsUz7S1/sW8nj87GFHzgkaVM9EOnoNI
    gKhMBK9ItNzjrP6dgiKBCQIDAQABoyYwJDAOBgNVHQ8BAf8EBAMCAqQwEgYDVR0T
    AQH/BAgwBgEB/wIBADANBgkqhkiG9w0BAQsFAAOCAQEAq+vi0sFKudaZ9aUQMMha
    CeWx9CZvZBblnAWT/61UdpZKpFi4eJ2d33lGcfKwHOi2NP/iSKQBebfG0iNLVVPz
    vwLbSG1i9R9GLdAbnHpPT9UG6fLaDIoKpnKiBfGENfxeiq5vTln2bAgivxrVlyiq
    +MdDXFAWb6V4u2xh6RChI7akNsS3oU9PZ9YOs5e8vJp2YAEphht05X0swA+X8V8T
    C278FFifpo0h3Q0Dbv8Rfn4UpBEtN4KkLeS+JeT+0o2XOsFZp7Uhr9yFIodRsnNo
    H/Uwmab28ocNrGNiEVaVH6eTTQeeZuOdoQzUbClElpVmkrNGY0M42K0PvOQ/e7+y
    AQ==
    -----END CERTIFICATE-----
    Copy to Clipboard Toggle word wrap
  2. ${INSTALL_DIR}/auth/kubeconfig ファイルの client-certificate-authority-data フィールドに証明書を追加します。

5.8. クラスターノードへの SSH アクセスのトラブルシューティング

セキュリティーを強化するために、デフォルトではクラスターの外部からクラスターに SSH 接続することは禁止されています。ただし、プロビジョナーノードからコントロールプレーンノードとワーカーノードにアクセスすることはできます。プロビジョナーノードからクラスターノードに SSH 接続できない場合、クラスターノードがブートストラップ仮想マシンを待機している可能性があります。コントロールプレーンノードはブートストラップ仮想マシンからブート設定を取得します。コントロールプレーンノードはブート設定を取得しないと、正常に起動できません。

手順

  1. ノードに物理的にアクセスできる場合は、コンソールの出力をチェックして、正常に起動したかどうかを確認します。ノードがまだブート設定を取得中の場合は、ブートストラップ仮想マシンに問題がある可能性があります。
  2. install-config.yaml ファイルで sshKey: '<ssh_pub_key>' が設定されていることを確認します。<ssh_pub_key> は、プロビジョナーノード上の kni ユーザーの公開鍵です。

5.9. クラスターノードが PXE ブートしない

OpenShift Container Platform クラスターノードが PXE ブートしない場合、PXE ブートしないクラスターノードで以下のチェックを実行します。この手順は、provisioning ネットワークなしで OpenShift Container Platform クラスターをインストールする場合には適用されません。

手順

  1. provisioning ネットワークへのネットワークの接続を確認します。
  2. PXE が provisioning ネットワークの NIC で有効にされており、PXE がその他のすべての NIC について無効にされていることを確認します。
  3. install-config.yaml 設定ファイルに、provisioning ネットワークに接続されている NIC の rootDeviceHints パラメーターとブート MAC アドレスが含まれていることを確認します。以下に例を示します。

    コントロールプレーンノードの設定

    bootMACAddress: 24:6E:96:1B:96:90 # MAC of bootable provisioning NIC
    Copy to Clipboard Toggle word wrap

    ワーカーノード設定

    bootMACAddress: 24:6E:96:1B:96:90 # MAC of bootable provisioning NIC
    Copy to Clipboard Toggle word wrap

5.10. インストールしてもワーカーノードが作成されない

インストールプログラムはワーカーノードを直接プロビジョニングしません。代わりに、Machine API Operator が、サポートされているプラットフォーム上でノードをスケールアップおよびスケールダウンします。クラスターのインターネット接続の速度によって異なりますが、15 - 20 分経ってもワーカーノードが作成されない場合は、Machine API Operator を調査してください。

手順

  1. 次のコマンドを実行して、Machine API Operator を確認します。

    $ oc --kubeconfig=${INSTALL_DIR}/auth/kubeconfig \
       --namespace=openshift-machine-api get deployments
    Copy to Clipboard Toggle word wrap

    ご使用の環境で ${INSTALL_DIR} が設定されていない場合は、値をインストールディレクトリーの名前に置き換えます。

    出力例

    NAME                          READY   UP-TO-DATE   AVAILABLE   AGE
    cluster-autoscaler-operator   1/1     1            1           86m
    cluster-baremetal-operator    1/1     1            1           86m
    machine-api-controllers       1/1     1            1           85m
    machine-api-operator          1/1     1            1           86m
    Copy to Clipboard Toggle word wrap

  2. 次のコマンドを実行して、マシンコントローラーのログを確認します。

    $ oc --kubeconfig=${INSTALL_DIR}/auth/kubeconfig \
         --namespace=openshift-machine-api logs deployments/machine-api-controllers \
         --container=machine-controller
    Copy to Clipboard Toggle word wrap

5.11. Cluster Network Operator のトラブルシューティング

Cluster Network Operator は、ネットワークコンポーネントのデプロイを担当します。この Operator は、コントロールプレーンノードが起動した後、インストールプログラムがブートストラップコントロールプレーンを削除する前に、インストールプロセスの初期段階で実行されます。この Operator に問題がある場合、インストールプログラムに問題がある可能性があります。

手順

  1. 次のコマンドを実行して、ネットワーク設定が存在することを確認します。

    $ oc get network -o yaml cluster
    Copy to Clipboard Toggle word wrap

    存在しない場合は、インストールプログラムによって作成されていません。理由を確認するには、次のコマンドを実行します。

    $ openshift-install create manifests
    Copy to Clipboard Toggle word wrap

    マニフェストを確認して、インストールプログラムがネットワーク設定を作成しなかった理由を特定します。

  2. 次のコマンドを入力して、ネットワークが実行中であることを確認します。

    $ oc get po -n openshift-network-operator
    Copy to Clipboard Toggle word wrap

5.12. BMC を使用して、新しいベアメタルホストを検出できない

場合によっては、リモート仮想メディア共有をマウントできないため、インストールプログラムが新しいベアメタルホストを検出できず、エラーが発生することがあります。

以下に例を示します。

ProvisioningError 51s metal3-baremetal-controller Image provisioning failed: Deploy step deploy.deploy failed with BadRequestError: HTTP POST
https://<bmc_address>/redfish/v1/Managers/iDRAC.Embedded.1/VirtualMedia/CD/Actions/VirtualMedia.InsertMedia
returned code 400.
Base.1.8.GeneralError: A general error has occurred. See ExtendedInfo for more information
Extended information: [
  {
    "Message": "Unable to mount remote share https://<ironic_address>/redfish/boot-<uuid>.iso.",
    "MessageArgs": [
      "https://<ironic_address>/redfish/boot-<uuid>.iso"
    ],
    "MessageArgs@odata.count": 1,
    "MessageId": "IDRAC.2.5.RAC0720",
    "RelatedProperties": [
      "#/Image"
    ],
    "RelatedProperties@odata.count": 1,
    "Resolution": "Retry the operation.",
    "Severity": "Informational"
  }
].
Copy to Clipboard Toggle word wrap

この状況で、認証局が不明な仮想メディアを使用している場合は、不明な認証局を信頼するように、ベースボード管理コントローラー (BMC) のリモートファイル共有設定を行って、このエラーを回避できます。

注記

この解決策は、Dell iDRAC 9 およびファームウェアバージョン 5.10.50 を搭載した OpenShift Container Platform 4.11 でテストされました。

5.13. クラスターに参加できないワーカーノードのトラブルシューティング

installer-provisioned クラスターは、api-int.<cluster_name>.<base_domain> URL の DNS エントリーが含まれる DNS サーバーと共にデプロイされます。クラスター内のノードが外部またはアップストリーム DNS サーバーを使用して api-int.<cluster_name>.<base_domain> URL を解決し、そのようなエントリーがない場合、ワーカーノードはクラスターに参加できない可能性があります。クラスター内のすべてのノードがドメイン名を解決できることを確認します。

手順

  1. DNS A/AAAA または CNAME レコードを追加して、API ロードバランサーを内部的に識別します。たとえば、dnsmasq を使用する場合は、dnsmasq.conf 設定ファイルを変更します。

    $ sudo nano /etc/dnsmasq.conf
    Copy to Clipboard Toggle word wrap
    address=/api-int.<cluster_name>.<base_domain>/<IP_address>
    address=/api-int.mycluster.example.com/192.168.1.10
    address=/api-int.mycluster.example.com/2001:0db8:85a3:0000:0000:8a2e:0370:7334
    Copy to Clipboard Toggle word wrap
  2. DNS PTR レコードを追加して、API ロードバランサーを内部的に識別します。たとえば、dnsmasq を使用する場合は、dnsmasq.conf 設定ファイルを変更します。

    $ sudo nano /etc/dnsmasq.conf
    Copy to Clipboard Toggle word wrap
    ptr-record=<IP_address>.in-addr.arpa,api-int.<cluster_name>.<base_domain>
    ptr-record=10.1.168.192.in-addr.arpa,api-int.mycluster.example.com
    Copy to Clipboard Toggle word wrap
  3. DNS サーバーを再起動します。たとえば、dnsmasq を使用する場合は、以下のコマンドを実行します。

    $ sudo systemctl restart dnsmasq
    Copy to Clipboard Toggle word wrap

これらのレコードは、クラスター内のすべてのノードで解決できる必要があります。

5.14. 以前のインストールのクリーンアップ

以前にデプロイが失敗した場合は、OpenShift Container Platform を再度デプロイする前に、失敗した試行のアーティファクトを削除します。

手順

  1. OpenShift Container Platform クラスターをインストールする前に、次のコマンドを使用して、すべてのベアメタルノードの電源をオフにします。

    $ ipmitool -I lanplus -U <user> -P <password> -H <management_server_ip> power off
    Copy to Clipboard Toggle word wrap
  2. 次のスクリプトを使用して、以前のデプロイ試行時に残った古いブートストラップリソースをすべて削除します。

    for i in $(sudo virsh list | tail -n +3 | grep bootstrap | awk {'print $2'});
    do
      sudo virsh destroy $i;
      sudo virsh undefine $i;
      sudo virsh vol-delete $i --pool $i;
      sudo virsh vol-delete $i.ign --pool $i;
      sudo virsh pool-destroy $i;
      sudo virsh pool-undefine $i;
    done
    Copy to Clipboard Toggle word wrap
  3. 次のコマンドを使用して、以前のインストールにより生成されたアーティファクトを削除します。

    $ cd ; /bin/rm -rf auth/ bootstrap.ign master.ign worker.ign metadata.json \
    .openshift_install.log .openshift_install_state.json
    Copy to Clipboard Toggle word wrap
  4. 次のコマンドを使用して、OpenShift Container Platform マニフェストを再作成します。

    $ ./openshift-baremetal-install --dir ~/clusterconfigs create manifests
    Copy to Clipboard Toggle word wrap

5.15. レジストリーの作成に関する問題

非接続レジストリーの作成時に、レジストリーのミラーリングを試行する際に "User Not Authorized" エラーが発生する場合があります。このエラーは、新規の認証を既存の pull-secret.txt ファイルに追加できない場合に生じる可能性があります。

手順

  1. 認証が正常に行われていることを確認します。

    $ /usr/local/bin/oc adm release mirror \
      -a pull-secret-update.json
      --from=$UPSTREAM_REPO \
      --to-release-image=$LOCAL_REG/$LOCAL_REPO:${VERSION} \
      --to=$LOCAL_REG/$LOCAL_REPO
    Copy to Clipboard Toggle word wrap
    注記

    インストールイメージのミラーリングに使用される変数の出力例:

    UPSTREAM_REPO=${RELEASE_IMAGE}
    LOCAL_REG=<registry_FQDN>:<registry_port>
    LOCAL_REPO='ocp4/openshift4'
    Copy to Clipboard Toggle word wrap

    RELEASE_IMAGE および VERSION の値は、OpenShift インストールの環境のセットアップ セクションの OpenShift Installer の取得 の手順で設定されています。

  2. レジストリーのミラーリング後に、非接続環境でこれにアクセスできることを確認します。

    $ curl -k -u <user>:<password> https://registry.example.com:<registry_port>/v2/_catalog
    {"repositories":["<Repo_Name>"]}
    Copy to Clipboard Toggle word wrap

5.16. その他の問題点

5.16.1. runtime network not ready エラーへの対応

クラスターのデプロイメント後に、以下のエラーが発生する可能性があります。

`runtime network not ready: NetworkReady=false reason:NetworkPluginNotReady message:Network plugin returns error: Missing CNI default network`
Copy to Clipboard Toggle word wrap

Cluster Network Operator は、インストールプログラムによって作成される特別なオブジェクトに応じてネットワークコンポーネントをデプロイします。これは、コントロールプレーン (マスター) ノードが起動した後、ブートストラップコントロールプレーンが停止する前にインストールプロセスの初期段階で実行されます。これは、コントロールプレーン (マスター) ノードの起動の長い遅延や apiserver の通信の問題など、より判別しにくいインストールプログラムの問題を示している可能性があります。

手順

  1. openshift-network-operator namespace の Pod を検査します。

    $ oc get all -n openshift-network-operator
    Copy to Clipboard Toggle word wrap
    NAME                                    READY STATUS            RESTARTS   AGE
    pod/network-operator-69dfd7b577-bg89v   0/1   ContainerCreating 0          149m
    Copy to Clipboard Toggle word wrap
  2. provisioner ノードで、ネットワーク設定が存在することを判別します。

    $ kubectl get network.config.openshift.io cluster -oyaml
    Copy to Clipboard Toggle word wrap
    apiVersion: config.openshift.io/v1
    kind: Network
    metadata:
      name: cluster
    spec:
      serviceNetwork:
      - 172.30.0.0/16
      clusterNetwork:
      - cidr: 10.128.0.0/14
        hostPrefix: 23
      networkType: OVNKubernetes
    Copy to Clipboard Toggle word wrap

    存在しない場合は、インストールプログラムによって作成されていません。インストールプログラムによって作成されなかった理由を確認するには、次のコマンドを実行します。

    $ openshift-install create manifests
    Copy to Clipboard Toggle word wrap
  3. network-operator が実行されていることを確認します。

    $ kubectl -n openshift-network-operator get pods
    Copy to Clipboard Toggle word wrap
  4. ログを取得します。

    $ kubectl -n openshift-network-operator logs -l "name=network-operator"
    Copy to Clipboard Toggle word wrap

    3 つ以上のコントロールプレーンノードを持つ高可用性クラスターでは、Operator がリーダー選択を実行し、他のすべての Operator がスリープ状態になります。詳細は、Troubleshooting を参照してください。

5.16.2. "No disk found with matching rootDeviceHints" エラーメッセージへの対処

クラスターをデプロイした後、次のエラーメッセージが表示される場合があります。

No disk found with matching rootDeviceHints
Copy to Clipboard Toggle word wrap

No disk found with matching rootDeviceHints エラーメッセージに対処するための一時的な回避策は、rootDeviceHintsminSizeGigabytes: 300 に変更することです。

rootDeviceHints 設定を変更した後、CoreOS を起動し、次のコマンドを使用してディスク情報を確認します。

$ udevadm info /dev/sda
Copy to Clipboard Toggle word wrap

DL360 Gen 10 サーバーを使用している場合は、/dev/sda デバイス名が割り当てられている SD カードスロットがあることに注意してください。サーバーに SD カードが存在しない場合は、競合が発生する可能性があります。サーバーの BIOS 設定で SD カードスロットが無効になっていることを確認してください。

minSizeGigabytes の回避策が要件を満たしていない場合は、rootDeviceHints/dev/sda に戻さないといけない場合があります。この変更により、Ironic イメージが正常に起動できるようになります。

この問題を解決する別の方法は、ディスクのシリアル ID を使用することです。ただし、シリアル ID を見つけるのは困難な場合があり、設定ファイルが読みにくくなる可能性があることに注意してください。このパスを選択する場合は、前に説明したコマンドを使用してシリアル ID を収集し、それを設定に組み込んでください。

5.16.3. クラスターノードが DHCP 経由で正しい IPv6 アドレスを取得しない

クラスターノードが DHCP 経由で正しい IPv6 アドレスを取得しない場合は、以下の点を確認してください。

  1. 予約された IPv6 アドレスが DHCP 範囲外にあることを確認します。
  2. DHCP サーバーの IP アドレス予約では、予約で正しい DUID (DHCP 固有識別子) が指定されていることを確認します。以下に例を示します。

    # This is a dnsmasq dhcp reservation, 'id:00:03:00:01' is the client id and '18:db:f2:8c:d5:9f' is the MAC Address for the NIC
    id:00:03:00:01:18:db:f2:8c:d5:9f,openshift-master-1,[2620:52:0:1302::6]
    Copy to Clipboard Toggle word wrap
  3. Route Announcement が機能していることを確認します。
  4. DHCP サーバーが、IP アドレス範囲を提供する必要なインターフェイスでリッスンしていることを確認します。

5.16.4. クラスターノードが DHCP 経由で正しいホスト名を取得しない

IPv6 のデプロイメント時に、クラスターノードは DHCP でホスト名を取得する必要があります。NetworkManager はホスト名をすぐに割り当てない場合があります。コントロールプレーン (マスター) ノードは、以下のようなエラーを報告する可能性があります。

Failed Units: 2
  NetworkManager-wait-online.service
  nodeip-configuration.service
Copy to Clipboard Toggle word wrap

このエラーは、最初に DHCP サーバーからホスト名を受信せずにクラスターノードが起動する可能性があることを示しています。これにより、kubeletlocalhost.localdomain ホスト名で起動します。エラーに対処するには、ノードによるホスト名の更新を強制します。

手順

  1. hostname を取得します。

    [core@master-X ~]$ hostname
    Copy to Clipboard Toggle word wrap

    ホスト名が localhost の場合は、以下の手順に進みます。

    注記

    X はコントロールプレーンノード番号です。

  2. クラスターノードによる DHCP リースの更新を強制します。

    [core@master-X ~]$ sudo nmcli con up "<bare_metal_nic>"
    Copy to Clipboard Toggle word wrap

    <bare_metal_nic> を、baremetal ネットワークに対応する有線接続に置き換えます。

  3. hostname を再度確認します。

    [core@master-X ~]$ hostname
    Copy to Clipboard Toggle word wrap
  4. ホスト名が localhost.localdomain の場合は、NetworkManager を再起動します。

    [core@master-X ~]$ sudo systemctl restart NetworkManager
    Copy to Clipboard Toggle word wrap
  5. ホスト名がまだ localhost.localdomain の場合は、数分待機してから再度確認します。ホスト名が localhost.localdomain のままの場合は、直前の手順を繰り返します。
  6. nodeip-configuration サービスを再起動します。

    [core@master-X ~]$ sudo systemctl restart nodeip-configuration.service
    Copy to Clipboard Toggle word wrap

    このサービスは、正しいホスト名の参照で kubelet サービスを再設定します。

  7. kubelet が直前の手順で変更された後にユニットファイル定義を再読み込みします。

    [core@master-X ~]$ sudo systemctl daemon-reload
    Copy to Clipboard Toggle word wrap
  8. kubelet サービスを再起動します。

    [core@master-X ~]$ sudo systemctl restart kubelet.service
    Copy to Clipboard Toggle word wrap
  9. kubelet が正しいホスト名で起動されていることを確認します。

    [core@master-X ~]$ sudo journalctl -fu kubelet.service
    Copy to Clipboard Toggle word wrap

再起動時など、クラスターの稼働後にクラスターノードが正しいホスト名を取得しない場合、クラスターの csr は保留中になります。csr は承認 しません。承認すると、他の問題が生じる可能性があります。

csr の対応

  1. クラスターで CSR を取得します。

    $ oc get csr
    Copy to Clipboard Toggle word wrap
  2. 保留中の csrSubject Name: localhost.localdomain が含まれているかどうかを確認します。

    $ oc get csr <pending_csr> -o jsonpath='{.spec.request}' | base64 --decode | openssl req -noout -text
    Copy to Clipboard Toggle word wrap
  3. Subject Name: localhost.localdomain が含まれる csr を削除します。

    $ oc delete csr <wrong_csr>
    Copy to Clipboard Toggle word wrap

5.16.5. ルートがエンドポイントに到達しない

インストールプロセス時に、VRRP (Virtual Router Redundancy Protocol) の競合が発生する可能性があります。この競合は、特定のクラスター名を使用してクラスターデプロイメントの一部であった、以前に使用された OpenShift Container Platform ノードが依然として実行中であるものの、同じクラスター名を使用した現在の OpenShift Container Platform クラスターデプロイメントの一部ではない場合に発生する可能性があります。たとえば、クラスターはクラスター名 openshift を使用してデプロイされ、3 つのコントロールプレーン (マスター) ノードと 3 つのワーカーノードをデプロイします。後に、別のインストールで同じクラスター名 openshift が使用されますが、この再デプロイメントは 3 つのコントロールプレーン (マスター) ノードのみをインストールし、以前のデプロイメントの 3 つのワーカーノードを ON 状態のままにします。これにより、VRID (Virtual Router Identifier) の競合が発生し、VRRP が競合する可能性があります。

  1. ルートを取得します。

    $ oc get route oauth-openshift
    Copy to Clipboard Toggle word wrap
  2. サービスエンドポイントを確認します。

    $ oc get svc oauth-openshift
    Copy to Clipboard Toggle word wrap
    NAME              TYPE        CLUSTER-IP      EXTERNAL-IP   PORT(S)   AGE
    oauth-openshift   ClusterIP   172.30.19.162   <none>        443/TCP   59m
    Copy to Clipboard Toggle word wrap
  3. コントロールプレーン (マスター) ノードからサービスへのアクセスを試行します。

    [core@master0 ~]$ curl -k https://172.30.19.162
    Copy to Clipboard Toggle word wrap
    {
      "kind": "Status",
      "apiVersion": "v1",
      "metadata": {
      },
      "status": "Failure",
      "message": "forbidden: User \"system:anonymous\" cannot get path \"/\"",
      "reason": "Forbidden",
      "details": {
      },
      "code": 403
    Copy to Clipboard Toggle word wrap
  4. provisioner ノードからの authentication-operator エラーを特定します。

    $ oc logs deployment/authentication-operator -n openshift-authentication-operator
    Copy to Clipboard Toggle word wrap
    Event(v1.ObjectReference{Kind:"Deployment", Namespace:"openshift-authentication-operator", Name:"authentication-operator", UID:"225c5bd5-b368-439b-9155-5fd3c0459d98", APIVersion:"apps/v1", ResourceVersion:"", FieldPath:""}): type: 'Normal' reason: 'OperatorStatusChanged' Status for clusteroperator/authentication changed: Degraded message changed from "IngressStateEndpointsDegraded: All 2 endpoints for oauth-server are reporting"
    Copy to Clipboard Toggle word wrap

解決策

  1. すべてのデプロイメントのクラスター名が一意であり、競合が発生しないことを確認します。
  2. 同じクラスター名を使用するクラスターデプロイメントの一部ではない不正なノードをすべてオフにします。そうしないと、OpenShift Container Platform クラスターの認証 Pod が正常に起動されなくなる可能性があります。

5.16.6. 初回起動時の Ignition の失敗

初回起動時に、Ignition 設定が失敗する可能性があります。

手順

  1. Ignition 設定が失敗したノードに接続します。

    Failed Units: 1
      machine-config-daemon-firstboot.service
    Copy to Clipboard Toggle word wrap
  2. machine-config-daemon-firstboot サービスを再起動します。

    [core@worker-X ~]$ sudo systemctl restart machine-config-daemon-firstboot.service
    Copy to Clipboard Toggle word wrap

5.16.7. NTP が同期しない

OpenShift Container Platform クラスターのデプロイメントは、クラスターノード間の NTP の同期クロックによって異なります。同期クロックがない場合、時間の差が 2 秒を超えるとクロックのドリフトによりデプロイメントが失敗する可能性があります。

手順

  1. クラスターノードの AGE の差異の有無を確認します。以下に例を示します。

    $ oc get nodes
    Copy to Clipboard Toggle word wrap
    NAME                         STATUS   ROLES    AGE   VERSION
    master-0.cloud.example.com   Ready    master   145m   v1.29.4
    master-1.cloud.example.com   Ready    master   135m   v1.29.4
    master-2.cloud.example.com   Ready    master   145m   v1.29.4
    worker-2.cloud.example.com   Ready    worker   100m   v1.29.4
    Copy to Clipboard Toggle word wrap
  2. クロックのドリフトによる一貫性のないタイミングの遅延を確認します。以下に例を示します。

    $ oc get bmh -n openshift-machine-api
    Copy to Clipboard Toggle word wrap
    master-1   error registering master-1  ipmi://<out_of_band_ip>
    Copy to Clipboard Toggle word wrap
    $ sudo timedatectl
    Copy to Clipboard Toggle word wrap
                   Local time: Tue 2020-03-10 18:20:02 UTC
               Universal time: Tue 2020-03-10 18:20:02 UTC
                     RTC time: Tue 2020-03-10 18:36:53
                    Time zone: UTC (UTC, +0000)
    System clock synchronized: no
                  NTP service: active
              RTC in local TZ: no
    Copy to Clipboard Toggle word wrap

既存のクラスターでのクロックドリフトへの対応

  1. ノードに配信される chrony.conf ファイルの内容を含む Butane 設定ファイルを作成します。以下の例で、99-master-chrony.bu を作成して、ファイルをコントロールプレーンノードに追加します。ワーカーノードのファイルを変更するか、ワーカーロールに対してこの手順を繰り返すことができます。

    注記

    Butane の詳細は、「Butane を使用したマシン設定の作成」を参照してください。

    variant: openshift
    version: 4.16.0
    metadata:
      name: 99-master-chrony
      labels:
        machineconfiguration.openshift.io/role: master
    storage:
      files:
      - path: /etc/chrony.conf
        mode: 0644
        overwrite: true
        contents:
          inline: |
            server <NTP_server> iburst 
    1
    
            stratumweight 0
            driftfile /var/lib/chrony/drift
            rtcsync
            makestep 10 3
            bindcmdaddress 127.0.0.1
            bindcmdaddress ::1
            keyfile /etc/chrony.keys
            commandkey 1
            generatecommandkey
            noclientlog
            logchange 0.5
            logdir /var/log/chrony
    Copy to Clipboard Toggle word wrap
    1
    <NTP_server> を NTP サーバーの IP アドレスに置き換えます。
  2. Butane を使用して、ノードに配信される設定を含む MachineConfig オブジェクトファイル (99-master-chrony.yaml) を生成します。

    $ butane 99-master-chrony.bu -o 99-master-chrony.yaml
    Copy to Clipboard Toggle word wrap
  3. MachineConfig オブジェクトファイルを適用します。

    $ oc apply -f 99-master-chrony.yaml
    Copy to Clipboard Toggle word wrap
  4. System clock synchronized の値が yes であることを確認します。

    $ sudo timedatectl
    Copy to Clipboard Toggle word wrap
                   Local time: Tue 2020-03-10 19:10:02 UTC
               Universal time: Tue 2020-03-10 19:10:02 UTC
                     RTC time: Tue 2020-03-10 19:36:53
                    Time zone: UTC (UTC, +0000)
    System clock synchronized: yes
                  NTP service: active
              RTC in local TZ: no
    Copy to Clipboard Toggle word wrap

    デプロイメントの前にクロック同期を設定するには、マニフェストファイルを生成し、このファイルを openshift ディレクトリーに追加します。以下に例を示します。

    $ cp chrony-masters.yaml ~/clusterconfigs/openshift/99_masters-chrony-configuration.yaml
    Copy to Clipboard Toggle word wrap

    クラスターの作成を継続します。

5.17. インストールの確認

インストール後、インストールプログラムによってノードと Pod が正常にデプロイされたことを確認します。

手順

  1. OpenShift Container Platform クラスターノードが適切にインストールされると、以下の Ready 状態が STATUS 列に表示されます。

    $ oc get nodes
    Copy to Clipboard Toggle word wrap
    NAME                   STATUS   ROLES           AGE  VERSION
    master-0.example.com   Ready    master,worker   4h   v1.29.4
    master-1.example.com   Ready    master,worker   4h   v1.29.4
    master-2.example.com   Ready    master,worker   4h   v1.29.4
    Copy to Clipboard Toggle word wrap
  2. インストールプログラムによってすべての Pod が正常にデプロイされたことを確認します。以下のコマンドは、実行中の Pod、または出力の一部として完了した Pod を削除します。

    $ oc get pods --all-namespaces | grep -iv running | grep -iv complete
    Copy to Clipboard Toggle word wrap

第6章 installer-provisioned のインストール後の設定

installer-provisioned クラスターを正常にデプロイしたら、以下のインストール後の手順を考慮してください。

6.1. オプション: 非接続クラスターの NTP 設定

OpenShift Container Platform は、クラスターノードに chrony Network Time Protocol (NTP) サービスをインストールします。次の手順を使用して、コントロールプレーンノードに NTP サーバーを設定し、デプロイが成功した後にコンピュートノードをコントロールプレーンノードの NTP クライアントとして設定します。

OpenShift Container Platform のノードは、適切に実行するために日付と時刻が一致している必要があります。コンピュートノードがコントロールプレーンノード上の NTP サーバーから日付と時刻を取得すると、ルーティング可能なネットワークに接続していないために上位層の NTP サーバーにアクセスできないクラスターのインストールと操作が可能になります。

手順

  1. 次のコマンドを使用して、インストールホストに Butane をインストールします。

    $ sudo dnf -y install butane
    Copy to Clipboard Toggle word wrap
  2. コントロールプレーンノードの chrony.conf ファイルのコンテンツを含む Butane 設定 (99-master-chrony-conf-override.bu) を作成します。

    注記

    Butane の詳細は、「Butane を使用したマシン設定の作成」を参照してください。

    Butane 設定例

    variant: openshift
    version: 4.16.0
    metadata:
      name: 99-master-chrony-conf-override
      labels:
        machineconfiguration.openshift.io/role: master
    storage:
      files:
        - path: /etc/chrony.conf
          mode: 0644
          overwrite: true
          contents:
            inline: |
              # Use public servers from the pool.ntp.org project.
              # Please consider joining the pool (https://www.pool.ntp.org/join.html).
    
              # The Machine Config Operator manages this file
              server openshift-master-0.<cluster-name>.<domain> iburst 
    1
    
              server openshift-master-1.<cluster-name>.<domain> iburst
              server openshift-master-2.<cluster-name>.<domain> iburst
    
              stratumweight 0
              driftfile /var/lib/chrony/drift
              rtcsync
              makestep 10 3
              bindcmdaddress 127.0.0.1
              bindcmdaddress ::1
              keyfile /etc/chrony.keys
              commandkey 1
              generatecommandkey
              noclientlog
              logchange 0.5
              logdir /var/log/chrony
    
              # Configure the control plane nodes to serve as local NTP servers
              # for all compute nodes, even if they are not in sync with an
              # upstream NTP server.
    
              # Allow NTP client access from the local network.
              allow all
              # Serve time even if not synchronized to a time source.
              local stratum 3 orphan
    Copy to Clipboard Toggle word wrap

    1
    <cluster-name> はクラスターの名前に置き換え、<domain> は完全修飾ドメイン名に置き換える必要があります。
  3. Butane を使用して、コントロールプレーンノードに配信される設定が含まれる MachineConfig オブジェクトファイル (99-master-chrony-conf-override.yaml) を生成します。

    $ butane 99-master-chrony-conf-override.bu -o 99-master-chrony-conf-override.yaml
    Copy to Clipboard Toggle word wrap
  4. コントロールプレーンノード上の NTP サーバーを参照するコンピュートノードの chrony.conf ファイルの内容を含む Butane 設定 99-worker-chrony-conf-override.bu を作成します。

    Butane 設定例

    variant: openshift
    version: 4.16.0
    metadata:
      name: 99-worker-chrony-conf-override
      labels:
        machineconfiguration.openshift.io/role: worker
    storage:
      files:
        - path: /etc/chrony.conf
          mode: 0644
          overwrite: true
          contents:
            inline: |
              # The Machine Config Operator manages this file.
              server openshift-master-0.<cluster-name>.<domain> iburst 
    1
    
              server openshift-master-1.<cluster-name>.<domain> iburst
              server openshift-master-2.<cluster-name>.<domain> iburst
    
              stratumweight 0
              driftfile /var/lib/chrony/drift
              rtcsync
              makestep 10 3
              bindcmdaddress 127.0.0.1
              bindcmdaddress ::1
              keyfile /etc/chrony.keys
              commandkey 1
              generatecommandkey
              noclientlog
              logchange 0.5
              logdir /var/log/chrony
    Copy to Clipboard Toggle word wrap

    1
    <cluster-name> はクラスターの名前に置き換え、<domain> は完全修飾ドメイン名に置き換える必要があります。
  5. Butane を使用して、ワーカーノードに配信される設定が含まれる MachineConfig オブジェクトファイル (99-worker-chrony-conf-override.yaml) を生成します。

    $ butane 99-worker-chrony-conf-override.bu -o 99-worker-chrony-conf-override.yaml
    Copy to Clipboard Toggle word wrap
  6. 99-master-chrony-conf-override.yaml ポリシーをコントロールプレーンノードに適用します。

    $ oc apply -f 99-master-chrony-conf-override.yaml
    Copy to Clipboard Toggle word wrap

    出力例

    machineconfig.machineconfiguration.openshift.io/99-master-chrony-conf-override created
    Copy to Clipboard Toggle word wrap

  7. 99-worker-chrony-conf-override.yaml ポリシーをコンピュートノードに適用します。

    $ oc apply -f 99-worker-chrony-conf-override.yaml
    Copy to Clipboard Toggle word wrap

    出力例

    machineconfig.machineconfiguration.openshift.io/99-worker-chrony-conf-override created
    Copy to Clipboard Toggle word wrap

  8. 適用された NTP 設定のステータスを確認します。

    $ oc describe machineconfigpool
    Copy to Clipboard Toggle word wrap

6.2. インストール後のプロビジョニングネットワークの有効化

ベアメタルクラスター用の Assisted Installer および installer-provisioned installation は、provisioning ネットワークなしでクラスターをデプロイする機能を提供します。この機能は、概念実証クラスターや、各ノードのベースボード管理コントローラーが baremetal ネットワークを介してルーティング可能な場合に Redfish 仮想メディアのみを使用してデプロイするなどのシナリオ向けです。

Cluster Baremetal Operator (CBO) を使用してインストール後に provisioning ネットワークを有効にすることができます。

前提条件

  • すべてのワーカーノードおよびコントロールプレーンノードに接続されている専用の物理ネットワークが存在する必要があります。
  • ネイティブのタグなしの物理ネットワークを分離する必要があります。
  • provisioningNetwork 設定が Managed に設定されている場合、ネットワークには DHCP サーバーを含めることはできません。
  • OpenShift Container Platform 4.10 の provisioningInterface 設定を省略して、bootMACAddress 設定を使用できます。

手順

  1. provisioningInterface 設定を設定する場合、まずクラスターノードのプロビジョニングインターフェイス名を特定します。たとえば、eth0 または eno1 などです。
  2. クラスターノードの provisioning ネットワークインターフェイスで Preboot eXecution Environment (PXE) を有効にします。
  3. provisioning ネットワークの現在の状態を取得して、これをプロビジョニングカスタムリソース (CR) ファイルに保存します。

    $ oc get provisioning -o yaml > enable-provisioning-nw.yaml
    Copy to Clipboard Toggle word wrap
  4. プロビジョニング CR ファイルを変更します。

    $ vim ~/enable-provisioning-nw.yaml
    Copy to Clipboard Toggle word wrap

    provisioningNetwork 設定までスクロールダウンして、これを Disabled から Managed に変更します。次に、provisioningNetwork 設定の後に、provisioningIPprovisioningNetworkCIDRprovisioningDHCPRangeprovisioningInterface、および watchAllNameSpaces 設定を追加します。各設定に適切な値を指定します。

    apiVersion: v1
    items:
    - apiVersion: metal3.io/v1alpha1
      kind: Provisioning
      metadata:
        name: provisioning-configuration
      spec:
        provisioningNetwork: 
    1
    
        provisioningIP: 
    2
    
        provisioningNetworkCIDR: 
    3
    
        provisioningDHCPRange: 
    4
    
        provisioningInterface: 
    5
    
        watchAllNameSpaces: 
    6
    Copy to Clipboard Toggle word wrap
    1
    provisioningNetwork は、ManagedUnmanaged、または Disabled のいずれかになります。Managed に設定すると、Metal3 はプロビジョニングネットワークを管理し、CBO は設定済みの DHCP サーバーで Metal3 Pod をデプロイします。Unmanaged に設定すると、システム管理者は DHCP サーバーを手動で設定します。
    2
    provisioningIP は、DHCP サーバーおよび ironic がネットワークのプロビジョニングために使用する静的 IP アドレスです。この静的 IP アドレスは、DHCP 範囲外の provisioning 内でなければなりません。この設定を設定する場合は、provisioning ネットワークが Disabled の場合でも、有効な IP アドレスが必要です。静的 IP アドレスは metal3 Pod にバインドされます。metal3 Pod が失敗し、別のサーバーに移動する場合、静的 IP アドレスも新しいサーバーに移動します。
    3
    Classless Inter-Domain Routing (CIDR) アドレス。この設定を設定する場合は、provisioning ネットワークが Disabled の場合でも、有効な CIDR アドレスが必要です。例: 192.168.0.1/24
    4
    DHCP の範囲。この設定は、Managed プロビジョニングネットワークにのみ適用されます。provisioning ネットワークが Disabled の場合は、この設定を省略します。例: 192.168.0.64, 192.168.0.253
    5
    クラスターノードの provisioning インターフェイス用の NIC 名。provisioningInterface 設定は、Managed および Unmanaged プロビジョニングネットワークにのみ適用されます。provisioning ネットワークが Disabled の場合に、provisioningInterface 設定が省略されます。代わりに bootMACAddress 設定を使用するように provisioningInterface 設定を省略します。
    6
    metal3 がデフォルトの openshift-machine-api namespace 以外の namespace を監視するようにするには、この設定を true に設定します。デフォルト値は false です。
  5. 変更をプロビジョニング CR ファイルに保存します。
  6. プロビジョニング CR ファイルをクラスターに適用します。

    $ oc apply -f enable-provisioning-nw.yaml
    Copy to Clipboard Toggle word wrap

6.3. カスタマイズされた br-ex ブリッジを含むマニフェストオブジェクトの作成

configure-ovs.sh シェルスクリプトを使用してベアメタルプラットフォームで br-ex ブリッジを設定する代わりに、NMState 設定ファイルを含む NodeNetworkConfigurationPolicy (NNCP) カスタムリソース (CR) を作成することもできます。Kubernetes NMState Operator がその NMState 設定ファイルを使用して、カスタマイズされた br-ex ブリッジネットワーク設定をクラスター内の各ノードに作成します。

重要

NodeNetworkConfigurationPolicy CR を作成したら、クラスターのインストール中に作成された NMState 設定ファイルの内容を NNCP CR にコピーしてください。NNCP CR のファイルが不完全な場合、ファイルに記述されているネットワークポリシーをクラスター内のノードに適用できません。

この機能は、次のタスクをサポートします。

  • クラスターの最大転送単位 (MTU) を変更します。
  • MIImon (Media Independent Interface Monitor)、ボンディングモード、Quality of Service (QoS) などのさまざまなボンディングインターフェイスの属性を変更します。
  • DNS 値を更新しています。

カスタマイズされた br-ex ブリッジを含むマニフェストオブジェクトを作成する場合は、次のユースケースを検討してください。

  • Open vSwitch (OVS) または OVN-Kubernetes br-ex ブリッジネットワークの変更など、ブリッジにインストール後の変更を加えたい場合。configure-ovs.sh シェルスクリプトは、ブリッジへのインストール後の変更をサポートしていません。
  • ホストまたはサーバーの IP アドレスで使用可能なインターフェイスとは異なるインターフェイスにブリッジをデプロイします。
  • configure-ovs.sh シェルスクリプトでは不可能な、ブリッジの高度な設定を実行したいと考えています。これらの設定にスクリプトを使用すると、ブリッジが複数のネットワークインターフェイスに接続できず、インターフェイス間のデータ転送が促進されない可能性があります。

前提条件

  • configure-ovs の代替方法を使用して、カスタマイズされた br-ex を設定している。
  • Kubernetes NMState Operator がインストールされている。

手順

  • NodeNetworkConfigurationPolicy (NNCP) CR を作成し、カスタマイズされた br-ex ブリッジネットワーク設定を定義します。必要に応じて、ipv4.address.ipipv6.address.ip、またはその両方のパラメーターにマスカレード IP を設定するようにしてください。NNCP CR には常にマスカレード IP アドレスを含めてください。このアドレスは使用中の IP アドレスブロックと一致する必要があります。

    重要

    インストール後のタスクとして、既存の NNCP CR で定義したカスタマイズされた br-ex ブリッジのほとんどのパラメーター (カスタマイズされた br-ex ブリッジのプライマリー IP アドレスを除く) を設定できます。

    シングルスタッククラスターネットワークをデュアルスタッククラスターネットワークに変換する場合、NNCP CR でセカンダリー IPv6 アドレスは追加または変更できますが、既存のプライマリー IP アドレスは変更できません。

    IPv6 および IPv4 マスカレード IP アドレスを設定する NNCP CR の例

    apiVersion: nmstate.io/v1
    kind: NodeNetworkConfigurationPolicy
    metadata:
      name: worker-0-br-ex 
    1
    
    spec:
      nodeSelector:
        kubernetes.io/hostname: worker-0
        desiredState:
        interfaces:
        - name: enp2s0 
    2
    
          type: ethernet 
    3
    
          state: up 
    4
    
          ipv4:
            enabled: false 
    5
    
          ipv6:
            enabled: false
        - name: br-ex
          type: ovs-bridge
          state: up
          ipv4:
            enabled: false
            dhcp: false
          ipv6:
            enabled: false
            dhcp: false
          bridge:
            options:
              mcast-snooping-enable: true
            port:
            - name: enp2s0 
    6
    
            - name: br-ex
        - name: br-ex
          type: ovs-interface
          state: up
          copy-mac-from: enp2s0
          ipv4:
            enabled: true
            dhcp: true
            auto-route-metric: 48 
    7
    
            address:
            - ip: "169.254.169.2"
              prefix-length: 29
          ipv6:
            enabled: true
            dhcp: true
            auto-route-metric: 48
            address:
            - ip: "fd69::2"
            prefix-length: 125
    # ...
    Copy to Clipboard Toggle word wrap

    1
    ポリシーの名前。
    2
    インターフェイスの名前。
    3
    イーサネットのタイプ。
    4
    作成後のインターフェイスの要求された状態。
    5
    この例では、IPv4 と IPv6 を無効にします。
    6
    ブリッジが接続されているノード NIC。
    7
    br-ex デフォルトルートに常に最高の優先度 (最も低いメトリック値) を付与するには、パラメーターを 48 に設定します。この設定により、NetworkManager サービスによって自動的に設定される他のインターフェイスとのルーティングの競合が防止されます。

次のステップ

  • コンピュートノードをスケーリングして、クラスター内に存在する各コンピュートノードに、カスタマイズされた br-ex ブリッジを含むマニフェストオブジェクトを適用します。詳細は、関連情報 セクションの「クラスターの拡張」を参照してください。

6.4. カスタマイズされた br-ex ブリッジに破壊的な変更を加える

状況によっては、計画されたメンテナンスやネットワーク設定の更新のために 、br-ex ブリッジに破壊的な変更を加える必要がある場合があります。br-ex ブリッジは、ワークロードからのすべての外部ネットワークトラフィックのゲートウェイであるため、ブリッジに変更を加えると、Pod と仮想マシン (VM) が外部ネットワークから一時的に切断される可能性があります。

次の手順では、実行中のクラスターワークロードへの影響を最小限に抑えながら、br-ex ブリッジに破壊的な変更を加える例を示します。

クラスター内のすべてのノードが br-ex ブリッジの変更を受け取るには、クラスターを再起動する必要があります。既存の MachineConfig オブジェクトを編集しても再起動操作は強制されません。そのため、クラスターの再起動操作を強制するには、追加の MachineConfig オブジェクトを作成する必要があります。

重要

Red Hat は、インストール後のタスクとしてノードの IP アドレスの変更をサポートしていません。

前提条件

  • br-ex ブリッジを含むマニフェストオブジェクトを作成しました。
  • br-ex ブリッジが設定されたクラスターをデプロイしました。

手順

  1. br-ex ブリッジネットワークインターフェイスをカスタマイズするために、クラスターのインストール中に作成した NMState 設定ファイルに変更を加えます。

    重要

    MachineConfig オブジェクトを保存する前に、変更されたパラメーター値を確認します。間違った値を入力してファイルを保存すると、ファイルを元の状態に復元できなくなり、クラスターのネットワーク機能に影響します。

  2. 次のコマンドを入力して、base64 コマンドを使用して NMState 設定の内容を再エンコードします。

    $ base64 -w0 <nmstate_configuration>.yml 
    1
    Copy to Clipboard Toggle word wrap
    1
    <nmstate_configuration> を NMState リソース YAML ファイルの名前に置き換えます。
  3. クラスターのインストール中に作成した MachineConfig マニフェストファイルを更新し、カスタマイズされた br-ex ブリッジネットワークインターフェイスを再定義します。
  4. 次のコマンドを入力して、MachineConfig オブジェクトからの更新をクラスターに適用します。

    $ oc apply -f <machine_config>.yml
    Copy to Clipboard Toggle word wrap
  5. ベア MachineConfig オブジェクトを作成しますが、ファイルの設定は変更しません。

    apiVersion: machineconfiguration.openshift.io/v1
    kind: MachineConfig
    metadata:
      labels:
        machineconfiguration.openshift.io/role: master
      name: 10-force-reboot-master
    spec:
      config:
        ignition:
          version: 3.2.0
        storage:
          files:
          - contents:
              source: data:text/plain;charset=utf-8;base64,
            mode: 0644
            overwrite: true
            path: /etc/force-reboot
    ---
    apiVersion: machineconfiguration.openshift.io/v1
    kind: MachineConfig
    metadata:
      labels:
        machineconfiguration.openshift.io/role: worker
      name: 10-force-reboot-worker
    spec:
      config:
        ignition:
          version: 3.2.0
        storage:
          files:
          - contents:
              source: data:text/plain;charset=utf-8;base64,
            mode: 0644
            overwrite: true
            path: /etc/force-reboot
    # ...
    Copy to Clipboard Toggle word wrap
  6. 次のコマンドを入力して、ベア MachineConfig オブジェクト設定をクラスターに適用し、再起動操作を開始します。

    $ oc apply -f <bare_machine_config>.yml
    Copy to Clipboard Toggle word wrap
  7. 次のコマンドを入力して、クラスター内の各ノードが再起動が完了したことを示す Ready ステータスになっていることを確認します。

    $ oc get nodes
    Copy to Clipboard Toggle word wrap
  8. 次のコマンドを入力して、ベア MachineConfig オブジェクトを削除します。

    $ oc delete machineconfig <machine_config_name>
    Copy to Clipboard Toggle word wrap

検証

  • nmstatectl ツールを使用して次のコマンドを実行し、br-ex ブリッジインターフェイスの設定を確認します。このツールは 、MachineConfig オブジェクトをデプロイした場所ではなく、br-ex ブリッジインターフェイスを実行するノードをチェックします。

    $ sudo nmstatectl show br-ex
    Copy to Clipboard Toggle word wrap

第7章 クラスターの拡張

installer-provisioned OpenShift Container Platform クラスターのデプロイ後に、以下の手順を使用してワーカーノードの数を拡張することができます。それぞれの候補となるワーカーノードが前提条件を満たしていることを確認します。

注記

RedFish Virtual Media を使用してクラスターを拡張するには、最低限のファームウェア要件を満たす必要があります。RedFish Virtual Media を使用したクラスターの拡張時の詳細は、前提条件 セクションの 仮想メディアを使用したインストールのファームウェア要件 を参照してください。

7.1. ベアメタルノードの準備

クラスターを拡張するには、ノードに関連する IP アドレスを提供する必要があります。これは、静的設定または DHCP (動的ホスト設定プロトコル) サーバーを使用して行うことができます。DHCP サーバーを使用してクラスターを拡張する場合、各ノードには DHCP 予約が必要です。

IP アドレスの予約し、それらを静的 IP アドレスにする

一部の管理者は、各ノードの IP アドレスが DHCP サーバーがない状態で一定になるように静的 IP アドレスの使用を選択します。NMState で静的 IP アドレスを設定するには、「OpenShift インストールの環境のセットアップ」セクションの「オプション: install-config.yaml でのホストネットワークインターフェイスの設定」で追加の詳細を参照してください。

ベアメタルノードを準備するには、プロビジョナーノードから以下の手順を実行する必要があります。

手順

  1. oc バイナリーを取得します。

    $ curl -s https://mirror.openshift.com/pub/openshift-v4/clients/ocp/$VERSION/openshift-client-linux-$VERSION.tar.gz | tar zxvf - oc
    Copy to Clipboard Toggle word wrap
    $ sudo cp oc /usr/local/bin
    Copy to Clipboard Toggle word wrap
  2. ベースボード管理コントローラー (BMC) を使用してベアメタルノードの電源を切り、オフになっていることを確認します。
  3. ベアメタルノードのベースボード管理コントローラーのユーザー名およびパスワードを取得します。次に、ユーザー名とパスワードから base64 文字列を作成します。

    $ echo -ne "root" | base64
    Copy to Clipboard Toggle word wrap
    $ echo -ne "password" | base64
    Copy to Clipboard Toggle word wrap
  4. ベアメタルノードの設定ファイルを作成します。静的設定または DHCP サーバーのどちらを使用しているかに応じて、次の例の bmh.yaml ファイルのいずれかを使用し、環境に合わせて YAML の値を置き換えます。

    $ vim bmh.yaml
    Copy to Clipboard Toggle word wrap
    • 静的設定 bmh.yaml :

      ---
      apiVersion: v1 
      1
      
      kind: Secret
      metadata:
       name: openshift-worker-<num>-network-config-secret 
      2
      
       namespace: openshift-machine-api
      type: Opaque
      stringData:
       nmstate: | 
      3
      
        interfaces: 
      4
      
        - name: <nic1_name> 
      5
      
          type: ethernet
          state: up
          ipv4:
            address:
            - ip: <ip_address> 
      6
      
              prefix-length: 24
            enabled: true
        dns-resolver:
          config:
            server:
            - <dns_ip_address> 
      7
      
        routes:
          config:
          - destination: 0.0.0.0/0
            next-hop-address: <next_hop_ip_address> 
      8
      
            next-hop-interface: <next_hop_nic1_name> 
      9
      
      ---
      apiVersion: v1
      kind: Secret
      metadata:
        name: openshift-worker-<num>-bmc-secret 
      10
      
        namespace: openshift-machine-api
      type: Opaque
      data:
        username: <base64_of_uid> 
      11
      
        password: <base64_of_pwd> 
      12
      
      ---
      apiVersion: metal3.io/v1alpha1
      kind: BareMetalHost
      metadata:
        name: openshift-worker-<num> 
      13
      
        namespace: openshift-machine-api
      spec:
        online: True
        bootMACAddress: <nic1_mac_address> 
      14
      
        bmc:
          address: <protocol>://<bmc_url> 
      15
      
          credentialsName: openshift-worker-<num>-bmc-secret 
      16
      
          disableCertificateVerification: True 
      17
      
          username: <bmc_username> 
      18
      
          password: <bmc_password> 
      19
      
        rootDeviceHints:
          deviceName: <root_device_hint> 
      20
      
        preprovisioningNetworkDataName: openshift-worker-<num>-network-config-secret 
      21
      Copy to Clipboard Toggle word wrap
      1
      新しく作成されたノードのネットワークインターフェイスを設定するには、ネットワーク設定を含むシークレットの名前を指定します。nmstate 構文に従って、ノードのネットワーク設定を定義します。NMState 構文の設定に関する詳細は、「オプション: install-config.yaml ファイルでのホストネットワークインターフェイスの設定」を参照してください。
      2 10 13 16
      namecredentialsName、および preprovisioningNetworkDataName フィールドの <num> は、ベアメタルノードのワーカー番号に置き換えます。
      3
      NMState YAML 構文を追加して、ホストインターフェイスを設定します。
      4
      オプション: nmstate を使用してネットワークインターフェイスを設定しており、インターフェイスを無効にする場合は、次のように IP アドレスを enabled: false に設定して state: up を設定します。
      ---
         interfaces:
         - name: <nic_name>
           type: ethernet
           state: up
           ipv4:
             enabled: false
           ipv6:
             enabled: false
      Copy to Clipboard Toggle word wrap
      5 6 7 8 9
      <nic1_name><ip_address><dns_ip_address><next_hop_ip_address>、および <next_hop_nic1_name> を適切な値に置き換えます。
      11 12
      <base64_of_uid><base64_of_pwd> は、ユーザー名とパスワードの base64 文字列に置き換えます。
      14
      <nic1_mac_address> を、ベアメタルノードの最初の NIC の MAC アドレスに置き換えます。追加の BMC 設定オプションは、「BMC アドレス指定」のセクションを参照してください。
      15
      <protocol> は、IPMI、RedFish などの BMC プロトコルに置き換えます。<bmc_url> を、ベアメタルノードのベースボード管理コントローラーの URL に置き換えます。
      17
      証明書の検証をスキップするには、disableCertificateVerification を true に設定します。
      18 19
      <bmc_username><bmc_password> を BMC ユーザー名とパスワードの文字列に置き換えます。
      20
      オプション: root デバイスヒントを指定する場合は、<root_device_hint> をデバイスパスに置き換えます。
      21
      オプション: 新しく作成されたノードのネットワークインターフェイスを設定した場合は、BareMetalHost CR の preprovisioningNetworkDataName にネットワーク設定のシークレット名を指定します。
    • DHCP 設定 bmh.yaml :

      ---
      apiVersion: v1
      kind: Secret
      metadata:
        name: openshift-worker-<num>-bmc-secret 
      1
      
        namespace: openshift-machine-api
      type: Opaque
      data:
        username: <base64_of_uid> 
      2
      
        password: <base64_of_pwd> 
      3
      
      ---
      apiVersion: metal3.io/v1alpha1
      kind: BareMetalHost
      metadata:
        name: openshift-worker-<num> 
      4
      
        namespace: openshift-machine-api
      spec:
        online: True
        bootMACAddress: <nic1_mac_address> 
      5
      
        bmc:
          address: <protocol>://<bmc_url> 
      6
      
          credentialsName: openshift-worker-<num>-bmc-secret 
      7
      
          disableCertificateVerification: True 
      8
      
          username: <bmc_username> 
      9
      
          password: <bmc_password> 
      10
      
        rootDeviceHints:
          deviceName: <root_device_hint> 
      11
      
        preprovisioningNetworkDataName: openshift-worker-<num>-network-config-secret 
      12
      Copy to Clipboard Toggle word wrap
      1 4 7
      namecredentialsName、および preprovisioningNetworkDataName フィールドの <num> は、ベアメタルノードのワーカー番号に置き換えます。
      2 3
      <base64_of_uid><base64_of_pwd> は、ユーザー名とパスワードの base64 文字列に置き換えます。
      5
      <nic1_mac_address> を、ベアメタルノードの最初の NIC の MAC アドレスに置き換えます。追加の BMC 設定オプションは、「BMC アドレス指定」のセクションを参照してください。
      6
      <protocol> は、IPMI、RedFish などの BMC プロトコルに置き換えます。<bmc_url> を、ベアメタルノードのベースボード管理コントローラーの URL に置き換えます。
      8
      証明書の検証をスキップするには、disableCertificateVerification を true に設定します。
      9 10
      <bmc_username><bmc_password> を BMC ユーザー名とパスワードの文字列に置き換えます。
      11
      オプション: root デバイスヒントを指定する場合は、<root_device_hint> をデバイスパスに置き換えます。
      12
      オプション: 新しく作成されたノードのネットワークインターフェイスを設定した場合は、BareMetalHost CR の preprovisioningNetworkDataName にネットワーク設定のシークレット名を指定します。
    注記

    既存のベアメタルノードの MAC アドレスが、プロビジョニングしようとしているベアメタルホストの MAC アドレスと一致する場合、Ironic インストールは失敗します。ホストの登録、検査、クリーニング、または他の Ironic 手順が失敗する場合、ベアメタル Operator はインストールを継続的に再試行します。詳細は、「ホストの重複した MAC アドレスの診断」を参照してください。

  5. ベアメタルノードを作成します。

    $ oc -n openshift-machine-api create -f bmh.yaml
    Copy to Clipboard Toggle word wrap

    出力例

    secret/openshift-worker-<num>-network-config-secret created
    secret/openshift-worker-<num>-bmc-secret created
    baremetalhost.metal3.io/openshift-worker-<num> created
    Copy to Clipboard Toggle word wrap

    <num> はワーカー番号です。

  6. ベアメタルノードの電源をオンにし、これを検査します。

    $ oc -n openshift-machine-api get bmh openshift-worker-<num>
    Copy to Clipboard Toggle word wrap

    <num> はワーカーノード番号です。

    出力例

    NAME                    STATE       CONSUMER   ONLINE   ERROR
    openshift-worker-<num>  available              true
    Copy to Clipboard Toggle word wrap

    注記

    ワーカーノードがクラスターに参加できるようにするには、machineset オブジェクトを BareMetalHost オブジェクトの数にスケーリングします。ノードは手動または自動でスケーリングできます。ノードを自動的にスケーリングするには、machinesetmetal3.io/autoscale-to-hosts アノテーションを使用します。

7.2. ベアメタルコントロールプレーンノードの交換

以下の手順を使用して、installer-provisioned OpenShift Container Platform コントロールプレーンノードを置き換えます。

重要

既存のコントロールプレーンホストから BareMetalHost オブジェクト定義を再利用する場合は、externallyProvisioned フィールドを true に設定したままにしないでください。

既存のコントロールプレーン BareMetalHost オブジェクトが、OpenShift Container Platform インストールプログラムによってプロビジョニングされた場合には、externallyProvisioned フラグが true に設定されている可能性があります。

前提条件

  • cluster-admin ロールを持つユーザーとしてクラスターにアクセスできる。
  • etcd のバックアップを取得している。

    重要

    問題が発生した場合にクラスターを復元できるように、この手順を実行する前に etcd のバックアップを作成してください。etcd バックアップの作成に関する詳細は、関連情報 セクションを参照してください。

手順

  1. Bare Metal Operator が使用可能であることを確認します。

    $ oc get clusteroperator baremetal
    Copy to Clipboard Toggle word wrap

    出力例

    NAME        VERSION   AVAILABLE   PROGRESSING   DEGRADED   SINCE   MESSAGE
    baremetal   4.16   True        False         False      3d15h
    Copy to Clipboard Toggle word wrap

  2. 古い BareMetalHost オブジェクトおよび Machine オブジェクトを削除します。

    $ oc delete bmh -n openshift-machine-api <host_name>
    $ oc delete machine -n openshift-machine-api <machine_name>
    Copy to Clipboard Toggle word wrap

    <host_name> をホストの名前に、<machine_name> をマシンの名前に置き換えます。マシン名は CONSUMER フィールドの下に表示されます。

    BareMetalHost オブジェクトと Machine オブジェクトを削除すると、マシンコントローラーは Node オブジェクトを自動的に削除します。

  3. 新しい BareMetalHost オブジェクトとシークレットを作成して BMC 認証情報を保存します。

    $ cat <<EOF | oc apply -f -
    apiVersion: v1
    kind: Secret
    metadata:
      name: control-plane-<num>-bmc-secret 
    1
    
      namespace: openshift-machine-api
    data:
      username: <base64_of_uid> 
    2
    
      password: <base64_of_pwd> 
    3
    
    type: Opaque
    ---
    apiVersion: metal3.io/v1alpha1
    kind: BareMetalHost
    metadata:
      name: control-plane-<num> 
    4
    
      namespace: openshift-machine-api
    spec:
      automatedCleaningMode: disabled
      bmc:
        address: <protocol>://<bmc_ip> 
    5
    
        credentialsName: control-plane-<num>-bmc-secret 
    6
    
      bootMACAddress: <NIC1_mac_address> 
    7
    
      bootMode: UEFI
      externallyProvisioned: false
      online: true
    EOF
    Copy to Clipboard Toggle word wrap
    1 4 6
    name および credentialsName フィールドの <num> は、ベアメタルノードのコントロールプレーン番号に置き換えます。
    2
    <base64_of_uid> を、ユーザー名の base64 文字列に置き換えます。
    3
    <base64_of_pwd>> を、パスワードの base64 文字列に置き換えます。
    5
    <protocol>redfishredfish-virtualmediaidrac-virtualmedia などの BMC プロトコルに置き換えます。<bmc_ip> は、ベアメタルノードのベースボード管理コントローラーの IP アドレスに置き換えます。その他の BMC 設定オプションについては、関連情報 セクションの「BMC アドレス指定」を参照してください。
    7
    <NIC1_mac_address> は、ベアメタルノードの最初の NIC の MAC アドレスに置き換えます。

    検査が完了すると、BareMetalHost オブジェクトが作成され、プロビジョニングできるようになります。

  4. 利用可能な BareMetalHost オブジェクトを表示します。

    $ oc get bmh -n openshift-machine-api
    Copy to Clipboard Toggle word wrap

    出力例

    NAME                          STATE                    CONSUMER                   ONLINE   ERROR   AGE
    control-plane-1.example.com   available                control-plane-1            true             1h10m
    control-plane-2.example.com   externally provisioned   control-plane-2            true             4h53m
    control-plane-3.example.com   externally provisioned   control-plane-3            true             4h53m
    compute-1.example.com         provisioned              compute-1-ktmmx            true             4h53m
    compute-1.example.com         provisioned              compute-2-l2zmb            true             4h53m
    Copy to Clipboard Toggle word wrap

    コントロールプレーンノード用の MachineSet オブジェクトがないため、代わりに Machine オブジェクトを作成する必要があります。別のコントロールプレーン Machine オブジェクトから providerSpec をコピーできます。

  5. Machine オブジェクトを作成します。

    $ cat <<EOF | oc apply -f -
    apiVersion: machine.openshift.io/v1beta1
    kind: Machine
    metadata:
      annotations:
        metal3.io/BareMetalHost: openshift-machine-api/control-plane-<num> 
    1
    
      labels:
        machine.openshift.io/cluster-api-cluster: control-plane-<num> 
    2
    
        machine.openshift.io/cluster-api-machine-role: master
        machine.openshift.io/cluster-api-machine-type: master
      name: control-plane-<num> 
    3
    
      namespace: openshift-machine-api
    spec:
      metadata: {}
      providerSpec:
        value:
          apiVersion: baremetal.cluster.k8s.io/v1alpha1
          customDeploy:
            method: install_coreos
          hostSelector: {}
          image:
            checksum: ""
            url: ""
          kind: BareMetalMachineProviderSpec
          metadata:
            creationTimestamp: null
          userData:
            name: master-user-data-managed
    EOF
    Copy to Clipboard Toggle word wrap
    1 2 3
    namelabels、および annotations フィールドの <num> は、ベアメタルノードのコントロールプレーン番号に置き換えます。
  6. BareMetalHost オブジェクトを表示するには、次のコマンドを実行します。

    $ oc get bmh -A
    Copy to Clipboard Toggle word wrap

    出力例

    NAME                          STATE                    CONSUMER                   ONLINE   ERROR   AGE
    control-plane-1.example.com   provisioned              control-plane-1            true             2h53m
    control-plane-2.example.com   externally provisioned   control-plane-2            true             5h53m
    control-plane-3.example.com   externally provisioned   control-plane-3            true             5h53m
    compute-1.example.com         provisioned              compute-1-ktmmx            true             5h53m
    compute-2.example.com         provisioned              compute-2-l2zmb            true             5h53m
    Copy to Clipboard Toggle word wrap

  7. RHCOS のインストール後、BareMetalHost がクラスターに追加されていることを確認します。

    $ oc get nodes
    Copy to Clipboard Toggle word wrap

    出力例

    NAME                           STATUS      ROLES     AGE   VERSION
    control-plane-1.example.com    available   master    4m2s  v1.29.4
    control-plane-2.example.com    available   master    141m  v1.29.4
    control-plane-3.example.com    available   master    141m  v1.29.4
    compute-1.example.com          available   worker    87m   v1.29.4
    compute-2.example.com          available   worker    87m   v1.29.4
    Copy to Clipboard Toggle word wrap

    注記

    新しいコントロールプレーンノードの交換後、新しいノードで実行されている etcd Pod は crashloopback ステータスになります。詳細は、関連情報 セクションの「正常でない etcd メンバーの置き換え」を参照してください。

7.3. ベアメタルネットワークに仮想メディアを使用してデプロイメントする準備

provisioning ネットワークが有効で、baremetal ネットワークで Virtual Media を使用してクラスターを拡張する場合は、以下の手順を使用します。

前提条件

  • baremetal ネットワークおよび provisioning ネットワークを使用する既存のクラスターがあります。

手順

  1. provisioning カスタムリソース (CR) を編集して、baremetal ネットワーク上の仮想メディアを使用したデプロイを有効にします。

    oc edit provisioning
    Copy to Clipboard Toggle word wrap
      apiVersion: metal3.io/v1alpha1
      kind: Provisioning
      metadata:
        creationTimestamp: "2021-08-05T18:51:50Z"
        finalizers:
        - provisioning.metal3.io
        generation: 8
        name: provisioning-configuration
        resourceVersion: "551591"
        uid: f76e956f-24c6-4361-aa5b-feaf72c5b526
      spec:
        provisioningDHCPRange: 172.22.0.10,172.22.0.254
        provisioningIP: 172.22.0.3
        provisioningInterface: enp1s0
        provisioningNetwork: Managed
        provisioningNetworkCIDR: 172.22.0.0/24
        virtualMediaViaExternalNetwork: true 
    1
    
      status:
        generations:
        - group: apps
          hash: ""
          lastGeneration: 7
          name: metal3
          namespace: openshift-machine-api
          resource: deployments
        - group: apps
          hash: ""
          lastGeneration: 1
          name: metal3-image-cache
          namespace: openshift-machine-api
          resource: daemonsets
        observedGeneration: 8
        readyReplicas: 0
    Copy to Clipboard Toggle word wrap
    1
    virtualMediaViaExternalNetwork: trueprovisioning CR に追加します。
  2. イメージ URL が存在する場合は、machineset を編集して API VIP アドレスを使用します。この手順は、バージョン 4.9 以前でインストールされたクラスターにのみ適用されます。

    oc edit machineset
    Copy to Clipboard Toggle word wrap
      apiVersion: machine.openshift.io/v1beta1
      kind: MachineSet
      metadata:
        creationTimestamp: "2021-08-05T18:51:52Z"
        generation: 11
        labels:
          machine.openshift.io/cluster-api-cluster: ostest-hwmdt
          machine.openshift.io/cluster-api-machine-role: worker
          machine.openshift.io/cluster-api-machine-type: worker
        name: ostest-hwmdt-worker-0
        namespace: openshift-machine-api
        resourceVersion: "551513"
        uid: fad1c6e0-b9da-4d4a-8d73-286f78788931
      spec:
        replicas: 2
        selector:
          matchLabels:
            machine.openshift.io/cluster-api-cluster: ostest-hwmdt
            machine.openshift.io/cluster-api-machineset: ostest-hwmdt-worker-0
        template:
          metadata:
            labels:
              machine.openshift.io/cluster-api-cluster: ostest-hwmdt
              machine.openshift.io/cluster-api-machine-role: worker
              machine.openshift.io/cluster-api-machine-type: worker
              machine.openshift.io/cluster-api-machineset: ostest-hwmdt-worker-0
          spec:
            metadata: {}
            providerSpec:
              value:
                apiVersion: baremetal.cluster.k8s.io/v1alpha1
                hostSelector: {}
                image:
                  checksum: http:/172.22.0.3:6181/images/rhcos-<version>.<architecture>.qcow2.<md5sum> 
    1
    
                  url: http://172.22.0.3:6181/images/rhcos-<version>.<architecture>.qcow2 
    2
    
                kind: BareMetalMachineProviderSpec
                metadata:
                  creationTimestamp: null
                userData:
                  name: worker-user-data
      status:
        availableReplicas: 2
        fullyLabeledReplicas: 2
        observedGeneration: 11
        readyReplicas: 2
        replicas: 2
    Copy to Clipboard Toggle word wrap
    1
    API VIP アドレスを使用するように checksum URL を編集します。
    2
    url URL を編集して API VIP アドレスを使用します。

7.4. クラスター内の新しいホストをプロビジョニングする際の重複する MAC アドレスの診断

クラスター内の既存のベアメタルノードの MAC アドレスが、クラスターに追加しようとしているベアメタルホストの MAC アドレスと一致する場合、ベアメタル Operator はホストを既存のノードに関連付けます。ホストの登録、検査、クリーニング、または他の Ironic 手順が失敗する場合、ベアメタル Operator はインストールを継続的に再試行します。障害が発生したベアメタルホストの登録エラーが表示されます。

openshift-machine-api namespace で実行されているベアメタルホストを調べることで、重複する MAC アドレスを診断できます。

前提条件

  • ベアメタルに OpenShift Container Platform クラスターをインストールする。
  • OpenShift Container Platform CLI (oc) をインストールする。
  • cluster-admin 権限を持つユーザーとしてログインしている。

手順

プロビジョニングに失敗したベアメタルホストが既存のノードと同じ MAC アドレスを持つかどうかを判断するには、以下を実行します。

  1. openshift-machine-api namespace で実行されているベアメタルホストを取得します。

    $ oc get bmh -n openshift-machine-api
    Copy to Clipboard Toggle word wrap

    出力例

    NAME                 STATUS   PROVISIONING STATUS      CONSUMER
    openshift-master-0   OK       externally provisioned   openshift-zpwpq-master-0
    openshift-master-1   OK       externally provisioned   openshift-zpwpq-master-1
    openshift-master-2   OK       externally provisioned   openshift-zpwpq-master-2
    openshift-worker-0   OK       provisioned              openshift-zpwpq-worker-0-lv84n
    openshift-worker-1   OK       provisioned              openshift-zpwpq-worker-0-zd8lm
    openshift-worker-2   error    registering
    Copy to Clipboard Toggle word wrap

  2. 障害が発生したホストのステータスに関する詳細情報を表示するには、<bare_metal_host_name> をホストの名前に置き換えて、以下のコマンドを実行します。

    $ oc get -n openshift-machine-api bmh <bare_metal_host_name> -o yaml
    Copy to Clipboard Toggle word wrap

    出力例

    ...
    status:
      errorCount: 12
      errorMessage: MAC address b4:96:91:1d:7c:20 conflicts with existing node openshift-worker-1
      errorType: registration error
    ...
    Copy to Clipboard Toggle word wrap

7.5. ベアメタルノードのプロビジョニング

ベアメタルノードをプロビジョニングするには、プロビジョナーノードから以下の手順を実行する必要があります。

手順

  1. ベアメタルノードをプロビジョニングする前に、STATEavailable であることを確認してください。

    $  oc -n openshift-machine-api get bmh openshift-worker-<num>
    Copy to Clipboard Toggle word wrap

    <num> はワーカーノード番号です。

    NAME              STATE     ONLINE ERROR  AGE
    openshift-worker  available true          34h
    Copy to Clipboard Toggle word wrap
  2. ワーカーノードの数を取得します。

    $ oc get nodes
    Copy to Clipboard Toggle word wrap
    NAME                                                STATUS   ROLES           AGE     VERSION
    openshift-master-1.openshift.example.com            Ready    master          30h     v1.29.4
    openshift-master-2.openshift.example.com            Ready    master          30h     v1.29.4
    openshift-master-3.openshift.example.com            Ready    master          30h     v1.29.4
    openshift-worker-0.openshift.example.com            Ready    worker          30h     v1.29.4
    openshift-worker-1.openshift.example.com            Ready    worker          30h     v1.29.4
    Copy to Clipboard Toggle word wrap
  3. コンピュートマシンセットを取得します。

    $ oc get machinesets -n openshift-machine-api
    Copy to Clipboard Toggle word wrap
    NAME                                DESIRED   CURRENT   READY   AVAILABLE   AGE
    ...
    openshift-worker-0.example.com      1         1         1       1           55m
    openshift-worker-1.example.com      1         1         1       1           55m
    Copy to Clipboard Toggle word wrap
  4. ワーカーノードの数を 1 つ増やします。

    $ oc scale --replicas=<num> machineset <machineset> -n openshift-machine-api
    Copy to Clipboard Toggle word wrap

    <num> は、新しいワーカーノード数に置き換えます。<machineset> は、前のステップで設定したコンピュートマシンの名前に置き換えます。

  5. ベアメタルノードのステータスを確認します。

    $ oc -n openshift-machine-api get bmh openshift-worker-<num>
    Copy to Clipboard Toggle word wrap

    <num> はワーカーノード番号です。STATE が ready から provisioning に変わります。

    NAME                    STATE             CONSUMER                          ONLINE   ERROR
    openshift-worker-<num>  provisioning      openshift-worker-<num>-65tjz      true
    Copy to Clipboard Toggle word wrap

    provisioning ステータスは、OpenShift Container Platform クラスターがノードをプロビジョニングするまでそのままになります。この場合、30 分以上の時間がかかる場合があります。ノードがプロビジョニングされると、状態は provisioned に変わります。

    NAME                    STATE             CONSUMER                          ONLINE   ERROR
    openshift-worker-<num>  provisioned       openshift-worker-<num>-65tjz      true
    Copy to Clipboard Toggle word wrap
  6. プロビジョニングが完了したら、ベアメタルノードが準備状態であることを確認します。

    $ oc get nodes
    Copy to Clipboard Toggle word wrap
    NAME                                          STATUS   ROLES   AGE     VERSION
    openshift-master-1.openshift.example.com      Ready    master  30h     v1.29.4
    openshift-master-2.openshift.example.com      Ready    master  30h     v1.29.4
    openshift-master-3.openshift.example.com      Ready    master  30h     v1.29.4
    openshift-worker-0.openshift.example.com      Ready    worker  30h     v1.29.4
    openshift-worker-1.openshift.example.com      Ready    worker  30h     v1.29.4
    openshift-worker-<num>.openshift.example.com  Ready    worker  3m27s   v1.29.4
    Copy to Clipboard Toggle word wrap

    kubelet を確認することもできます。

    $ ssh openshift-worker-<num>
    Copy to Clipboard Toggle word wrap
    [kni@openshift-worker-<num>]$ journalctl -fu kubelet
    Copy to Clipboard Toggle word wrap

Legal Notice

Copyright © 2025 Red Hat

OpenShift documentation is licensed under the Apache License 2.0 (https://www.apache.org/licenses/LICENSE-2.0).

Modified versions must remove all Red Hat trademarks.

Portions adapted from https://github.com/kubernetes-incubator/service-catalog/ with modifications by Red Hat.

Red Hat, Red Hat Enterprise Linux, the Red Hat logo, the Shadowman logo, JBoss, OpenShift, Fedora, the Infinity logo, and RHCE are trademarks of Red Hat, Inc., registered in the United States and other countries.

Linux® is the registered trademark of Linus Torvalds in the United States and other countries.

Java® is a registered trademark of Oracle and/or its affiliates.

XFS® is a trademark of Silicon Graphics International Corp. or its subsidiaries in the United States and/or other countries.

MySQL® is a registered trademark of MySQL AB in the United States, the European Union and other countries.

Node.js® is an official trademark of Joyent. Red Hat Software Collections is not formally related to or endorsed by the official Joyent Node.js open source or commercial project.

The OpenStack® Word Mark and OpenStack logo are either registered trademarks/service marks or trademarks/service marks of the OpenStack Foundation, in the United States and other countries and are used with the OpenStack Foundation’s permission. We are not affiliated with, endorsed or sponsored by the OpenStack Foundation, or the OpenStack community.

All other trademarks are the property of their respective owners.

トップに戻る
Red Hat logoGithubredditYoutubeTwitter

詳細情報

試用、購入および販売

コミュニティー

Red Hat ドキュメントについて

Red Hat をお使いのお客様が、信頼できるコンテンツが含まれている製品やサービスを活用することで、イノベーションを行い、目標を達成できるようにします。 最新の更新を見る.

多様性を受け入れるオープンソースの強化

Red Hat では、コード、ドキュメント、Web プロパティーにおける配慮に欠ける用語の置き換えに取り組んでいます。このような変更は、段階的に実施される予定です。詳細情報: Red Hat ブログ.

会社概要

Red Hat は、企業がコアとなるデータセンターからネットワークエッジに至るまで、各種プラットフォームや環境全体で作業を簡素化できるように、強化されたソリューションを提供しています。

Theme

© 2025 Red Hat