第6章 ノードヘルスチェックを使用したノードの修復
Node Health Check Operator を使用して、不健全なノードを特定できます。その後、Operator は他の修復プロバイダーを使用して異常なノードを修復します。
Node Health Check Operator は、次のような他の修復プロバイダーと併用することができます。
- Self Node Remediation Operator.
- Fence Agents Remediation Operator.
- Machine Deletion Remediation Operator.
Red Hat OpenShift Service on AWS (ROSA) クラスターにはマシンヘルスチェックがプリインストールされているため、Node Health Check Operator はそのような環境では機能しません。
Node Health Check Operator は "Rolling Stream" Operator であり、OpenShift Container Platform リリースの更新が非同期で利用できます。詳細は、Red Hat カスタマーポータルの OpenShift Operator ライフサイクル を参照してください。
6.1. Node Health Check Operator について
				Node Health Check Operator は、クラスター内のノードの健全性を検出します。NodeHealthCheck コントローラーは、NodeHealthCheck カスタムリソース (CR) を作成します。これは、ノードの状態を判断するための一連の基準としきい値を定義します。
			
				Node Health Check Operator は異常なノードを検出すると、修復プロバイダーをトリガーする修復 CR を作成します。たとえば、コントローラーは SelfNodeRemediation CR を作成し、Self Node Remediation Operator をトリガーして正常でないノードを修復します。
			
				NodeHealthCheck CR は、修復プロバイダーとして自己ノード修復を使用した次の YAML ファイルに似ています。
			
- 1
- 修復プロバイダーがターゲットプール内のノードを同時に修復するために必要な正常なノードの数 (パーセンテージまたは数) を指定します。正常なノードの数がminHealthyで設定された制限以上の場合、修復が行われます。デフォルト値は 51% です。
- 2
- 新しい修復が開始されないようにし、進行中の修復を継続できるようにします。デフォルト値は空です。ただし、修復を一時停止する原因を特定する文字列の配列を入力できます。たとえば、pause-test-cluster。注記アップグレードプロセス中に、クラスター内のノードが一時的に使用できなくなり、異常として識別される場合があります。ワーカーノードの場合、オペレーターはクラスターがアップグレード中であることを検出すると、新しい異常なノードの修正を停止して、そのようなノードが再起動しないようにします。 
- 3
- 修復プロバイダーからの修復テンプレートを指定します。たとえば、Self Node Remediation Operator のようになります。remediationTemplateはescalatingRemediationと相互排他的です。
- 4
- 順序フィールドとタイムアウトフィールドを含むRemediationTemplateのリストを指定します。正常なノードを取得するには、このフィールドを使用して複数の修復を順序付けし、設定します。この戦略により、成功しない可能性のある単一の修復に依存するのではなく、正常なノードを取得できる可能性が高まります。orderフィールドは、修復が呼び出される順序を決定します (低い順序 = 早い呼び出し)。timeoutフィールドは、次の修復がいつ呼び出されるかを決定します。escalatingRemediationはremediationTemplateと相互排他的です。注記escalatingRemediationsを使用すると、修復プロバイダーである Self Node Remediation Operator と Fence Agents Remediation Operator を、異なるremediationTemplate設定で複数回使用できます。ただし、異なるremediationTemplate設定で同じ Machine Deletion Remediation 設定を使用することはできません。
- 5
- チェックするラベルまたは式に一致する selector を指定します。1 つの CR でコントロールプレーンノードとワーカーノードの両方を選択しないでください。
- 6
- ノードが異常と見なされるかどうかを決定する条件のリストを指定します。
- 7 8
- ノード条件のタイムアウト期間を指定します。タイムアウトの期間中に条件が満たされた場合、ノードは修正されます。タイムアウトが長いと、異常なノードのワークロードで長期間のダウンタイムが発生する可能性があります。
				NodeHealthCheck CR は、修復プロバイダーとして metal3 を使用した、次の YAML ファイルに似ています。
			
					matchExpressions は例です。特定のニーズに基づいてマシングループをマッピングする必要があります。
				
				Metal3RemediationTemplate は、修復プロバイダーとして metal3 を使用した、次の YAML ファイルに似ています。
			
					NodeHealthCheck CR の作成に加えて、Metal3RemediationTemplate も作成する必要があります。
				
6.1.1. Node Health Check Operator のワークフローを理解する
					ノードが異常であると識別されると、Node Health Check Operator は他にいくつのノードが異常であるかをチェックします。健康なノードの数が NodeHealthCheck CR の minHealthy フィールドで指定された量を超えた場合、コントローラーは、修復プロバイダーによって外部の修復テンプレートで提供される詳細から修復 CR を作成します。修復後、kubelet はノードのヘルスステータスを更新します。
				
ノードが正常になると、コントローラーは外部修復テンプレートを削除します。
6.1.2. ノードのヘルスチェックによるマシンヘルスチェックの競合
ノードヘルスチェックとマシンヘルスチェックの両方がデプロイメントされている場合、ノードヘルスチェックはマシンヘルスチェックとの競合を回避します。
						Red Hat OpenShift は machine-api-termination-handler をデフォルトの MachineHealthCheck リソースとしてデプロイします。
					
次のリストは、ノードヘルスチェックとマシンヘルスチェックがデプロイメントされたときのシステムの動作をまとめたものです。
- デフォルトのマシンヘルスチェックのみが存在する場合、ノードヘルスチェックは引き続き異常なノードを識別します。ただし、ノードヘルスチェックは、Terminating 状態の異常なノードを無視します。デフォルトのマシンヘルスチェックは、異常なノードを Terminating 状態で処理します。 - ログメッセージの例 - INFO MHCChecker ignoring unhealthy Node, it is terminating and will be handled by MHC {"NodeName": "node-1.example.com"}- INFO MHCChecker ignoring unhealthy Node, it is terminating and will be handled by MHC {"NodeName": "node-1.example.com"}- Copy to Clipboard Copied! - Toggle word wrap Toggle overflow 
- デフォルトのマシンヘルスチェックが変更された場合 (たとえば、 - unhealthyConditionsが- Readyの場合)、または追加のマシンヘルスチェックが作成された場合、ノードヘルスチェックは無効になります。- ログメッセージの例 - INFO controllers.NodeHealthCheck disabling NHC in order to avoid conflict with custom MHCs configured in the cluster {"NodeHealthCheck": "/nhc-worker-default"}- INFO controllers.NodeHealthCheck disabling NHC in order to avoid conflict with custom MHCs configured in the cluster {"NodeHealthCheck": "/nhc-worker-default"}- Copy to Clipboard Copied! - Toggle word wrap Toggle overflow 
- ここでも、デフォルトのマシンヘルスチェックのみが存在する場合、ノードヘルスチェックが再度有効になります。 - ログメッセージの例 - INFO controllers.NodeHealthCheck re-enabling NHC, no conflicting MHC configured in the cluster {"NodeHealthCheck": "/nhc-worker-default"}- INFO controllers.NodeHealthCheck re-enabling NHC, no conflicting MHC configured in the cluster {"NodeHealthCheck": "/nhc-worker-default"}- Copy to Clipboard Copied! - Toggle word wrap Toggle overflow