Kubernetes Meetup Tokyo #43 LT https://k8sjp.connpass.com/event/217089/
Kubernetesはschedulerのパフォーマンスをどのように計測しているか@sanposhiho
View Slide
お前 is 誰名前: Kensei Nakada / sanposhiho所属: 京都大学Google Summer of Code @Kubernetes@sanposhiho@sanpo_shiho
web-based simulator for scheduler behaviourweb上でschedulerの動作を試せるもの今日紹介するscheduler_perfの仕組みを(ちょこっと)参考にしており、実際にクラスターを立ち上げることなく、Schedulerの動作を再現する
[前提] Schedulerって?一文で超簡単にいうと→「PodをどのNodeに配置するのが最適か決めてくれるやつ」https://kubernetes.io/ja/docs/concepts/scheduling-eviction/kube-scheduler/
Kubernetes のコンポーネント図引用: https://kubernetes.io/ja/docs/concepts/overview/components/
どうやってパフォーマンス計測してるの?結論: /test/integration/scheduler_perf にパフォーマンスを確認できるテストがあるhttps://github.com/kubernetes/kubernetes/tree/master/test/integration/scheduler_perf
scheduler_perf のモチベーションKubemarkのセットアップが大変(README の方法で行くとGCE上でのセットアップが必要になる)→ “Schedulerのみのパフォーマンス計測”であれば全てのコンポーネントは必要ない→ 必要なコンポーネントのみを実行しよう- api server (+ etcd)- scheduler- PV controller
scheduler_perf のモチベーション↓こんな感じでmakeから一発で実行できる
scheduler_perf のモチベーションこんな感じでworkloadを定義してパフォーマンスを計測できる →- Node作成- Namespace作成- Pod作成などの動作をさせることが可能
Schedulerに必要なコンポーネント/test/integration/scheduler_perf/util.goのmustSetupSchedulerで必要なコンポーネントをセットアップしています
Schedulerに必要なコンポーネント1. Scheduler主役なので当然必要。/test/integration/util/util.goのStartSchedulerでscheduler.Newを直接呼び出して立ち上げる
Schedulerに必要なコンポーネント1. Scheduler2. api-server(+ etcd)流石に必要。etcdは/hack/install-etcd.shを使用してinstallし、テストの実行の際に立ち上げる。(テスト実行前に/hack/lib/etcd.shのkube::etcd::start()でインストールしたetcdを立ち上げている)APIサーバーは/test/integration/util/util.goのStartApiserverに立ち上げる。
Schedulerに必要なコンポーネント1. Scheduler2. api-server(+ etcd)schedulerはEventHandlerを用いてPodやNodeなどの作成を見張っている。Podが作成されるとそれを検知して、スケジュール待ちのキューに入れる→ api-serverさえあればScheduleを開始することは可能
Schedulerに必要なコンポーネント1. Scheduler2. api-server(+ etcd)3. PV controllerPV, PVCに関係するplugin(volumebinding)が存在するため必要本物のPV controllerを使用する代わりに、Schedulerに必要なロジックのみを簡単に表現したFakePVControllerを使用している(/test/integration/util/util.goのStartFakePVControllerで立ち上げている)
まとめ- Kubernetesには、Kubemarkとは別にschedulerのパフォーマンスを計測するためのscheduler_perfというテストが存在する。- scheduler_perfではクラスターを全て立ち上げるのではなく、スケジューラーにとって必要なコンポーネントのみを立ち上げるように工夫している