This documentation is for a release that is no longer maintained
See documentation for the latest supported version 3 or the latest supported version 4.第25章 Node Problem Detector
25.1. 概要 リンクのコピーリンクがクリップボードにコピーされました!
Node Problem Detector (ノード問題検出機能) は特定の問題を検出し、それらの問題を API サーバーに報告することで、ノードの正常性をモニターします。Node Problem Detector は、各ノードで daemonSet として実行されます。
Node Problem Detector はテクノロジープレビュー機能です。テクノロジープレビュー機能は Red Hat の実稼働環境でのサービスレベルアグリーメント (SLA) ではサポートされていないため、Red Hat では実稼働環境での使用を推奨していません。これらの機能は、近々発表予定の製品機能をリリースに先駆けてご提供することにより、お客様は機能性をテストし、開発プロセス中にフィードバックをお寄せいただくことができます。
Red Hat のテクノロジープレビュー機能のサポートについての詳細は、https://access.redhat.com/support/offerings/techpreview/ を参照してください。
Node Problem Detector はシステムログを読み取り、特定のエントリーの有無を監視し、コントロールプレーンにそれらの問題を表示します。これらの問題は、oc get node
および oc get event
などの OpenShift Container Platform コマンドを使用して表示できます。これらの問題については、適宜修正するようアクションを実行するか、または OpenShift Container Platform ログモニタリングなどの選択可能なツールを使用してメッセージをキャプチャーすることができます。検出される問題は以下のいずれかのカテゴリーに分類できます。
-
NodeCondition
: ノードを Pod に対して利用不可にする永続的な問題です。ノードの状態は、ホストが再起動されるまでクリアされません。 -
Event
: ノードに制限的な影響を与える一時的な問題で、情報を提供します。
Node Problem Detector は以下を検出できます。
コンテナーランタイムの問題:
- 反応しないランタイムデーモン
ハードウェアの問題:
- 正常でない CPU
- 正常でないメモリー
- 正常でないディスク
カーネルの問題:
- カーネルのデッドロック状態
- 破損したファイルシステム
- 反応しないランタイムデーモン
インフラストラクチャーデーモンの問題:
- NTP サービスの停止
25.2. Node Problem Detector の出力サンプル リンクのコピーリンクがクリップボードにコピーされました!
以下の例では、特定のノードでカーネルのデッドロックを監視する Node Problem Detector の出力を示しています。コマンドでは oc get node
を使用し、ログで KernelDeadlock
エントリーについてフィルターし、特定のノードを監視します。
oc get node <node> -o yaml | grep -B5 KernelDeadlock
# oc get node <node> -o yaml | grep -B5 KernelDeadlock
Node Problem Detector の出力サンプル (問題がない場合)
message: kernel has no deadlock reason: KernelHasNoDeadlock status: false type: KernelDeadLock
message: kernel has no deadlock
reason: KernelHasNoDeadlock
status: false
type: KernelDeadLock
KernelDeadLock 状態の出力サンプル
message: task docker:1234 blocked for more than 120 seconds reason: DockerHung status: true type: KernelDeadLock
message: task docker:1234 blocked for more than 120 seconds
reason: DockerHung
status: true
type: KernelDeadLock
この例は、ノードでイベントの有無を監視する Node Problem Detector からの出力を示しています。以下のコマンドでは、default プロジェクトに対して oc get event
を使用し、Node Problem Detector 設定マップの kernel-monitor.json
セクションに一覧表示されているイベントの有無を監視します。
oc get event -n default --field-selector=source=kernel-monitor --watch
# oc get event -n default --field-selector=source=kernel-monitor --watch
ノードのイベントを表示する出力サンプル
LAST SEEN FIRST SEEN COUNT NAME KIND SUBOBJECT TYPE REASON SOURCE MESSAGE 2018-06-27 09:08:27 -0400 EDT 2018-06-27 09:08:27 -0400 EDT 1 my-node1 node Warning TaskHunk kernel-monitor.my-node1 docker:1234 blocked for more than 300 seconds 2018-06-27 09:08:27 -0400 EDT 2018-06-27 09:08:27 -0400 EDT 3 my-node2 node Warning KernelOops kernel-monitor.my-node2 BUG: unable to handle kernel NULL pointer deference at nowhere 2018-06-27 09:08:27 -0400 EDT 2018-06-27 09:08:27 -0400 EDT 1 my-node1 node Warning KernelOops kernel-monitor.my-node2 divide error 0000 [#0] SMP
LAST SEEN FIRST SEEN COUNT NAME KIND SUBOBJECT TYPE REASON SOURCE MESSAGE
2018-06-27 09:08:27 -0400 EDT 2018-06-27 09:08:27 -0400 EDT 1 my-node1 node Warning TaskHunk kernel-monitor.my-node1 docker:1234 blocked for more than 300 seconds
2018-06-27 09:08:27 -0400 EDT 2018-06-27 09:08:27 -0400 EDT 3 my-node2 node Warning KernelOops kernel-monitor.my-node2 BUG: unable to handle kernel NULL pointer deference at nowhere
2018-06-27 09:08:27 -0400 EDT 2018-06-27 09:08:27 -0400 EDT 1 my-node1 node Warning KernelOops kernel-monitor.my-node2 divide error 0000 [#0] SMP
Node Problem Detector はリソースを消費するため、Node Problem Detector を使用する場合は、クラスターのパフォーマンスのバランスを保つために十分なノードがあることを確認してください。
25.3. Node Problem Detector のインストール リンクのコピーリンクがクリップボードにコピーされました!
openshift_node_problem_detector_install
が /etc/ansible/hosts インベントリーファイルで true
に設定される場合、インストールではデフォルトで Node Problem Detector の Deamonset を作成し、openshift-node-problem-detector
という検出プログラムのプロジェクトを作成します。
Node Problem Detector はテクノロジープレビューとして提供されているため、openshift_node_problem_detector_install
はデフォルトで false
に設定されています。Node Problem Detector のインストール時には、パラメーターを true
に手動で設定する必要があります。
Node Problem Detector がインストールされていない場合、openshift-node-problem-detector/config.yml Playbook を実行して Node Problem Detector をインストールします。
ansible-playbook /usr/share/ansible/openshift-ansible/playbooks/openshift-node-problem-detector/config.yml
# ansible-playbook /usr/share/ansible/openshift-ansible/playbooks/openshift-node-problem-detector/config.yml
25.4. 検出された条件のカスタマイズ リンクのコピーリンクがクリップボードにコピーされました!
Node Problem Detector 設定マップを編集し、Node Problem Detector をログの文字列を監視するように設定できます。
Node Problem Detector 設定マップのサンプル
Node Problem Detector を設定するには、問題の状態およびイベントを追加するか、またはこれらを削除します。
テキストエディターで Node Problem Detector 設定マップを編集します。
oc edit configmap -n openshift-node-problem-detector node-problem-detector
oc edit configmap -n openshift-node-problem-detector node-problem-detector
Copy to Clipboard Copied! Toggle word wrap Toggle overflow ノードの状態またはイベントを必要に応じて削除、追加、または編集します。
{ "type": <`temporary` or `permanent`>, "reason": <free-form text describing the error>, "pattern": <log message to watch for> },
{ "type": <`temporary` or `permanent`>, "reason": <free-form text describing the error>, "pattern": <log message to watch for> },
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 以下に例を示します。
{ "type": "temporary", "reason": "UnregisterNetDevice", "pattern": "unregister_netdevice: waiting for \\w+ to become free. Usage count = \\d+" },
{ "type": "temporary", "reason": "UnregisterNetDevice", "pattern": "unregister_netdevice: waiting for \\w+ to become free. Usage count = \\d+" },
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 変更を適用するために実行中の Pod を再起動します。Pod を再起動するために、すべての既存 Pod を削除できます。
oc delete pods -n openshift-node-problem-detector -l name=node-problem-detector
# oc delete pods -n openshift-node-problem-detector -l name=node-problem-detector
Copy to Clipboard Copied! Toggle word wrap Toggle overflow Node Problem Detector 出力を標準出力 (stdout) および標準エラー出力 (stderr) に表示するには、以下を設定マップに追加します。
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
25.5. Node Problem Detector が実行中であることの確認 リンクのコピーリンクがクリップボードにコピーされました!
Node Problem Detector が有効であることを確認するには、以下を実行します。
以下のコマンドを実行し、Problem Node Detector Pod の名前を取得します。
oc get pods -n openshift-node-problem-detector
# oc get pods -n openshift-node-problem-detector NAME READY STATUS RESTARTS AGE node-problem-detector-8z8r8 1/1 Running 0 1h node-problem-detector-nggjv 1/1 Running 0 1h
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 以下のコマンドを実行し、Problem Node Detector Pod のログ情報を表示します。
oc logs -n openshift-node-problem-detector <pod_name>
# oc logs -n openshift-node-problem-detector <pod_name>
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 出力は以下のようになります。
oc logs -n openshift-node-problem-detector node-problem-detector-c6kng
# oc logs -n openshift-node-problem-detector node-problem-detector-c6kng I0416 23:22:00.641354 1 log_monitor.go:63] Finish parsing log monitor config file: {WatcherConfig:{Plugin:journald PluginConfig:map[source:kernel] LogPath:/host/log/journal Lookback:5m} BufferSize:10 Source:kernel-monitor DefaultConditions:[{Type:KernelDeadlock Status:false Transition:0001-01-01 00:00:00 +0000 UTC Reason:KernelHasNoDeadlock Message:kernel has no deadlock}]
Copy to Clipboard Copied! Toggle word wrap Toggle overflow ノードのイベントをシミュレーションして Node Problem Detector をテストします。
echo "kernel: divide error: 0000 [#0] SMP." >> /dev/kmsg
# echo "kernel: divide error: 0000 [#0] SMP." >> /dev/kmsg
Copy to Clipboard Copied! Toggle word wrap Toggle overflow ノードの状態をシミュレーションして Node Problem Detector をテストします。
echo "kernel: task docker:7 blocked for more than 300 seconds." >> /dev/kmsg
# echo "kernel: task docker:7 blocked for more than 300 seconds." >> /dev/kmsg
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
25.6. Node Problem Detector のアンインストール リンクのコピーリンクがクリップボードにコピーされました!
Node Problem Detector をアンインストールするには、以下を実行します。
Ansible インベントリーファイルに以下のオプションを追加します。
[OSEv3:vars] openshift_node_problem_detector_state=absent
[OSEv3:vars] openshift_node_problem_detector_state=absent
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 以下の Ansible Playbook を実行します。
ansible-playbook /usr/share/ansible/openshift-ansible/playbooks/openshift-node-problem-detector/config.yml
# ansible-playbook /usr/share/ansible/openshift-ansible/playbooks/openshift-node-problem-detector/config.yml
Copy to Clipboard Copied! Toggle word wrap Toggle overflow