ノードの問題の検出機能

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 コマンドを実行して、NodeConditionsEvents を検索します。

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 を有効にする手順は次のとおりです。

  1. クラスタの 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 を有効にするクラスタの名前空間。
  2. 初期状態では、node-problem-detector-config ConfigMapdata フィールドはありません。次の 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 のカスタマイズ。
  • ユーザー定義のモニタリング スクリプトの実行。