コンテンツにスキップ

Node Problem Detector

Node Problem Detector は、略して NPD と呼ばれ、Kubernetes のオープンソースクラスターノード監視プラグインで、ノード障害の検査に使用します。

NPD の機能

  • イベント情報を生成し、APIServer に報告します。
  • メトリクス情報を検出し、Metrics として出力します。

設定

前提条件

  • K8S 環境をインストールする
  • DataKit をインストールする

NPD のインストール

インストールドキュメントを参照できます。ここでは yaml 方式でインストールします。

kubectl apply -f rbac.yaml
kubectl apply -f node-problem-detector-config.yaml
kubectl apply -f node-problem-detector.yaml

ログイベントモード

NPD をデフォルトでインストールすると、追加設定は不要です。Datakit はデフォルトで Kubernetes イベントを収集し、データソースが Kubernetes_events のログの reason(tag)に保存します。

メトリクスモード

イベントモードに加えて、NPD はメトリクスの出力もサポートします

事前準備

DataKit で ServiceMonitor を有効化する

Pod/Service の Prometheus メトリクスを自動検出する

以下では ServiceMonitor 方式で NPD のメトリクス情報を収集します

  • node-problem-detector.yaml を調整する
...
      - name: node-problem-detector
        command:
        - /node-problem-detector
        - --logtostderr
        - --config.system-log-monitor=/config/kernel-monitor.json,/config/docker-monitor.json
        - --address=0.0.0.0
        - --prometheus-address=0.0.0.0
...
        ports:
        - containerPort: 20257
          hostPort: 20257
          name: man-port
  • npd-service.yaml を作成する
apiVersion: v1
kind: Service
metadata:
  name: node-problem-detector
  namespace: kube-system
  labels:
    app: node-problem-detector
spec:
  selector:
    app: node-problem-detector
  ports:
    - protocol: TCP
      port: 20257
      targetPort: 20257
      name: metrics
  • npd-server-monitor.yaml を作成する
apiVersion: monitoring.coreos.com/v1
kind: ServiceMonitor
metadata:
  name: npd-server-metrics
  labels:
    app: node-problem-detector
    namespace: kube-system
spec:
  selector:
    matchLabels:
      app: node-problem-detector
  endpoints:
  - port: metrics
    params:
      measurement:
        - node-problem-detector
  • 実行する
kubectl apply -f rbac.yaml
kubectl apply -f node-problem-detector-config.yaml
kubectl apply -f node-problem-detector.yaml
kubectl apply -f npd-service.yaml
kubectl apply -f npd-server-monitor.yaml

メトリクス

problem_gauge

Tag 説明
type="ConntrackFullProblem" ノードの接続追跡テーブル障害
type="EmptyDirVolumeGroupStatusError" 一時ボリュームのストレージプール障害
type="MemoryProblem" ノードメモリ障害
type="LocalPvVolumeGroupStatusError" ノード上の永続ボリュームのストレージプール障害
type="MountPointProblem" ノードのマウントポイント障害
type="FDProblem" システムの重要リソースである FD ファイルハンドル数の障害
type="DiskHung" ノードのディスクに IO 停滞があるかどうか
type="DiskReadonly" ノードのディスクが読み取り専用かどうか
type="DiskProblem" ノードのシステムディスク障害
type="DiskSlow" ノードのディスクに低速 IO 障害があるかどうか
type="FrequentCRIRestart" CRI が頻繁に再起動している
type="FrequentDockerRestart" Docker が頻繁に再起動している
type="FrequentKubeletRestart" Kubelet が頻繁に再起動している
type="FrequentContainerdRestart" Containerd が頻繁に再起動している
type="NTPProblem" ntpd 同期異常
type="PIDProblem" システムの重要リソースである PID プロセス資源が不足している
type="ResolvConfFileProblem" ResolvConf の設定異常
type="CNIProblem" CNI(コンテナネットワーク)コンポーネント異常
type="CRIProblem" コンテナランタイムコンポーネントである Docker または Containerd の稼働状態異常
type="KUBEPROXYProblem" Kube-proxy の動作異常
type="KUBELETProblem" Kubelet の状態異常
type="ScheduledEvent" ホストの予定イベントが存在するかどうか
type="ProcessD" ノードに D プロセスが存在する
type="ProcessZ" ノードに Z プロセスが存在する

ログ

以下の一覧には、デフォルト設定下で NPD が検出できるイベントが含まれますが、これに限定されません。イベントはデータソースが Kubernetes_events のログに書き込まれます。

原因 永続性 説明
DockerHung はい Docker がハングする、または応答しない
ReadonlyFilesystem はい ファイルシステムが読み取り専用モードでマウントされています。通常は保護機構の一種であり、場合によってはファイルシステムの破損を防ぎます
CorruptDockerOverlay2 はい Overlay2 ストレージドライバに問題がある
ContainerdUnhealthy はい Containerd が異常状態にある
KubeletUnhealthy はい Kubelet が異常状態にある
DockerUnhealthy はい Docker が異常状態にある
OOMKilling いいえ Kubernetes が OOM により Pod を終了した
TaskHung いいえ タスクがハングした
UnregisterNetDevice いいえ ネットワークインターフェースの異常
KernelOops いいえ カーネルが検出した異常動作。例: NULL ポインタ、デバイスエラー
Ext4Error いいえ Ext4 ファイルシステムの問題
Ext4Warning いいえ Ext4 ファイルシステムの問題
IOError いいえ バッファの問題
MemoryReadError いいえ 修復可能なメモリエラー。頻発する場合はメモリハードウェアに問題がある可能性があります
KubeletStart いいえ Kubelet の起動。頻繁に発生する場合は Kubelet が頻繁に再起動していることを意味します
DockerStart いいえ Docker の起動。頻繁に発生する場合は Docker が頻繁に再起動していることを意味します
ContainerdStart いいえ Containerd の起動。頻繁に発生する場合は Containerd が頻繁に再起動していることを意味します
CorruptDockerImage いいえ Docker registry で使用されるディレクトリが空ではない
DockerContainerStartupFailure いいえ Docker を起動できない
ConntrackFull いいえ ネットワーク接続追跡数が上限に達しており、NAT やファイアウォールなどのネットワーク機能に影響します
NTPIsDown いいえ NTP 時刻同期異常

フィードバック

このページは役に立ちましたか?