7.9 KiB
title | content_type | reviewers | weight | |
---|---|---|---|---|
ノードの健全性を監視します | task |
|
20 |
Node Problem Detectorは、ノードの健全性を監視し、報告するためのデーモンです。
Node Problem Detector
はDaemonSet
として、あるいはスタンドアロンデーモンとして実行することができます。
Node Problem Detector
は様々なデーモンからノードの問題に関する情報を収集し、これらの状態をNodeConditionおよび[Event](/docs/reference/generated/kubernetes-api/{{< param "version" >}}/#event-v1-core)としてAPIサーバーにレポートします。
Node Problem Detector
のインストール方法と使用方法については、Node Problem Detectorプロジェクトドキュメントを参照してください。
{{% heading "prerequisites" %}}
{{< include "task-tutorial-prereqs.md" >}}
制限事項
-
Node Problem Detectorは、ファイルベースのカーネルログのみをサポートします。
journald
のようなログツールはサポートされていません。 -
Node Problem Detectorは、カーネルの問題を報告するためにカーネルログフォーマットを使用します。 カーネルログフォーマットを拡張する方法については、Add support for another log format を参照してください。
ノード問題検出の有効化
クラウドプロバイダーによっては、Node Problem Detector
を{{< glossary_tooltip text="Addon" term_id="addons" >}}として有効にしている場合があります。
また、kubectl
を使ってNode Problem Detector
を有効にするか、Addon pod
を作成することで有効にできます。
kubectlを使用してNode Problem Detectorを有効化します
kubectl
はNode Problem Detector
を最も柔軟に管理することができます。
デフォルトの設定を上書きして自分の環境に合わせたり、カスタマイズしたノードの問題を検出したりすることができます。
例えば:
-
node-problem-detector.yaml
のようなNode Problem Detector
の設定を作成します:{{% codenew file="debug/node-problem-detector.yaml" %}}
{{< note >}} システムログのディレクトリが、お使いのOSのディストリビューションに合っていることを確認する必要があります。 {{< /note >}}
-
Node Problem Detector
をkubectl
で起動します。kubectl apply -f https://k8s.io/examples/debug/node-problem-detector.yaml
Addon podを使用してNode Problem Detectorを有効化します
カスタムのクラスターブートストラップソリューションを使用していて、デフォルトの設定を上書きする必要がない場合は、Addon Pod
を利用してデプロイをさらに自動化できます。
node-problem-detector.yaml
を作成し、制御プレーンノードのAddon Pod
のディレクトリ/etc/kubernetes/addons/node-problem-detector
に設定を保存します。
コンフィギュレーションを上書きします
Node Problem Detector
の Dockerイメージをビルドする際に、default configurationが埋め込まれます。
ConfigMap
を使用することで設定を上書きすることができます。
-
config/
にある設定ファイルを変更します -
ConfigMap
node-problem-detector-config
を作成します。kubectl create configmap node-problem-detector-config --from-file=config/
-
node-problem-detector.yaml
を変更して、ConfigMap
を使用するようにします。{{% codenew file="debug/node-problem-detector-configmap.yaml" %}}
-
新しい設定ファイルで
Node Problem Detector
を再作成します。# If you have a node-problem-detector running, delete before recreating kubectl delete -f https://k8s.io/examples/debug/node-problem-detector.yaml kubectl apply -f https://k8s.io/examples/debug/node-problem-detector-configmap.yaml
{{< note >}}
この方法は kubectl
で起動された Node Problem Detector にのみ適用されます。
{{< /note >}}
ノード問題検出装置がクラスターアドオンとして実行されている場合、設定の上書きはサポートされていません。
Addon Manager
は、ConfigMap
をサポートしていません。
Kernel Monitor
Kernel MonitorはNode Problem Detector
でサポートされるシステムログ監視デーモンです。
Kernel Monitorはカーネルログを監視し、事前に定義されたルールに従って既知のカーネル問題を検出します。
Kernel Monitorはconfig/kernel-monitor.json
にある一連の定義済みルールリストに従ってカーネルの問題を照合します。
ルールリストは拡張可能です。設定を上書きすることで、ルールリストを拡張することができます。
新しいNodeConditionsの追加
新しいNodeCondition
をサポートするには、例えばconfig/kernel-monitor.json
のconditions
フィールド内に条件定義を作成します。
{
"type": "NodeConditionType",
"reason": "CamelCaseDefaultNodeConditionReason",
"message": "arbitrary default node condition message"
}
新たな問題の発見
新しい問題を検出するために、config/kernel-monitor.json
のrules
フィールドを新しいルール定義で拡張することができます。
{
"type": "temporary/permanent",
"condition": "NodeConditionOfPermanentIssue",
"reason": "CamelCaseShortReason",
"message": "regexp matching the issue in the kernel log"
}
カーネルログデバイスのパスの設定
ご使用のオペレーティングシステム(OS)ディストリビューションのカーネルログパスをご確認ください。
Linuxカーネルのログデバイスは通常/dev/kmsg
として表示されます。
しかし、OSのディストリビューションによって、ログパスの位置は異なります。
config/kernel-monitor.json
のlog
フィールドは、コンテナ内のログパスを表します。
log
フィールドは、Node Problem Detector
で見たデバイスパスと一致するように設定することができます。
別のログ形式をサポートします
Kernel monitorはTranslator
プラグインを使用して、カーネルログの内部データ構造を変換します。
新しいログフォーマット用に新しいトランスレータを実装することができます。
推奨・制限事項
ノードの健全性を監視するために、クラスターでNode Problem Detectorを実行することが推奨されます。
Node Problem Detector
を実行する場合、各ノードで余分なリソースのオーバーヘッドが発生することが予想されます。
通常これは問題ありません。
- カーネルログは比較的ゆっくりと成長します。
- Node Problem Detector にはリソース制限が設定されています。
- 高負荷時であっても、リソースの使用は許容範囲内です。
詳細はNode Problem Detector
ベンチマーク結果を参照してください。