Node Problem Detector は、ノードの状態をモニタリングし、ハードウェア、カーネル、コンテナ ランタイムなどの一般的なノードの問題を検出するオープンソース ライブラリです。GDCV for Bare Metal では、各ノードの systemd サービスとして実行されます。
GDCV for Bare Metal リリース 1.10.0 以降では、Node Problem Detector はデフォルトで有効になっています。
検出できる問題
Node Problem Detector は次のような問題を検出できます。
- コンテナ ランタイムの問題(ランタイム デーモンの無応答など)
- ハードウェアの問題(CPU、メモリ、ディスク障害など)
- カーネルの問題(カーネルのデッドロック状態やファイル システムの破損など)
これはノード上で実行され、NodeCondition
または Event
として Kubernetes API サーバーに問題を報告します。
(NodeCondition
はノードでの Pod の実行が不能になる問題です。一方、Event
は一時的な問題で、Pod への影響は限定的であるものの、要報告と見なされた問題です)。
Node Problem Detector によって検出される NodeConditions
には次のようなものがあります。
KernelDeadlock
ReadonlyFilesystem
FrequentKubeletRestart
FrequentDockerRestart
FrequentContainerdRestart
FrequentUnregisterNetDevice
KubeletUnhealthy
ContainerRuntimeUnhealthy
CorruptDockerOverlay2
Node Problem Detector によって報告される Events
の種類を以下に例示します。
Warning TaskHung node/vm-worker-1-user-a12fabb4a99cb92-ddfce8832fd90f6f.lab.anthos kernel: task docker:7 blocked for more than 300 seconds.
Warning KernelOops node/vm-worker-1-user-a12fabb4a99cb92-ddfce8832fd90f6f.lab.anthos kernel: BUG: unable to handle kernel NULL pointer dereference at 00x0.
検出された問題を確認する方法
ノードで次の kubectl describe
コマンドを実行して、NodeConditions
と Events
を検索します。
kubectl --kubeconfig=KUBECONFIG_PATH describe node NODE_NAME
このコマンド内で、次のエントリをクラスタ環境に固有の情報に置き換えます。
KUBECONFIG_PATH
: 対象クラスタの kubeconfig ファイルのパス。(通常、kubeconfig ファイルのパスはbmctl-workspace/CLUSTER_NAME/CLUSTER_NAME-kubeconfig
です。ただし、WORKSPACE_DIR フラグを使ってワークスペースを指定した場合、パスはWORKSPACE_DIR/CLUSTER_NAME/CLUSTER_NAME-kubeconfig
になります)。NODE_NAME
: 状態の情報を取得するノードの名前。
Node Problem Detector の有効化と無効化の方法
特定のクラスタで Node Problem Detector を有効にする手順は次のとおりです。
クラスタの
ConfigMap
ファイル(node-problem-detector-config
)を編集します。kubectl --kubeconfig=KUBECONFIG_PATH edit configmap \ node-problem-detector-config --namespace=CLUSTER_NAMESPACE
このコマンドにより、
node-problem-detector-config
ファイルを編集できるテキスト エディタ(vim や nano など)が自動的に起動します。このコマンド内で、次のエントリをクラスタ環境に固有の情報に置き換えます。- KUBECONFIG_PATH: 管理クラスタの kubeconfig ファイルのパス。(通常、kubeconfig ファイルのパスは
bmctl-workspace/CLUSTER_NAME/CLUSTER_NAME-kubeconfig
です。ただし、WORKSPACE_DIR フラグを使用してワークスペースを指定した場合、パスはWORKSPACE_DIR/CLUSTER_NAME/CLUSTER_NAME-kubeconfig
になります)。 - CLUSTER_NAMESPACE: Node Problem Detector を有効にするクラスタの名前空間。
- KUBECONFIG_PATH: 管理クラスタの kubeconfig ファイルのパス。(通常、kubeconfig ファイルのパスは
初期状態では、
node-problem-detector-config
ConfigMap
にdata
フィールドはありません。次の Key-Value ペアを使用して、data
フィールドを構成マップに追加します。data: enabled: "true"
クラスタの名前空間で Node Problem Detector を無効にする場合にも、上述のステップ 1 と 2 を実行します。その際、ステップ 2 では enabled
キーの値を「false」に変更します。
Node Problem Detector の停止と起動の方法
Node Problem Detector は、各ノードで systemd
サービスとして実行されます。特定のノードの Node Problem Detector を管理するには、SSH を使用してノードにアクセスし、次の systemctl
コマンドを実行します。
Node Problem Detector を無効にするには、次のコマンドを実行します。
systemctl stop node-problem-detector
Node Problem Detector を再起動するには、次のコマンドを実行します。
systemctl restart node-problem-detector
ノードの問題の検出機能が特定のノードで実行されているかどうかを確認するには、次のコマンドを実行します。
systemctl is-active node-problem-detector
サポートされていない機能
GDCV for Bare Metal は、Node Problem Detector の次のカスタマイズをサポートしていません。
- Node Problem Detector レポートを Stackdriver や Prometheus などの他のモニタリング システムへのエクスポート。
- 検索する
NodeConditions
またはEvents
のカスタマイズ。 - ユーザー定義のモニタリング スクリプトの実行。