Upgrade to Pro — share decks privately, control downloads, hide ads and more …

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

sanposhiho
July 21, 2021
580

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

Kubernetes Meetup Tokyo #43 LT
https://k8sjp.connpass.com/event/217089/

sanposhiho

July 21, 2021
Tweet

Transcript

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

  12. 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に立ち上げる。

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide