5.4. ワーカーレイテンシープロファイルを使用したレイテンシーの高い環境でのクラスターの安定性の向上
クラスター管理者が遅延テストを実行してプラットフォームを検証した際に、遅延が大きい場合でも安定性を確保するために、クラスターの動作を調整する必要性が判明することがあります。クラスター管理者が変更する必要があるのは、ファイルに記録されている 1 つのパラメーターだけです。このパラメーターは、監視プロセスがステータスを読み取り、クラスターの健全性を解釈する方法に影響を与える 4 つのパラメーターを制御するものです。1 つのパラメーターのみを変更し、サポートしやすく簡単な方法でクラスターをチューニングできます。
				Kubelet プロセスは、クラスターの健全性を監視する上での出発点です。Kubelet は、OpenShift Container Platform クラスター内のすべてのノードのステータス値を設定します。Kubernetes コントローラーマネージャー (kube controller) は、デフォルトで 10 秒ごとにステータス値を読み取ります。ノードのステータス値を読み取ることができない場合、設定期間が経過すると、kube controller とそのノードとの接続が失われます。デフォルトの動作は次のとおりです。
			
- 
						コントロールプレーン上のノードコントローラーが、ノードの健全性を Unhealthyに更新し、ノードのReady状態を `Unknown` とマークします。
- この操作に応じて、スケジューラーはそのノードへの Pod のスケジューリングを停止します。
- 
						ノードライフサイクルコントローラーが、NoExecuteeffect を持つnode.kubernetes.io/unreachabletaint をノードに追加し、デフォルトでノード上のすべての Pod を 5 分後に退避するようにスケジュールします。
				この動作は、ネットワークが遅延の問題を起こしやすい場合、特にネットワークエッジにノードがある場合に問題が発生する可能性があります。場合によっては、ネットワークの遅延が原因で、Kubernetes コントローラーマネージャーが正常なノードから更新を受信できないことがあります。Kubelet は、ノードが正常であっても、ノードから Pod を削除します。
			
				この問題を回避するには、ワーカーレイテンシープロファイル を使用して、Kubelet と Kubernetes コントローラーマネージャーがアクションを実行する前にステータスの更新を待機する頻度を調整できます。これらの調整により、コントロールプレーンとワーカーノード間のネットワーク遅延が最適でない場合に、クラスターが適切に動作するようになります。
			
これらのワーカーレイテンシープロファイルには、3 つのパラメーターセットが含まれています。パラメーターは、遅延の増加に対するクラスターの反応を制御するように、慎重に調整された値で事前定義されています。試験により手作業で最良の値を見つける必要はありません。
クラスターのインストール時、またはクラスターネットワークのレイテンシーの増加に気付いたときはいつでも、ワーカーレイテンシープロファイルを設定できます。
5.4.1. ワーカーレイテンシープロファイルについて
					ワーカーレイテンシープロファイルは、4 つの異なるカテゴリーからなる慎重に調整されたパラメーターです。これらの値を実装する 4 つのパラメーターは、node-status-update-frequency、node-monitor-grace-period、default-not-ready-toleration-seconds、および default-unreachable-toleration-seconds です。これらのパラメーターにより、遅延の問題に対するクラスターの反応を制御できる値を使用できます。手作業で最適な値を決定する必要はありません。
				
これらのパラメーターの手動設定はサポートされていません。パラメーター設定が正しくないと、クラスターの安定性に悪影響が及びます。
すべてのワーカーレイテンシープロファイルは、次のパラメーターを設定します。
- node-status-update-frequency
- kubelet がノードのステータスを API サーバーにポストする頻度を指定します。
- node-monitor-grace-period
- 
								Kubernetes コントローラーマネージャーが、ノードを異常とマークし、node.kubernetes.io/not-readyまたはnode.kubernetes.io/unreachabletaint をノードに追加する前に、kubelet からの更新を待機する時間を秒単位で指定します。
- default-not-ready-toleration-seconds
- ノードを異常とマークした後、Kube API Server Operator がそのノードから Pod を削除するまでに待機する時間を秒単位で指定します。
- default-unreachable-toleration-seconds
- ノードを到達不能とマークした後、Kube API Server Operator がそのノードから Pod を削除するまでに待機する時間を秒単位で指定します。
次の Operator は、ワーカーレイテンシープロファイルの変更を監視し、それに応じて対応します。
- 
							Machine Config Operator (MCO) は、ワーカーノードの node-status-update-frequencyパラメーターを更新します。
- 
							Kubernetes コントローラーマネージャーは、コントロールプレーンノードの node-monitor-grace-periodパラメーターを更新します。
- 
							Kubernetes API Server Operator は、コントロールプレーンノードの default-not-ready-toleration-secondsおよびdefault-unreachable-toleration-secondsパラメーターを更新します。
ほとんどの場合はデフォルト設定が機能しますが、OpenShift Container Platform は、ネットワークで通常よりも高いレイテンシーが発生している状況に対して、他に 2 つのワーカーレイテンシープロファイルを提供します。次のセクションでは、3 つのワーカーレイテンシープロファイルを説明します。
- デフォルトのワーカーレイテンシープロファイル
- Defaultプロファイルを使用すると、各- Kubeletが 10 秒ごとにステータスを更新します (- node-status-update-frequency)。- Kube Controller Managerは、5 秒ごとに- Kubeletのステータスをチェックします。- Kubernetes Controller Manager は、 - Kubeletからのステータス更新を 40 秒 (- node-monitor-grace-period) 待機した後、- Kubeletが正常ではないと判断します。ステータスが提供されない場合、Kubernetes コントローラーマネージャーは、ノードに- node.kubernetes.io/not-readyまたは- node.kubernetes.io/unreachabletaint のマークを付け、そのノードの Pod を削除します。- Pod が - NoExecutetaint を持つノード上にある場合、Pod は- tolerationSecondsに従って実行されます。ノードに taint がない場合、そのノードは 300 秒以内に削除されます (- Kube API Serverの- default-not-ready-toleration-secondsおよび- default-unreachable-toleration-seconds設定)。- Expand - プロファイル - コンポーネント - パラメーター - 値 - デフォルト - kubelet - node-status-update-frequency- 10s - Kubelet コントローラーマネージャー - node-monitor-grace-period- 40s - Kubernetes API Server Operator - default-not-ready-toleration-seconds- 300s - Kubernetes API Server Operator - default-unreachable-toleration-seconds- 300s 
- 中規模のワーカーレイテンシープロファイル
- ネットワークレイテンシーが通常よりもわずかに高い場合は、 - MediumUpdateAverageReactionプロファイルを使用します。- MediumUpdateAverageReactionプロファイルは、kubelet の更新の頻度を 20 秒に減らし、Kubernetes コントローラーマネージャーがそれらの更新を待機する期間を 2 分に変更します。そのノード上の Pod の Pod 排除期間は 60 秒に短縮されます。Pod に- tolerationSecondsパラメーターがある場合、エビクションはそのパラメーターで指定された期間待機します。- Kubernetes コントローラーマネージャーは、ノードが異常であると判断するまでに 2 分間待機します。別の 1 分間でエビクションプロセスが開始されます。 - Expand - プロファイル - コンポーネント - パラメーター - 値 - MediumUpdateAverageReaction - kubelet - node-status-update-frequency- 20s - Kubelet コントローラーマネージャー - node-monitor-grace-period- 2m - Kubernetes API Server Operator - default-not-ready-toleration-seconds- 60s - Kubernetes API Server Operator - default-unreachable-toleration-seconds- 60s 
- ワーカーの低レイテンシープロファイル
- ネットワーク遅延が非常に高い場合は、 - LowUpdateSlowReactionプロファイルを使用します。- LowUpdateSlowReactionプロファイルは、kubelet の更新頻度を 1 分に減らし、Kubernetes コントローラーマネージャーがそれらの更新を待機する時間を 5 分に変更します。そのノード上の Pod の Pod 排除期間は 60 秒に短縮されます。Pod に- tolerationSecondsパラメーターがある場合、エビクションはそのパラメーターで指定された期間待機します。- Kubernetes コントローラーマネージャーは、ノードが異常であると判断するまでに 5 分間待機します。別の 1 分間でエビクションプロセスが開始されます。 - Expand - プロファイル - コンポーネント - パラメーター - 値 - LowUpdateSlowReaction - kubelet - node-status-update-frequency- 1m - Kubelet コントローラーマネージャー - node-monitor-grace-period- 5m - Kubernetes API Server Operator - default-not-ready-toleration-seconds- 60s - Kubernetes API Server Operator - default-unreachable-toleration-seconds- 60s 
レイテンシープロファイルは、カスタムのマシン設定プールをサポートしていません。デフォルトのワーカーマシン設定プールのみをサポートしていします。
5.4.2. ワーカーレイテンシープロファイルの使用と変更
					ネットワークの遅延に対処するためにワーカー遅延プロファイルを変更するには、node.config オブジェクトを編集してプロファイルの名前を追加します。遅延が増加または減少したときに、いつでもプロファイルを変更できます。
				
					ワーカーレイテンシープロファイルは、一度に 1 つずつ移行する必要があります。たとえば、Default プロファイルから LowUpdateSlowReaction ワーカーレイテンシープロファイルに直接移行することはできません。まず Default ワーカーレイテンシープロファイルから MediumUpdateAverageReaction プロファイルに移行し、次に LowUpdateSlowReaction プロファイルに移行する必要があります。同様に、Default プロファイルに戻る場合は、まずロープロファイルからミディアムプロファイルに移行し、次に Default に移行する必要があります。
				
OpenShift Container Platform クラスターのインストール時にワーカーレイテンシープロファイルを設定することもできます。
手順
デフォルトのワーカーレイテンシープロファイルから移動するには、以下を実行します。
- 中規模のワーカーのレイテンシープロファイルに移動します。 - node.configオブジェクトを編集します。- oc edit nodes.config/cluster - $ oc edit nodes.config/cluster- Copy to Clipboard Copied! - Toggle word wrap Toggle overflow 
- spec.workerLatencyProfile: MediumUpdateAverageReactionを追加します。- node.configオブジェクトの例- Copy to Clipboard Copied! - Toggle word wrap Toggle overflow - 1
- 中規模のワーカーレイテンシーポリシーを指定します。
 - 変更が適用されると、各ワーカーノードでのスケジューリングは無効になります。 
 
- 必要に応じて、ワーカーのレイテンシーが低いプロファイルに移動します。 - node.configオブジェクトを編集します。- oc edit nodes.config/cluster - $ oc edit nodes.config/cluster- Copy to Clipboard Copied! - Toggle word wrap Toggle overflow 
- spec.workerLatencyProfileの値を- LowUpdateSlowReactionに変更します。- node.configオブジェクトの例- Copy to Clipboard Copied! - Toggle word wrap Toggle overflow - 1
- 低ワーカーレイテンシーポリシーの使用を指定します。
 
 
変更が適用されると、各ワーカーノードでのスケジューリングは無効になります。
検証
- 全ノードが - Ready状態に戻ると、以下のコマンドを使用して Kubernetes Controller Manager を確認し、これが適用されていることを確認できます。- oc get KubeControllerManager -o yaml | grep -i workerlatency -A 5 -B 5 - $ oc get KubeControllerManager -o yaml | grep -i workerlatency -A 5 -B 5- Copy to Clipboard Copied! - Toggle word wrap Toggle overflow - 出力例 - Copy to Clipboard Copied! - Toggle word wrap Toggle overflow - 1
- プロファイルが適用され、アクティブであることを指定します。
 
					ミディアムプロファイルからデフォルト、またはデフォルトからミディアムに変更する場合、node.config オブジェクトを編集し、spec.workerLatencyProfile パラメーターを適切な値に設定します。