第4章:ノード/ランタイム運用

ノードはワークロードの実行基盤であり、kubelet とコンテナランタイム(例: containerd)を含みます。
本章では、ノードのライフサイクル管理と、ランタイム運用の論点を整理します。

学習目標

  • Node の障害モード(NotReady、ディスク逼迫、OOM 等)と切り分け観点を説明できる
  • ノード保守(パッチ、ドレイン、置き換え)の標準手順を定義できる
  • ランタイム運用(イメージ、ログ、GC)の観点を整理できる

扱う範囲 / 扱わない範囲

扱う範囲

  • kubelet の運用観点(状態監視、ログ、再起動、設定変更)
  • containerd/CRI-O 等の運用観点(イメージ管理、ログ、GC)
  • ノード保守(cordon/drain、ロールアウト、キャパシティ管理)
  • ノードプール設計(ラベル/taint、分離の入口)

扱わない範囲

  • OS チューニングの網羅(カーネルパラメータ等)
  • 特定ディストリビューションの詳細手順

定義(この章の用語)

  • Node: Pod が稼働する実行基盤(OS、kubelet、ランタイム等を含む)
  • kubelet: Node 上で Pod を起動/監視するエージェント
  • コンテナランタイム(CRI): containerd/CRI-O 等。イメージ管理やコンテナ実行を担う
  • drain: Node 上の Pod を退避させ、保守(パッチ/再起動/置き換え)を安全に実施するための操作

背景(なぜ重要か)

  • ノード障害は頻度が高く、放置すると小さな劣化(ディスク逼迫等)が広範囲の障害に波及します。
  • 運用の安全性は「手順の固定」と「段階的な実施」で決まります。属人化した保守は再現できません。

ノード運用の論点

  • キャパシティ管理: CPU/メモリ/ディスク/Pod 数、IP 枯渇
  • 保守: パッチ適用、再起動、置き換え(Immutable/AutoScaling との関係)
  • 変更の安全性: drain、PDB、段階的な更新
  • 観測性: Node/Runtime のメトリクス、ログ、イベントの集約

手順/例:ノード保守を Runbook 化する(最小)

  1. 事前確認: 影響範囲、PDB、退避先キャパシティ、実施順(ノードプール単位)を確認する
  2. 影響限定: cordon/drain で退避し、必要なら段階的に実施する
  3. 保守実施: パッチ/再起動/置き換え(方式は環境に依存。Immutable 方式も選択肢)
  4. 事後確認: Node Ready、主要ワークロードの復旧、監視の欠測がないことを確認する
  5. 証跡: 実施日時、対象ノード、実施内容、検証結果を記録する(変更管理)

判断の目安(例):

  • 一定時間 NotReady が継続し、原因が不明確な場合は「修理」より「置き換え」を優先します(MTTR を短くするため)。
  • DiskPressure 等の逼迫は、暫定的に削減して復旧しても再発しやすいため、恒久的な対策(ログ/イメージ/容量設計)とセットで扱います。

失敗例(例):

  • PDB を確認せずに drain し、重要ワークロードが同時に停止する
  • ノードを手作業で修理し続け、原因・再発防止が記録されない

代替案(例):

  • インプレース保守が難しい場合は、ノードを使い捨て(置き換え)前提の運用へ寄せます(ノードプール運用/自動修復の活用)。

注意点(運用)

  • drain は「安全に退避できる」ことが前提です。PDB や分散配置が弱い場合は、先に設計/標準を見直してください。
  • ノード上のログや Events は揮発しやすいため、障害調査に必要なログは集中管理しておきます(第9章)。

実務チェック観点(最低5項目)

  • Node NotReady/ディスク逼迫/メモリ逼迫を早期検知する監視がある
  • ノード保守手順(cordon/drain/置き換え)が Runbook 化されている
  • ランタイムのイメージ GC/ログローテーションの運用方針がある
  • ノードプール分離(重要系/汎用、GPU 等)が要件に基づき定義されている
  • 障害時の暫定復旧(退避、隔離、スケールアウト)の判断基準がある

よくある落とし穴

  • ノード保守が属人化し、手順/証跡が残らない
  • ログ/イメージの肥大化でディスク逼迫が常態化する

まとめ / 次に読む