2 ノード OpenShift クラスターのインストール
OpenShift Container Platform を 2 つのノードにインストールする
概要
第1章 Two-Node with Arbiter リンクのコピーリンクがクリップボードにコピーされました!
2 つのコントロールプレーンノードと 1 つのローカル arbiter ノードを備えた OpenShift Container Platform クラスターは、コンパクトでコスト効果の高い OpenShift Container Platform トポロジーです。arbiter ノードは完全な etcd データを保存し、etcd クォーラムを維持してスプリットブレインを防止します。arbiter ノードは、追加のコントロールプレーンコンポーネント kube-apiserver および kube-controller-manager は実行せず、ワークロードも実行しません。
2 つのコントロールプレーンノードと 1 つのローカル arbiter ノードが含まれるクラスターをインストールするには、arbiter ロールを少なくとも 1 つのノードに割り当て、クラスターのコントロールプレーンノード数を 2 に設定します。OpenShift Container Platform では現在 arbiter ノードの数に制限はありませんが、ハードウェアリソースの使用を最小限に抑えるために、arbiter ノードは通常のデプロイメントには 1 つだけ含めます。
インストール後に、2 つのコントロールプレーンノードと 1 つのローカル arbiter ノードを備えたクラスターに arbiter ノードを追加できますが、標準のマルチノードクラスターには追加できません。ローカルノード arbiter を持つ 2 ノード OpenShift クラスターと標準トポロジー間で変換することもできません。
以下の方法のいずれかを使用して、2 つのコントロールプレーンノードと 1 つのローカル arbiter ノードを持つクラスターをインストールできます。
- ベアメタルへのインストール: ローカル arbiter ノードの設定
- Agent-based Installer を使用したインストール: ローカル arbiter ノードの設定
arbiter を備えたクラスターの場合、マシン間の接続性に関するネットワーク要件は通常のクラスターと同じです。詳細は、ネットワーク接続要件 を参照してください。
第2章 Two-node with Fencing リンクのコピーリンクがクリップボードにコピーされました!
2.1. フェンシング機能を備えた 2 ノード OpenShift クラスターのインストール準備 リンクのコピーリンクがクリップボードにコピーされました!
フェンシング機能を備えた 2 ノード OpenShift クラスターは、テクノロジープレビュー機能です。テクノロジープレビュー機能は、Red Hat 製品のサービスレベルアグリーメント (SLA) の対象外であり、機能的に完全ではないことがあります。Red Hat は、実稼働環境でこれらを使用することを推奨していません。テクノロジープレビュー機能は、最新の製品機能をいち早く提供して、開発段階で機能のテストを行い、フィードバックを提供していただくことを目的としています。
Red Hat のテクノロジープレビュー機能のサポート範囲に関する詳細は、テクノロジープレビュー機能のサポート範囲 を参照してください。
フェンシング機能を備えた 2 ノード OpenShift クラスターは、ハードウェアのフットプリントを削減しながら、高可用性 (HA) を実現します。この構成は、完全な 3 ノードのコントロールプレーンクラスターをデプロイすることが現実的ではない分散環境またはエッジ環境向けに設計されています。
2 ノードクラスターにはコンピュートノードは含まれません。2 台のコントロールプレーンマシンが、クラスターの管理に加えて、ユーザーワークロードを実行します。
フェンシングは Pacemaker によって管理されます。Pacemaker は、ノードのベースボード管理コンソール (BMC) を使用して応答しないノードを隔離できます。応答しないノードがフェンスされた後、残りのノードは、リソース破損のリスクを負うことなく、クラスターの操作を安全に継続できます。
フェンシング機能を備えた 2 ノード OpenShift クラスターは、user-provisioned infrastructure 方式または installer-provisioned infrastructure 方式のいずれかを使用してデプロイできます。
フェンシング機能を備えた 2 ノード OpenShift クラスターには、次のホストが必要です。
| ホスト | 説明 |
|---|---|
| 2 台のコントロールプレーンマシン | コントロールプレーンマシンは、コントロールプレーンを設定する Kubernetes および OpenShift Container Platform サービスを実行します。 |
| 1 台の一時的なブートストラップマシン | ブートストラップマシンは、コントロールプレーンマシンに OpenShift Container Platform クラスターをデプロイするために必要です。クラスターのインストール後にブートストラップマシンを削除できます。 |
ブートストラップおよびコントロールプレーンマシンでは、Red Hat Enterprise Linux CoreOS (RHCOS) をオペレーティングシステムとして使用する必要があります。RHCOS をインストールしてブートストラッププロセスを開始する手順は、RHCOS のインストールおよび OpenShift Container Platform ブートストラッププロセスの開始 を参照してください。
RHCOS を使用するための要件は、user-provisioned infrastructure デプロイメントにのみ適用されます。installer-provisioned infrastructure デプロイメントの場合、ブートストラップおよびコントロールプレーンマシンがインストールプログラムによって自動的にプロビジョニングされるため、RHCOS を手動でインストールする必要はありません。
2.1.1. フェンシング機能を備えた 2 ノード OpenShift クラスターをインストールするための最小リソース要件 リンクのコピーリンクがクリップボードにコピーされました!
それぞれのクラスターマシンは、以下の最小要件を満たしている必要があります。
| マシン | オペレーティングシステム | CPU [1] | RAM | Storage | 1 秒あたりの入出力 (IOPS) [1] |
|---|---|---|---|---|---|
| ブートストラップ | RHCOS | 4 | 16 GB | 120 GB | 300 |
| コントロールプレーン | RHCOS | 4 | 16 GB | 120 GB | 300 |
- 1 つの CPU は、同時マルチスレッド (SMT) またはハイパースレッディングが有効にされていない場合に 1 つの物理コアと同等です。これが有効にされている場合、(コアごとのスレッド x コア数) x ソケット数 = CPU という数式を使用して対応する比率を計算します。
- OpenShift Container Platform と Kubernetes は、ディスクのパフォーマンスの影響を受けるため、特にコントロールプレーンノードの etcd には、より高速なストレージが推奨されます。多くのクラウドプラットフォームでは、ストレージサイズと IOPS が連動してスケーリングされるため、十分なパフォーマンスを得るには、ストレージボリュームを過剰に割り当てる必要がある場合がある点に注意してください。
2.1.2. ユーザーによってプロビジョニングされる DNS の要件 リンクのコピーリンクがクリップボードにコピーされました!
OpenShift Container Platform のデプロイメントでは、内部通信、証明書の検証、および自動ノード検出の目的で、クラスターコンポーネントが特定の DNS 名前解決基準を満たしていることを確認する必要があります。
以下は、必要なクラスターコンポーネントのリストです。
- Kubernetes API
- OpenShift Container Platform のアプリケーションワイルドカード
- ブートストラップマシンおよびコントロールプレーンマシン
Kubernetes API、ブートストラップマシン、コントロールプレーンマシンには、逆引き DNS 解決も必要です。
DNS A/AAAA または CNAME レコードは名前解決に使用され、PTR レコードは逆引き名前解決に使用されます。ホスト名が DHCP によって提供されていない場合は、Red Hat Enterprise Linux CoreOS (RHCOS) は逆引きレコードを使用してすべてのノードのホスト名を設定するため、逆引きレコードは重要です。さらに、逆引きレコードは、OpenShift Container Platform が動作するために必要な証明書署名要求 (CSR) を生成するために使用されます。
各クラスターノードにホスト名を提供するために DHCP サーバーを使用することが推奨されます。詳細は、user-provisioned infrastructure に関する DHCP の推奨事項 のセクションを参照してください。
以下の DNS レコードは、user-provisioned OpenShift Container Platform クラスターに必要で、これはインストール前に設定されている必要があります。各レコードで、<cluster_name> はクラスター名で、<base_domain> は、install-config.yaml ファイルに指定するベースドメインです。完全な DNS レコードは <component>.<cluster_name>.<base_domain>. の形式を取ります。
| コンポーネント | レコード | 説明 |
|---|---|---|
| Kubernetes API |
| API ロードバランサーを特定するための DNS A/AAAA または CNAME レコード、および DNS PTR レコード。これらのレコードは、クラスター外のクライアントおよびクラスター内のすべてのノードで解決できる必要があります。 |
|
| API ロードバランサーを内部的に識別するための DNS A/AAAA または CNAME レコード、および DNS PTR レコード。これらのレコードは、クラスター内のすべてのノードで解決できる必要があります。 重要 API サーバーは、Kubernetes に記録されるホスト名でワーカーノードを解決できる必要があります。API サーバーがノード名を解決できない場合、プロキシーされる API 呼び出しが失敗し、Pod からログを取得できなくなる可能性があります。 | |
| ルート |
| アプリケーション Ingress ロードバランサーを参照するワイルドカード DNS A/AAAA または CNAME レコード。アプリケーション Ingress ロードバランサーは、Ingress コントローラー Pod を実行するマシンをターゲットにします。デフォルトでは、Ingress Controller Pod はコンピュートノード上で実行されます。2 ノードクラスターや 3 ノードクラスターなど、専用のコンピュートノードがないクラスタートポロジーでは、コントロールプレーンノードにもワーカーラベルが付けられるため、Ingress Pod はコントロールプレーンノードでスケジュールされます。これらのレコードは、クラスター外のクライアントおよびクラスター内のすべてのノードで解決できる必要があります。
たとえば、 |
| ブートストラップマシン |
| ブートストラップマシンを識別するための DNS A / AAAA または CNAME レコード、および DNS PTR レコード。これらのレコードは、クラスター内のノードで解決できる必要があります。 |
| コントロールプレーンマシン |
| コントロールプレーンノードの各マシンを特定するための DNS A/AAAA または CNAME レコードおよび DNS PTR レコード。これらのレコードは、クラスター内のノードで解決できる必要があります。 |
OpenShift Container Platform 4.4 以降では、DNS 設定で etcd ホストおよび SRV レコードを指定する必要はありません。
dig コマンドを使用して、名前および逆引き名前解決を確認することができます。検証手順の詳細は、user-provisioned infrastructure の DNS 解決の検証 のセクションを参照してください。
2.1.2.1. user-provisioned クラスターの DNS 設定の例 リンクのコピーリンクがクリップボードにコピーされました!
A レコードと PTR レコードの設定例が、user-provisioned infrastructure に OpenShift Container Platform をデプロイするための DNS 要件をどのように満たしているかを理解するには、DNS 設定例を参照してください。
ここに掲載されている DNS 設定例は参考用であり、特定の DNS 解決を選択する際の助言を意図したものではありません。
これらの例では、クラスター名は ocp4 で、ベースドメインは example.com です。
フェンシング機能を備えた 2 ノードクラスターでは、コントロールプレーンマシンもスケジュール可能なワーカーノードになります。したがって、DNS 設定には、その 2 つのコントロールプレーンノードのみを含める必要があります。後でコンピュートマシンを追加する場合は、標準のユーザープロビジョニングインストール方式と同様に、対応する A レコードと PTR レコードを指定してください。
BIND ゾーンファイルの以下の例は、user-provisioned クラスターの名前解決の DNS A レコードの例を示しています。
この例では、同じロードバランサーが Kubernetes API およびアプリケーションの Ingress トラフィックに使用されます。実稼働のシナリオでは、API およびアプリケーション Ingress ロードバランサーを個別にデプロイし、それぞれのロードバランサーインフラストラクチャーを分離してスケーリングすることができます。
$TTL 1W
@ IN SOA ns1.example.com. root (
2019070700 ; serial
3H ; refresh (3 hours)
30M ; retry (30 minutes)
2W ; expiry (2 weeks)
1W ) ; minimum (1 week)
IN NS ns1.example.com.
IN MX 10 smtp.example.com.
;
;
ns1.example.com. IN A 192.168.1.5
smtp.example.com. IN A 192.168.1.5
;
helper.example.com. IN A 192.168.1.5
helper.ocp4.example.com. IN A 192.168.1.5
;
api.ocp4.example.com. IN A 192.168.1.5
api-int.ocp4.example.com. IN A 192.168.1.5
;
*.apps.ocp4.example.com. IN A 192.168.1.5
;
bootstrap.ocp4.example.com. IN A 192.168.1.96
;
control-plane0.ocp4.example.com. IN A 192.168.1.97
control-plane1.ocp4.example.com. IN A 192.168.1.98
;
;
;EOF
各項目の説明:
api.ocp4.example.com.- Kubernetes API の名前解決を提供します。レコードは API ロードバランサーの IP アドレスを参照します。
api-int.ocp4.example.com.- Kubernetes API の名前解決を提供します。レコードは API ロードバランサーの IP アドレスを参照し、内部クラスター通信に使用されます。
*.apps.ocp4.example.com.- ワイルドカードルートの名前解決を提供します。レコードは、アプリケーション Ingress ロードバランサーの IP アドレスを参照します。アプリケーション Ingress ロードバランサーは、Ingress コントローラー Pod を実行するマシンをターゲットにします。
bootstrap.ocp4.example.com- ブートストラップマシンの名前解決を提供します。
control-plane0.ocp4.example.com- コントロールプレーンマシンの名前解決を提供します。
以下の BIND ゾーンファイルの例では、user-provisioned クラスターの逆引き名前解決の PTR レコードの例を示しています。
$TTL 1W
@ IN SOA ns1.example.com. root (
2019070700 ; serial
3H ; refresh (3 hours)
30M ; retry (30 minutes)
2W ; expiry (2 weeks)
1W ) ; minimum (1 week)
IN NS ns1.example.com.
;
5.1.168.192.in-addr.arpa. IN PTR api.ocp4.example.com.
5.1.168.192.in-addr.arpa. IN PTR api-int.ocp4.example.com.
;
96.1.168.192.in-addr.arpa. IN PTR bootstrap.ocp4.example.com.
;
97.1.168.192.in-addr.arpa. IN PTR control-plane0.ocp4.example.com.
98.1.168.192.in-addr.arpa. IN PTR control-plane1.ocp4.example.com.
;
;
;EOF
各項目の説明:
api.ocp4.example.com.- Kubernetes API の逆引き DNS 解決を提供します。PTR レコードは、API ロードバランサーのレコード名を参照します。
api-int.ocp4.example.com.- Kubernetes API の逆引き DNS 解決を提供します。PTR レコードは、API ロードバランサーのレコード名を参照し、内部クラスター通信に使用されます。
bootstrap.ocp4.example.com.- ブートストラップマシンの逆引き DNS 解決を提供します。
control-plane0.ocp4.example.com.- コントロールプレーンマシン向けに、ebootstrap.ocp4.example.com.verse DNS 解決を提供します。
PTR レコードは、OpenShift Container Platform アプリケーションのワイルドカードには必要ありません。
2.1.3. インストーラーによってプロビジョニングされる DNS の要件 リンクのコピーリンクがクリップボードにコピーされました!
クライアントは、baremetal ネットワーク経由で OpenShift Container Platform クラスターのノードにアクセスします。ネットワーク管理者は、正規名の拡張がクラスター名であるサブドメインまたはサブゾーンを設定する必要があります。
<cluster_name>.<base_domain>
以下に例を示します。
test-cluster.example.com
OpenShift Container Platform には、クラスターメンバーシップ情報を使用して A/AAAA レコードを生成する機能が含まれます。これにより、ノード名が IP アドレスに解決されます。ノードが API に登録されると、クラスターは CoreDNS-mDNS を使用せずにこれらのノード情報を分散できます。これにより、マルチキャスト DNS に関連付けられたネットワークトラフィックがなくなります。
CoreDNS を正しく機能させるには、アップストリームの DNS サーバーへの TCP 接続と UDP 接続の両方が必要です。アップストリームの DNS サーバーが OpenShift Container Platform クラスターノードから TCP 接続と UDP 接続の両方を受信できることを確認します。
OpenShift Container Platform のデプロイメントでは、以下のコンポーネントに DNS 名前解決が必要です。
- 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>. の形式を取ります。
| コンポーネント | レコード | 説明 |
|---|---|---|
| Kubernetes API |
| A/AAAA レコードと PTR レコード。API ロードバランサーを識別します。これらのレコードは、クラスター外のクライアントおよびクラスター内のすべてのノードで解決できる必要があります。 |
| ルート |
| ワイルドカード A/AAAA レコードは、アプリケーションの Ingress ロードバランサーを参照します。アプリケーション Ingress ロードバランサーは、Ingress コントローラー Pod を実行するノードをターゲットにします。Ingress Controller Pod は、デフォルトでワーカーノードで実行されます。これらのレコードは、クラスター外のクライアントおよびクラスター内のすべてのノードで解決できる必要があります。
たとえば、 |
dig コマンドを使用して、DNS 解決を確認できます。
2.1.4. フェンシング機能を備えた 2 ノードクラスター用の Ingress ロードバランサーの設定 リンクのコピーリンクがクリップボードにコピーされました!
フェンシング機能を備えた 2 ノード OpenShift クラスターをインストールする前に、外部 Ingress ロードバランサー (LB) を設定する必要があります。Ingress LB は、コントロールプレーンノードで実行される Ingress Controller Pod に、外部アプリケーショントラフィックを転送します。どちらのノードも能動的にトラフィックを受信できます。
前提条件
- フェンシングが有効な 2 台のコントロールプレーンノードがある。
- ロードバランサーから両方のコントロールプレーンノードへのネットワーク接続がある。
-
api.<cluster_name>.<base_domain>および*.apps.<cluster_name>.<base_domain>の DNS レコードを作成した。 - エンドポイントのヘルスチェックをサポートする外部ロードバランサーがある。
手順
次のポートのトラフィックを転送するようにロードバランサーを設定します。
-
6443: Kubernetes API サーバー 80および443: アプリケーション Ingress両方のコントロールプレーンノードにトラフィックを転送する必要があります。
-
- ロードバランサーのヘルスチェックを設定します。応答するノードにのみロードバランサーがトラフィックを送信するように、バックエンドのエンドポイントを監視する必要があります。
両方のコントロールプレーンノードにトラフィックを転送するようにロードバランサーを設定します。次の例は、2 台のコントロールプレーンノードを設定する方法を示しています。
frontend api_frontend bind *:6443 mode tcp default_backend api_backend backend api_backend mode tcp balance roundrobin server cp0 <cp0_ip>:6443 check server cp1 <cp1_ip>:6443 check frontend ingress_frontend bind *:80 bind *:443 mode tcp default_backend ingress_backend backend ingress_backend mode tcp balance roundrobin server cp0 <cp0_ip>:80 check server cp1 <cp1_ip>:80 check server cp0 <cp0_ip>:443 check server cp1 <cp1_ip>:443 checkロードバランサーの設定を確認します。
外部クライアントから、次のコマンドを実行します。
$ curl -k https://api.<cluster_name>.<base_domain>:6443/version外部クライアントから、次のコマンドを実行してアプリケーションルートにアクセスします。
$ curl https://<app>.<cluster_name>.<base_domain>
コントロールプレーンノードを 1 台シャットダウンすることで、ロードバランサーがそのノードへのトラフィックの送信を停止する一方で、他方のノードがリクエストの処理し続けることを確認できます。
2.1.5. カスタマイズした br-ex ブリッジのマニフェストオブジェクトの作成 リンクのコピーリンクがクリップボードにコピーされました!
インストール後にクラスターのネットワーク設定を変更するには、マニフェストオブジェクトを作成する必要があります。このマニフェストにより、クラスターの外部ネットワーク接続を管理する br-ex ブリッジを設定します。
このマニフェストを作成する手順は、「カスタマイズした br-ex ブリッジのマニフェストファイルの作成」を参照してください。
2.2. フェンシング機能を備えた 2 ノード OpenShift クラスターのインストール リンクのコピーリンクがクリップボードにコピーされました!
フェンシング機能を備えた 2 ノード OpenShift クラスターは、テクノロジープレビュー機能です。テクノロジープレビュー機能は、Red Hat 製品のサービスレベルアグリーメント (SLA) の対象外であり、機能的に完全ではないことがあります。Red Hat は、実稼働環境でこれらを使用することを推奨していません。テクノロジープレビュー機能は、最新の製品機能をいち早く提供して、開発段階で機能のテストを行い、フィードバックを提供していただくことを目的としています。
Red Hat のテクノロジープレビュー機能のサポート範囲に関する詳細は、テクノロジープレビュー機能のサポート範囲 を参照してください。
フェンシング機能を備えた 2 ノード OpenShift クラスターは、installer-provisioned infrastructure または user-provisioned infrastructure インストール方式のいずれかを使用してデプロイできます。次の例は、両方式の install-config.yaml 設定のサンプルを示しています。
2.2.1. フェンシング機能を備えた 2 ノード installer-provisioned infrastructure クラスターのサンプル install-config.yaml リンクのコピーリンクがクリップボードにコピーされました!
次の install-config.yaml 設定は、installer-provisioned infrastructure 方式を使用してフェンシング機能を備えた 2 ノード OpenShift クラスターをデプロイするためのテンプレートとして使用できます。
問題が発生した場合にクラスターを復元できるように、続行する前に etcd のバックアップを実行してください。
サンプル install-config.yaml 設定
apiVersion: v1
baseDomain: example.com
compute:
- name: worker
replicas: 0
controlPlane:
name: master
replicas: 2
fencing:
credentials:
- hostname: <control_0_hostname>
address: https://<redfish-api-url>
username: <username>
password: <password>
certificateVerification: Disabled
- hostname: <control_1_hostname>
address: https://<redfish-api-url>
username: <username>
password: <password>
certificateVerification: Enabled
metadata:
name: <cluster_name>
featureSet: TechPreviewNoUpgrade
platform:
baremetal:
apiVIPs:
- <api_ip>
ingressVIPs:
- <wildcard_ip>
hosts:
- name: <control_0_hostname>
role: master
bmc:
address: <bmc_address>
username: <bmc_username>
password: <bmc_password>
bootMACAddress: <boot_mac>
- name: <control_1_hostname>
role: master
bmc:
address: <bmc_address>
username: <bmc_username>
password: <bmc_password>
bootMACAddress: <boot_mac>
pullSecret: '<pull_secret>'
sshKey: '<ssh_public_key>'
-
compute.replicas: 2 ノードのフェンシングクラスターにはワーカーノードが含まれていないため、このフィールドを0に設定します。 -
controlPlane.replicas: 2 ノードのフェンシングデプロイメントの場合は、このフィールドを2に設定します。 -
fencing.credentials.hostname: 各コントロールプレーンノードのベースボード管理コンソール (BMC) の認証情報を指定します。これらの認証情報はノードのフェンシングに必要であり、スプリットブレインシナリオを防ぎます。 -
fencing.credentials.certificateVerification: Redfish URL が自己署名証明書を使用する場合、このフィールドをDisabledに設定します。自己署名証明書の使用は、内部でホストされているエンドポイントでは一般的です。有効な CA 署名証明書を使用している URL の場合は、このフィールドをEnabledに設定します。 -
metadata.name: クラスター名は、ホスト名と DNS レコードの接頭辞として使用されます。 -
featureSet: 2 ノード OpenShift クラスターのデプロイを有効にするには、このフィールドをTechPreviewNoUpgradeに設定します。 -
platform.baremetal.apiVIPsおよびplatform.baremetal.ingressVIPs: API および Ingress エンドポイントの仮想 IP。これらの IP に、すべてのノードと外部クライアントからアクセスできることを確認してください。 -
pullSecret: クラスターコンポーネントのコンテナーイメージをプルするために必要な認証情報を含めます。 -
sshKey: インストール後にクラスターノードにアクセスするための SSH 公開鍵。
2.2.2. フェンシング機能を備えた 2 ノード user-provisioned infrastructure クラスターのサンプル install-config.yaml リンクのコピーリンクがクリップボードにコピーされました!
次の install-config.yaml 設定は、user-provisioned infrastructure 方式を使用してフェンシング機能を備えた 2 ノード OpenShift クラスターをデプロイするためのテンプレートとして使用できます。
問題が発生した場合にクラスターを復元できるように、続行する前に etcd のバックアップを実行してください。
サンプル install-config.yaml 設定
apiVersion: v1
baseDomain: example.com
compute:
- name: worker
replicas: 0
controlPlane:
name: master
replicas: 2
fencing:
credentials:
- hostname: <control_0_hostname>
address: https://<redfish-api-url>
username: <username>
password: <password>
- hostname: <control_1_hostname>
address: https://<redfish-api-url>
username: <username>
password: <password>
metadata:
name: <cluster_name>
featureSet: TechPreviewNoUpgrade
platform:
none: {}
pullSecret: '<pull_secret>'
sshKey: '<ssh_public_key>'
-
compute.replicas: 2 ノードのフェンシングクラスターにはワーカーノードが含まれていないため、このフィールドを0に設定します。 -
controlPlane.replicas: 2 ノードのフェンシングデプロイメントの場合は、このフィールドを2に設定します。 -
fencing.credentials.hostname: 各コントロールプレーンノードの BMC の認証情報を指定します。 -
metadata.name: クラスター名は、ホスト名と DNS レコードの接頭辞として使用されます。 -
featureSet: 2 ノード OpenShift クラスターのデプロイを有効にします。 -
platform.noneuser-provisioned infrastructure デプロイメントの場合、プラットフォームをnoneに設定します。ベアメタルホストは、インストールプログラムの外部で事前にプロビジョニングされます。 -
pullSecret: クラスターコンポーネントのコンテナーイメージをプルするために必要な認証情報を含めます。 -
sshKey: インストール後にクラスターノードにアクセスするための SSH 公開鍵。
2.3. インストール後のトラブルシューティングと回復 リンクのコピーリンクがクリップボードにコピーされました!
フェンシング機能を備えた 2 ノード OpenShift クラスターは、テクノロジープレビュー機能です。テクノロジープレビュー機能は、Red Hat 製品のサービスレベルアグリーメント (SLA) の対象外であり、機能的に完全ではないことがあります。Red Hat は、実稼働環境でこれらを使用することを推奨していません。テクノロジープレビュー機能は、最新の製品機能をいち早く提供して、開発段階で機能のテストを行い、フィードバックを提供していただくことを目的としています。
Red Hat のテクノロジープレビュー機能のサポート範囲に関する詳細は、テクノロジープレビュー機能のサポート範囲 を参照してください。
次のセクションは、フェンシング機能を備えた 2 ノード OpenShift クラスターで発生した問題からの回復に役立ちます。
2.3.3. フェンシング機能を備えた 2 ノード OpenShift クラスターのコントロールプレーンノードの置き換え リンクのコピーリンクがクリップボードにコピーされました!
2 ノード OpenShift クラスター内の障害が発生したコントロールプレーンノードを置き換えることができます。置き換え用のノードでは、障害が発生したノードと同じホスト名と IP アドレスを使用する必要があります。
前提条件
- 障害を免れ、正常に動作しているコントロールプレーンノード 1 台ある。
- マシンが実行中でないこと、またはノードが準備完了状態でないことを確認した。
-
cluster-adminロールを持つユーザーとしてクラスターにアクセスできる。 - 障害が発生したノードのホスト名と IP アドレスがわかっている。
問題が発生した場合にクラスターを復元できるように、続行する前に etcd のバックアップを実行してください。
手順
次のコマンドを実行してクォーラムの状態を確認します。
$ sudo pcs quorum status出力例
Quorum information ------------------ Date: Fri Oct 3 14:15:31 2025 Quorum provider: corosync_votequorum Nodes: 2 Node ID: 1 Ring ID: 1.16 Quorate: Yes Votequorum information ---------------------- Expected votes: 2 Highest expected: 2 Total votes: 2 Quorum: 1 Flags: 2Node Quorate WaitForAll Membership information ---------------------- Nodeid Votes Qdevice Name 1 1 NR master-0 (local) 2 1 NR master-1クォーラムが失われた状態で、1 台のコントロールプレーンノードがまだ実行されている場合は、次のコマンドを実行して、障害を免れたノードでクォーラムを手動で復元します。
$ sudo pcs quorum unblock1 台のノードでのみ障害が発生した場合は、次のコマンドを実行して、障害を免れたノードで etcd が実行されていることを確認します。
$ sudo pcs resource status etcdetcd が実行されていない場合は、次のコマンドを実行して etcd を再起動します。
$ sudo pcs resource cleanup etcdそれでも etcd が起動しない場合は、フェンシングをスキップして、障害を免れたノードで etcd を手動で強制的に起動します。
重要このコマンドを実行する前に、置き換え対象のノードがアクセス不能であることを確認してください。そうしないと、etcd が破損する危険があります。
$ sudo pcs resource debug-stop etcd$ sudo OCF_RESKEY_CRM_meta_notify_start_resource='etcd' pcs resource debug-start etcd回復後、etcd は障害を免れたノード上で正常に実行されている必要があります。
次のコマンドを実行して、障害が発生したノードの etcd シークレットを削除します。
$ oc project openshift-etcd$ oc delete secret etcd-peer-<node_name>$ oc delete secret etcd-serving-<node_name>$ oc delete secret etcd-serving-metrics-<node_name>注記障害が発生したノードを置き換えるには、まずその etcd シークレットを削除する必要があります。etcd が稼働している間は、API サーバーがこれらのコマンドに応答するまでに時間がかかる場合があります。
障害が発生したノードのリソースを削除します。
BareMetalHost(BMH) オブジェクトがある場合は、次のコマンドを実行してオブジェクトをリスト表示し、置き換え対象のホストを特定します。$ oc get bmh -n openshift-machine-api次のコマンドを実行して、障害が発生したノードの BMH オブジェクトを削除します。
$ oc delete bmh/<bmh_name> -n openshift-machine-api次のコマンドを実行して、
Machineオブジェクトをリスト表示し、置き換え対象のノードに紐付いているオブジェクトを特定します。$ oc get machines.machine.openshift.io -n openshift-machine-api次のコマンドを実行して、
Machineオブジェクトからマシンハッシュ値を含むラベルを取得します。$ oc get machines.machine.openshift.io/<machine_name> -n openshift-machine-api \ -o jsonpath='Machine hash label: {.metadata.labels.machine\.openshift\.io/cluster-api-cluster}{"\n"}'<machine_name>は、クラスター内のMachineオブジェクトの名前に置き換えます。たとえば、ostest-bfs7w-ctrlplane-0です。新しい
Machineオブジェクトをプロビジョニングするには、このラベルが必要です。次のコマンドを実行して、障害が発生したノードの
Machineオブジェクトを削除します。$ oc delete machines.machine.openshift.io/<machine_name>-<failed nodename> -n openshift-machine-api注記Machineオブジェクトを削除すると、ノードオブジェクトも自動的に削除されます。
同じ名前と IP アドレスを使用して、障害が発生したホストを再作成します。
重要この手順を実行する必要があるのは、元のノードを作成するために installer-provisioned infrastructure または Machine API を使用している場合だけです。障害が発生したベアメタルコントロールプレーンノードの置き換えについては、「ベアメタル上の正常でない etcd メンバーの置き換え」を参照してください。
-
BMH オブジェクトと
Machineオブジェクトを削除します。ノードオブジェクトは、マシンコントローラーによって自動的に削除されます。 次のサンプル設定を使用して新しいマシンをプロビジョニングします。
Machineオブジェクトの設定例apiVersion: machine.openshift.io/v1beta1 kind: Machine metadata: annotations: metal3.io/BareMetalHost: openshift-machine-api/{bmh_name} finalizers: - machine.machine.openshift.io labels: machine.openshift.io/cluster-api-cluster: {machine_hash_label} machine.openshift.io/cluster-api-machine-role: master machine.openshift.io/cluster-api-machine-type: master name: {machine_name} namespace: openshift-machine-api spec: authoritativeAPI: MachineAPI 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-
metadata.annotations.metal3.io/BareMetalHost:{bmh_name}は、置き換え対象のホストに関連付けられている BMH オブジェクトの名前に置き換えます。 -
labels.machine.openshift.io/cluster-api-cluster:{machine_hash_label}は、削除したマシンから取得したラベルに置き換えます。 -
metadata.name:{machine_name}は、削除したマシンの名前に置き換えます。
-
次のコマンドを実行して、新しい BMH オブジェクトと BMC 認証情報を保存するシークレットを作成します。
cat <<EOF | oc apply -f - apiVersion: v1 kind: Secret metadata: name: <secret_name> namespace: openshift-machine-api data: password: <password> username: <username> type: Opaque --- apiVersion: metal3.io/v1alpha1 kind: BareMetalHost metadata: name: {bmh_name} namespace: openshift-machine-api spec: automatedCleaningMode: disabled bmc: address: <redfish_url>/{uuid} credentialsName: <name> disableCertificateVerification: true bootMACAddress: {boot_mac_address} bootMode: UEFI externallyProvisioned: false online: true rootDeviceHints: deviceName: /dev/disk/by-id/scsi-<serial_number> userData: name: master-user-data-managed namespace: openshift-machine-api EOF-
metadata.name: シークレットの名前を指定します。 -
metadata.name:{bmh_name}は、削除した BMH オブジェクトの名前に置き換えます。 -
bmc.address:{uuid}は、作成したノードの UUID に置き換えます。 -
bmc.credentialsName:nameは、作成したシークレットの名前に置き換えます。 -
bootMACAddress: プロビジョニングネットワークインターフェイスの MAC アドレスを指定します。これは、プロビジョニング中に Ironic と通信するときにノードが自身を識別するために使用する MAC アドレスです。
-
-
BMH オブジェクトと
次のコマンドを実行して、新しいノードが
Provisioned状態になっていることを確認します。$ oc get bmh -o wideこのコマンドの出力で、
STATUS列の値がProvisionedである必要があります。注記プロビジョニングプロセスが完了するまでに 10 - 20 分かかる場合があります。
次のコマンドを実行して、両方のコントロールプレーンノードが
Ready状態であることを確認します。$ oc get nodesこのコマンドの出力で、両ノードの
STATUS列の値がReadyである必要があります。次のコマンドを実行して、Machine API による管理を防ぐために、BMH オブジェクトに
detachedアノテーションを適用します。$ oc annotate bmh <bmh_name> -n openshift-machine-api baremetalhost.metal3.io/detached='' --overwrite次のコマンドを実行して、置き換え用のノードを Pacemaker クラスターに再度参加させます。
注記置き換え対象のノードではなく、障害を免れたコントロールプレーンノードで次のコマンドを実行してください。
$ sudo pcs cluster node remove <node_name>$ sudo pcs cluster node add <node_name> addr=<node_ip> --start --enable次のコマンドを実行して、障害が発生したノードの古いジョブを削除します。
$ oc project openshift-etcd$ oc delete job tnf-auth-job-<node_name>$ oc delete job tnf-after-setup-job-<node_name>
検証
コントロールプレーンノードと etcd の両方が正しく動作していることを確認する方法は、「フェンシング機能を備えた 2 ノード OpenShift クラスターでの etcd の健全性検証」を参照してください。
2.3.5. フェンシング機能を備えた 2 ノード OpenShift クラスターでの etcd の健全性検証 リンクのコピーリンクがクリップボードにコピーされました!
ノードの回復または保守手順を完了したら、コントロールプレーンノードと etcd の両方が正しく動作していることを確認します。
前提条件
-
cluster-admin権限を持つユーザーとしてクラスターにアクセスできる。 - SSH 経由で少なくとも 1 台のコントロールプレーンノードにアクセスできる。
手順
次のコマンドを実行して、ノード全体のステータスを確認します。
$ oc get nodesこのコマンドにより、両方のコントロールプレーンノードが
Ready状態であることを確認します。この状態は、ノードがスケジューリング対象のワークロードを受け入れ可能であることを示しています。次のコマンドを実行して、
cluster-etcd-operatorのステータスを確認します。$ oc describe co/etcdcluster-etcd-operatorは、etcd 設定の健全性を管理および報告します。ステータスの確認は、継続中の問題やデグレード状態を特定するのに役立ちます。次のコマンドを実行して、etcd メンバーのリストを確認します。
$ oc rsh -n openshift-etcd <etcd_pod> etcdctl member list -w tableこのコマンドは、現在の etcd メンバーとそのロールを表示します。
learnerとしてマークされているノードを探します。これは、そのノードが投票権を持つメンバーになるプロセス中であることを示しています。いずれかのコントロールプレーンノードで次のコマンドを実行して、Pacemaker リソースのステータスを確認します。
$ sudo pcs status --fullこのコマンドにより、Pacemaker によって管理されるすべてのリソースの詳細な説明が提供されます。次の条件が満たされていることを確認する必要があります。
- 両方のノードがオンラインである。
-
kubeletおよびetcdリソースが実行されている。 - フェンシングが両方のノードに対して正しく設定されている。