16.11.5. ノード問題の Pod エビクション
OpenShift Container Platform は、node unreachable および node not ready 状態をテイントとして表示するよう設定できます。これにより、デフォルトの 5 分を使用するのではなく、unreachable (到達不能) または not ready (準備ができていない) 状態になるノードにバインドされたままになる期間を Pod 仕様ごとに指定することができます。
テイントベースのエビクション機能が有効にされた状態で、テイントはノードコントローラーによって自動的に追加され、Pod を Ready
ノードからエビクトするための通常のロジックは無効にされます。
-
ノードが not ready (準備ができていない) 状態になると、
node.kubernetes.io/not-ready:NoExecute
テイントは追加され、Pod はノードでスケジュールできなくなります。既存 Pod は容認期間 (秒数) 中はそのまま残ります。 -
ノードが not reachable (到達不能) の状態になると、
node.kubernetes.io/unreachable:NoExecute
テイントは追加され、Pod はノードでスケジュールできません。既存 Pod は容認期間 (秒数) 中はそのまま残ります。
テイントベースのエビクションを有効にするには、以下を実行します。
マスター設定ファイル (/etc/origin/master/master-config.yaml) を変更して、以下を
kubernetesMasterConfig
セクションに追加します。kubernetesMasterConfig: controllerArguments: feature-gates: - TaintBasedEvictions=true
テイントがノードに追加されていることを確認します。
$ oc describe node $node | grep -i taint Taints: node.kubernetes.io/not-ready:NoExecute
変更を有効にするために、OpenShift を再起動します。
# master-restart api # master-restart controllers
容認を Pod に追加します。
tolerations: - key: "node.kubernetes.io/unreachable" operator: "Exists" effect: "NoExecute" tolerationSeconds: 6000
または
tolerations: - key: "node.kubernetes.io/not-ready" operator: "Exists" effect: "NoExecute" tolerationSeconds: 6000
ノードの問題の発生時に Pod エビクションの既存の レート制限 の動作を維持するために、システムはテイントをレートが制限された方法で追加します。これにより、マスターがノードからパーティション化される場合などのシナリオで発生する大規模な Pod エビクションを防ぐことができます。