2.5. Self Node Remediation Operator の設定
Self Node Remediation Operator は、SelfNodeRemediationConfig CR と SelfNodeRemediationTemplate カスタムリソース定義 (CRD) を作成します。
特定のノードで予期しない再起動が発生しないようにするために、Node Maintenance Operator はノードをメンテナンスモードに設定し、特定のノードで SNR daemonset が実行されないようにするノードセレクターを自動的に追加します。
2.5.1. Self Node Remediation Operator 設定について リンクのコピーリンクがクリップボードにコピーされました!
Self Node Remediation Operator は、self-node-remediation-config という名前の SelfNodeRemediationConfigCR を作成します。CR は Self Node Remediation Operator の namespace に作成されます。
SelfNodeRemediationConfig CR の変更により、Self Node Remediation デーモンセットが再作成されます。
SelfNodeRemediationConfig CR は以下の YAML ファイルのようになります。
apiVersion: self-node-remediation.medik8s.io/v1alpha1
kind: SelfNodeRemediationConfig
metadata:
name: self-node-remediation-config
namespace: openshift-workload-availability
spec:
safeTimeToAssumeNodeRebootedSeconds: 180
watchdogFilePath: /dev/watchdog
isSoftwareRebootEnabled: true
apiServerTimeout: 15s
apiCheckInterval: 5s
maxApiErrorThreshold: 3
peerApiServerTimeout: 5s
peerDialTimeout: 5s
peerRequestTimeout: 5s
peerUpdateInterval: 15m
hostPort: 30001
customDsTolerations:
- effect: NoSchedule
key: node-role.kubernetes.io.infra
operator: Equal
value: "value1"
tolerationSeconds: 3600
- 1
- 異常なノードで実行されていて影響を受けるワークロードを回復する前に Operator が待機するオプションの期間を指定します。障害が発生したノードで実行中の代替 Pod を開始すると、データの破損や 1 回実行セマンティクスの違反が生じる可能性があります。Operator は、
ApiServerTimeout、ApiCheckInterval、MaxApiErrorThreshold、PeerDialTimeout、およびPeerRequestTimeoutフィールドの値、およびウォッチドッグタイムアウトと修復時のクラスターサイズを使用して、最小期間を計算します。最小期間の計算をチェックするには、マネージャー Pod のログを表示し、calculated minimum time in secondsへの参照を確認します。最小期間よりも短い値を指定した場合、Operator は最小期間を使用します。ただし、期間をこの最小値よりも大きい値に増やす場合は、
safeTimeToAssumeNodeRebootedSecondsを最小期間よりも大きい値に設定できます。 - 2
- ノード内のウォッチドッグデバイスのファイルパスを指定します。ウォッチドッグデバイスへの誤ったパスを入力すると、Self Node Remediation Operator がソフトドッグデバイスのパスを自動的に検出します。
ウォッチドッグデバイスが使用できない場合、
SelfNodeRemediationConfigCR はソフトウェアの再起動を使用します。 - 3
- 異常なノードのソフトウェア再起動を有効にするかどうかを指定します。デフォルトでは、
isSoftwareRebootEnabledの値はtrueに設定されています。ソフトウェアの再起動を無効にするには、パラメーター値をfalseに設定します。 - 4
- 各 API サーバーとの接続を確認するためのタイムアウト期間を指定します。この期間が経過すると、Operator は修復を開始します。タイムアウト期間は 10 ミリ秒以上である必要があります。
- 5
- 各 API サーバーとの接続を確認する頻度を指定します。タイムアウト期間は 1 秒以上である必要があります。
- 6
- しきい値を指定します。このしきい値に達した後、ノードはピアへの接続を開始します。しきい値は 1 秒以上である必要があります。
- 7
- ピアが API サーバーに接続するためのタイムアウトの期間を指定します。タイムアウト期間は 10 ミリ秒以上である必要があります。
- 8
- ピアで接続を確立するためのタイムアウトの期間を指定します。タイムアウト期間は 10 ミリ秒以上である必要があります。
- 9
- ピアから応答を取得するためのタイムアウトの期間を指定します。タイムアウト期間は 10 ミリ秒以上である必要があります。
- 10
- IP アドレスなどのピア情報を更新する頻度を指定します。タイムアウト期間は 10 秒以上である必要があります。
- 11
- 任意の値を指定して、Self Node Remediation エージェントが内部通信に使用するポートを変更します。値は 0 より大きくなければなりません。デフォルト値はポート 30001 です。
- 12
- さまざまなタイプのノードの修復をサポートするために、DaemonSet で実行されているカスタム Self Node Remediation エージェントを指定します。次のフィールドを設定できます。
-
effect: effect は一致するテイント効果を示します。このフィールドが空の場合、すべてのテイント効果が一致します。指定する場合、使用な可能な値はNoSchedule、PreferNoSchedule、およびNoExecuteです。 -
key: キーは、容認が適用されるテイントキーです。このフィールドが空の場合、すべてのテイントキーが一致します。キーが空の場合、OperatorフィールドはExistsである必要があります。この組み合わせは、すべての値とすべてのキーが一致することを意味します。 -
Operator: 演算子はキーと値の関係を表します。有効な Operator はExistsおよびEqualです。デフォルトはEqualです。Existsは、値のワイルドカードと同等であるため、Pod は特定のカテゴリーのすべてのテイントを許容できます。 -
value: 容認が一致するテイントの値です。Operator がExistsの場合、値は空である必要があります。それ以外の場合は、通常の文字列になります。 -
tolerationSeconds: 容認 (NoExecute が有効である必要があり、そうでない場合はこのフィールドは無視されます) がテイントを許容する期間を表します。デフォルトでは設定されていないため、テイントを永久に許容します (エビクトされません)。ゼロ値と負の値は、システムによって 0 (すぐにエビクト) として扱われます。 - カスタム容認により、容認を Self Node Remediation エージェント Pod に追加できます。詳細は、容認を使用した OpenShift Logging Pod の配置の制御 を参照してください。
-
Self Node Remediation Operator によって作成された self-node-remediation-config CR を編集できます。ただし、Self Node Remediation Operator の新しい CR を作成しようとすると、次のメッセージがログに表示されます。
controllers.SelfNodeRemediationConfig
ignoring selfnoderemediationconfig CRs that are not named 'self-node-remediation-config'
or not in the namespace of the operator:
'openshift-workload-availability' {"selfnoderemediationconfig":
"openshift-workload-availability/selfnoderemediationconfig-copy"}
2.5.2. 自己ノード修復テンプレートの設定を理解する リンクのコピーリンクがクリップボードにコピーされました!
Self Node Remediation Operator は、SelfNodeRemediationTemplate カスタムリソース定義 (CRD) も作成します。この CRD は、ノードの修復ストラテジーを定義します。次の修復ストラテジーが利用できます。
Automatic-
この修復ストラテジーでは、Self Node Remediation Operator がクラスターに最適な修復戦略を決定できるようにすることで、修復プロセスを簡素化します。このストラテジーは、
OutOfServiceTaintストラテジーがクラスターで利用できるかどうかを確認します。OutOfServiceTaintストラテジーが利用可能な場合、Operator はOutOfServiceTaintストラテジーを選択します。OutOfServiceTaintストラテジーが利用できない場合、Operator はResourceDeletionストラテジーを選択します。Automaticは、デフォルトの修復ストラテジーです。 ResourceDeletion- この修復ストラテジーは、ノードオブジェクトではなく、ノード上の Pod を削除します。このストラテジーにより、ワークロードがより迅速に回復されます。
OutOfServiceTaint-
この修復戦略により、ノードオブジェクトではなく、ノード上の Pod および関連するボリュームアタッチメントが暗黙的に削除されます。これは、ノードに
OutOfServiceTaintストラテジーを配置することによって実現されます。このストラテジーにより、ワークロードがより迅速に回復されます。このストラテジーは、OpenShift Container Platform バージョン 4.13 以降のテクノロジープレビューでサポートされており、OpenShift Container Platform バージョン 4.15 以降の一般提供ではサポートされています。
Self Node Remediation Operator は、Automatic 修復ストラテジーが使用する self-node-remediation-automatic-strategy-template ストラテジーの SelfNodeRemediationTemplate CR を作成します。
SelfNodeRemediationTemplate CR は以下の YAML ファイルのようになります。
apiVersion: self-node-remediation.medik8s.io/v1alpha1
kind: SelfNodeRemediationTemplate
metadata:
creationTimestamp: "2022-03-02T08:02:40Z"
name: self-node-remediation-<remediation_object>-deletion-template
namespace: openshift-workload-availability
spec:
template:
spec:
remediationStrategy: <remediation_strategy>
2.5.3. Self Node Remediation Operator のトラブルシューティング リンクのコピーリンクがクリップボードにコピーされました!
2.5.3.1. 一般的なトラブルシューティング リンクのコピーリンクがクリップボードにコピーされました!
- 問題
- Self Node Remediation Operator の問題のトラブルシューティングが必要です。
- 解決方法
- Operator ログを確認してください。
2.5.3.2. デーモンセットの確認 リンクのコピーリンクがクリップボードにコピーされました!
- 問題
- Self Node Remediation Operator はインストールされていますが、デーモンセットはインストールされません。
- 解決方法
- エラーまたは警告がないか、オペレーターログを確認してください。
2.5.3.3. 失敗した修復 リンクのコピーリンクがクリップボードにコピーされました!
- 問題
- 不健康なノードは修正されませんでした。
- 解決方法
以下のコマンドを実行して、
SelfNodeRemediationCR が作成されていることを確認します。$ oc get snr -AMachineHealthCheckコントローラーがノードが正常でない状態でSelfNodeRemediationCR を作成しなかった場合、MachineHealthCheckコントローラーのログを確認します。さらに、MachineHealthCheckCR に、修復テンプレートを使用するために必要な仕様が含まれていることを確認してください。SelfNodeRemediationCR が作成される場合、その名前が正常でないノードまたはマシンオブジェクトと一致することを確認します。
2.5.3.4. Operator をアンインストールした後でも、デーモンセットおよびその他の Self Node Remediation Operator リソースが存在する リンクのコピーリンクがクリップボードにコピーされました!
- 問題
- デーモンセット、設定 CR、修復テンプレート CR などの Self Node Remediation Operator リソースは、Operator をアンインストールした後も存在します。
- 解決方法
Self Node Remediation Operator リソースを削除するには、リソースタイプごとに次のコマンドを実行してリソースを削除します。
$ oc delete ds <self-node-remediation-ds> -n <namespace>$ oc delete snrc <self-node-remediation-config> -n <namespace>$ oc delete snrt <self-node-remediation-template> -n <namespace>
2.5.4. Self Node Remediation Operator に関するデータの収集 リンクのコピーリンクがクリップボードにコピーされました!
Self Node Remediation Operator に関するデバッグ情報を収集するには、must-gather ツールを使用します。Self Node Remediation Operator のmust-gather イメージは、特定の機能に関するデータの収集 を参照してください。