Slide 1

Slide 1 text

Kubernetesはschedulerのパフォーマ ンスをどのように計測しているか @sanposhiho

Slide 2

Slide 2 text

お前 is 誰 名前: Kensei Nakada / sanposhiho 所属: 京都大学 Google Summer of Code @Kubernetes @sanposhiho @sanpo_shiho

Slide 3

Slide 3 text

web-based simulator for scheduler behaviour web上でschedulerの動作を 試せるもの 今日紹介する scheduler_perfの仕組みを (ちょこっと)参考にしており、 実際にクラスターを立ち上げ ることなく、 Schedulerの動作を再現する

Slide 4

Slide 4 text

[前提] Schedulerって? 一文で超簡単にいうと →「PodをどのNodeに配置するのが最適か決めてくれるやつ」 https://kubernetes.io/ja/docs/concepts/scheduling-eviction/kube-scheduler/

Slide 5

Slide 5 text

Kubernetes のコンポーネント図 引用: https://kubernetes.io/ja/docs/concepts/overview/components/

Slide 6

Slide 6 text

どうやってパフォーマンス計測してるの? 結論: /test/integration/scheduler_perf にパフォーマンスを確認できるテストがある https://github.com/kubernetes/kubernetes/tree/master/test/integration/scheduler_p erf

Slide 7

Slide 7 text

scheduler_perf のモチベーション Kubemarkのセットアップが大変 (README の方法で行くとGCE上でのセットアップが必要になる) → “Schedulerのみのパフォーマンス計測”であれば全てのコンポーネントは必要ない → 必要なコンポーネントのみを実行しよう - api server (+ etcd) - scheduler - PV controller

Slide 8

Slide 8 text

scheduler_perf のモチベーション ↓こんな感じでmakeから一発で実行できる

Slide 9

Slide 9 text

scheduler_perf のモチベーション こんな感じでworkloadを定義してパフォーマ ンスを計測できる → - Node作成 - Namespace作成 - Pod作成 などの動作をさせることが可能

Slide 10

Slide 10 text

Schedulerに必要なコンポーネント /test/integration/scheduler_perf/util.goのmustSetupScheduler で必要なコンポーネントをセットアップしています

Slide 11

Slide 11 text

Schedulerに必要なコンポーネント 1. Scheduler 主役なので当然必要。 /test/integration/util/util.goのStartSchedulerでscheduler.Newを直接呼び出して立ち 上げる

Slide 12

Slide 12 text

Schedulerに必要なコンポーネント 1. Scheduler 2. api-server(+ etcd) 流石に必要。etcdは/hack/install-etcd.shを使用してinstallし、テストの実行の際に立ち 上げる。 (テスト実行前に/hack/lib/etcd.shのkube::etcd::start()でインストールしたetcdを立ち上 げている) APIサーバーは/test/integration/util/util.goのStartApiserverに立ち上げる。

Slide 13

Slide 13 text

Schedulerに必要なコンポーネント 1. Scheduler 2. api-server(+ etcd) schedulerはEventHandlerを用いてPodやNodeなどの作成を見張っている。 Podが作成されるとそれを検知して、スケジュール待ちのキューに入れる → api-serverさえあればScheduleを開始することは可能

Slide 14

Slide 14 text

Schedulerに必要なコンポーネント 1. Scheduler 2. api-server(+ etcd) 3. PV controller PV, PVCに関係するplugin(volumebinding)が存在するため必要 本物のPV controllerを使用する代わりに、Schedulerに必要なロジックのみを簡単に表 現したFakePVControllerを使用している (/test/integration/util/util.goのStartFakePVControllerで立ち上げている)

Slide 15

Slide 15 text

まとめ - Kubernetesには、Kubemarkとは別にschedulerのパフォーマンスを計測するため のscheduler_perfというテストが存在する。 - scheduler_perfではクラスターを全て立ち上げるのではなく、スケジューラーにとっ て必要なコンポーネントのみを立ち上げるように工夫している