第12章 ワーカーレイテンシープロファイルを使用したレイテンシーの高い環境でのクラスターの安定性の向上
すべてのノードは、デフォルトで 10 秒ごとに OpenShift Container Platform クラスターの Kubernetes Controller Manager Operator (kube コントローラー) にハートビートを送信します。クラスターがノードからハートビートを受信しない場合、OpenShift Container Platform は複数のデフォルトメカニズムを使用して応答します。
たとえば、Kubernetes Controller Manager Operator が設定された期間後にノードとの接続を失う場合:
-
コントロールプレーンのノードコントローラーはノードの正常性を
Unhealthyに更新し、ノードのReady状態をUnknownとマークします。 - この操作に応じて、スケジューラーはそのノードへの Pod のスケジューリングを停止します。
-
オンプレミスノードコントローラーは、effect が
NoExecuteのnode.kubernetes.io/unreachableテイントをノードに追加し、デフォルトで 5 分後に、エビクション用にノード上で Pod をスケジュールします。
この動作は、ネットワークが遅延の問題を起こしやすい場合、特にネットワークエッジにノードがある場合に問題が発生する可能性があります。Kubernetes Controller Manager Operator は、ネットワークの遅延により、健全なノードからの更新を受信できない場合があります。次に、Kubernetes Controller Manager Operator は、ノードが正常な場合でも Pod をノードからエビクトしました。この問題を回避するには、ワーカーレイテンシープロファイル を使用して kubelet および Kubernetes Controller Manager Operator がステータスの更新を待機する頻度を調節してからアクションを実行することができます。これらの調整により、コントロールプレーンとワーカーノード間のネットワーク遅延が最適でない場合に、クラスターが適切に動作するようになります。
これらのワーカーレイテンシープロファイルは、慎重に調整された値であらかじめ定義された 3 つのパラメーターセットで、最適な値を手動で決定する必要なく、レイテンシーの問題に対するクラスターの反応を制御することができます。
クラスターのインストール時、またはクラスターネットワークのレイテンシーの増加に気付いたときはいつでも、ワーカーレイテンシープロファイルを設定できます。
12.1. ワーカーレイテンシープロファイルを理解する
ワーカー遅延プロファイルは、node-status-update-frequency、node-monitor-grace-period、default-not-ready-toleration-seconds、および default-unreachable-toleration-seconds パラメーターに対して慎重に調整された値の複数のセットです。これらのパラメーターを使用すると、最適な値を手動で決定しなくても、レイテンシーの問題に対するクラスターの反応を制御できます。
すべてのワーカーレイテンシープロファイルは、次のパラメーターを設定します。
-
node-status-update-frequency。kubelet がステータスを Kubernetes Controller Manager Operator に更新する時間を秒単位で指定します。 -
node-monitor-grace-period。Kubernetes Controller Manager Operator が、ノードを異常とマークし、node.kubernetes.io/not-readyまたはnode.kubernetes.io/unreachabletaint をノードに追加する前に、kubelet からの更新を待機する時間を秒単位で指定します。 -
default-not-ready-toleration-seconds。ノードを異常とマークした後、KubernetesControllerManagerOperator がそのノードから Pod を削除する前に待機する時間を秒単位で指定します。 -
default-unreachable-toleration-seconds。ノードに到達不能をマークした後、Kubernetes Controller Manager Operator がそのノードから Pod を削除する前に待機する時間を秒単位で指定します。
node-monitor-grace-period パラメーターを手動で変更することはサポートされていません。
次の Operator は、ワーカーレイテンシープロファイルの変更を監視し、それに応じて対応します。
-
Machine Config Operator (MCO) は、ワーカーノードの
node-status-update-frequencyパラメーターを更新します。 -
Kubernetes Controller Manager Operator は、コントロールプレーンノードの
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 秒ごとに Kubelet Controller Manager Operator (kube コントローラー) に報告します。Kubelet Controller ManagerOperator は、5 秒ごとに kubelet のステータスをチェックします。Kubernetes Controller ManagerOperator は、ノードが異常であると見なす前に、ステータスが更新されるまで 40 秒待機します。ノードに
node.kubernetes.io/not-readyまたはnode.kubernetes.io/unreachableのマークを付け、そのノードの Pod を削除します。そのノードの Pod にNoExecutetoleration がある場合、Pod は 300 秒で削除されます。Pod にtolerationSecondsパラメーターがある場合、エビクションはそのパラメーターで指定された期間待機します。プロファイル コンポーネント パラメーター 値 デフォルト
kubelet
node-status-update-frequency10s
Kubelet コントローラーマネージャー
node-monitor-grace-period40s
Kubernetes API Server
default-not-ready-toleration-seconds300s
Kubernetes API Server
default-unreachable-toleration-seconds300s
- 中規模のワーカーレイテンシープロファイル
ネットワークレイテンシーが通常の場合、
MediumUpdateAverageReactionプロファイルを使用します。MediumUpdateAverageReactionプロファイルは、kubelet の更新の頻度を 20 秒に減らし、KubernetesControllerManagerOperator がそれらの更新を待機する期間を 2 分に変更します。そのノード上の Pod の Pod 排除期間は 60 秒に短縮されます。Pod にtolerationSecondsパラメーターがある場合、エビクションはそのパラメーターで指定された期間待機します。Kubernetes Controller Manager Operator は、2 分間待機してノードの正常でないとみなします。別の 1 分間でエビクションプロセスが開始されます。
プロファイル コンポーネント パラメーター 値 MediumUpdateAverageReaction
kubelet
node-status-update-frequency20s
Kubelet コントローラーマネージャー
node-monitor-grace-period2m
Kubernetes API Server
default-not-ready-toleration-seconds60s
Kubernetes API Server
default-unreachable-toleration-seconds60s
- ワーカーの低レイテンシープロファイル
ネットワーク遅延が非常に高い場合は、
LowUpdateSlowReactionプロファイルを使用します。LowUpdateSlowReactionプロファイルは kubelet の更新頻度を 1 分に減らし、Kubernetes Controller Manager Operator がそれらの更新が 5 分になるまで待機する期間を変更します。そのノード上の Pod の Pod 排除期間は 60 秒に短縮されます。Pod にtolerationSecondsパラメーターがある場合、エビクションはそのパラメーターで指定された期間待機します。Kubernetes Controller Manager Operator は、5 分間待機してノードの正常でないとみなします。別の 1 分間でエビクションプロセスが開始されます。
プロファイル コンポーネント パラメーター 値 LowUpdateSlowReaction
kubelet
node-status-update-frequency1m
Kubelet コントローラーマネージャー
node-monitor-grace-period5m
Kubernetes API Server
default-not-ready-toleration-seconds60s
Kubernetes API Server
default-unreachable-toleration-seconds60s