1
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

kube‑scheduler‑simulatorで、Kubernetesのスケジューラを「目で見る」時代が来た

Last updated at Posted at 2025-04-18

はじめに ― なぜシミュレータが必要なのか?

Kubernetes の kube‑scheduler は Pod をどのノードへ配置するかを決めるコントロールプレーンの要(かなめ)です。ところがスケジューラ内部は複数のプラグインが連携するブラックボックスになりがちで、

  • PodAffinity / TopologySpread などの制約が本当に効いているか分からない
  • カスタムプラグインを入れ替えても挙動をテストしづらい
  • 本番クラスターと同規模の負荷を安全に再現できない

といった悩みが絶えません。そこで登場したのが kube‑scheduler‑simulator です。GSoC 2021 で生まれ、現在は SIG Scheduling が中心となって開発が続いています。


kube‑scheduler‑simulator とは?

  • スケジューラの「決定理由」を Pod のアノテーションで可視化
  • Web UI でフィルタ/スコア各プラグインの結果を一覧表示
  • Docker だけでローカル起動。Kubernetes クラスター不要
  • KWOK を用いたフェイククラスター上で動作し、大量リソースを高速に生成可能
  • 実クラスターのリソースを一括・継続的にインポートし、本番同等の環境を安全に再現

これらの機能により「ミスを本番で知る」悪夢を防ぎつつ、スケジューラ開発者だけでなく一般ユーザーも気軽に検証できます。


アーキテクチャと動作フロー

  1. Simulator サーバー
    • HTTP API と Web UI を提供
  2. Debuggable Scheduler
    • 通常の kube‑scheduler を拡張し、各プラグイン結果を記録
  3. KWOK(Kubernetes WithOut Kubelet)
    • etcd/kube‑apiserver/controller‑manager を軽量起動し、フェイクリソースを即時反映
  4. ユーザー操作
    1. kubectl / Web UI で Pod を作成
    2. スケジューラが Filter → Score → Bind を実行
    3. 各段階の結果が Pod アノテーションに追加
    4. Web UI が結果を表・グラフで可視化

この一連の流れは公式 how‑it‑works ドキュメントでも詳しく説明されています。


かんたんセットアップ

git clone https://github.com/kubernetes-sigs/kube-scheduler-simulator.git
cd kube-scheduler-simulator
make docker_up        # 依存イメージを取得して全コンポーネントを起動

ブラウザで http://localhost:3000 を開けば準備完了! YAML エディタで Node / Pod / Deployment などを作成し、右ペインでスケジューリング結果を確認できます。


ハンズオン:TopologySpread の検証例

  1. Node を 3 台作成(ラベル zone=A/B/C
  2. ReplicaSet で 6 Pod を作成topologySpreadConstraintsmaxSkew: 1 を指定
  3. Web UI の Result タブを見ると、PodTopologySpread プラグインが passed と判定し、各ゾーンに 2‑2‑2 で分散されたことがスコア表に表示されます。
  4. スコア列をクリックすると、各プラグインが付与した点数が色分けで見えるので、Spread の重み付けや他プラグインとのバランスをすぐに把握できます。

実クラスターを“まるごと”シミュレートする

β機能の Import Cluster Resources を使うと、本番クラスターの API サーバーから

  • ① 初回のみ一括インポート
  • ② Cron 的に継続同期

のどちらかを選択できます。シミュレータ側ではスケジューラだけを置き換え、既存 workload へ影響を与えずに将来の設定変更やバージョンアップを検証できます。


主なユースケース

役割 具体的な使い道
クラスター利用者 Affinity / Spread / Taints が期待通りか確認
クラスター管理者 新しい kube-scheduler Config や FeatureGate の影響評価
プラグイン開発者 カスタムプラグイン/Extender のデバッグと CI 統合
SRE / 教育担当 スケジューラ内部アルゴリズムの教材、障害再現

Tips と現在の制限

  • Controller が最小限
    • ReplicaSet など一部コントローラは存在しないため、Pod 以外の高位リソースは自動展開されません。必要に応じて手動で Pod を生成してください。
  • 通信先がローカルのみ
    • デフォルト compose は localhost 前提。リモートで動かす場合は .envcompose.yml のポートを調整します。
  • アノテーション仕様が変わる場合あり
    • 2024 年 11 月の v0.4.0 で名前空間が scheduler-simulator/*kube-scheduler-simulator.sigs.k8s.io/* に変更されました。解析ツールを書く際は注意しましょう。

まとめ

kube‑scheduler‑simulator は

  1. スケジューラの不透明さを解消
  2. テスト容易性と本番同等の再現性を提供
  3. 初心者からプラグイン開発者まで幅広く役立つ

という三拍子そろったツールです。make docker_up で数分あれば試せますので、ぜひ一度 “目に見えるスケジューリング” を体験してみてください。

1
2
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?