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

GKE Custom Compute Classesの紹介&機能をOperaterによる自作で...

tsuruyoshi ryu
February 05, 2025
380

GKE Custom Compute Classesの紹介&機能をOperaterによる自作で再現した話

tsuruyoshi ryu

February 05, 2025
Tweet

Transcript

  1. 自己紹介 > 竜 鶴吉 / Tsuruyoshi Ryu > 早稲田大学基幹理工学部 情報通信学科4年(春から修士1年)

    > 株式会社3-shakeでインターン中 → GKEの比較的新しい機能である Custom Compute Classesに 関する技術検証
  2. Custom Compute Classesについて > Nodeがオートスケールする際の 優先順位ルールをカスタ ムリソースで定義できる > 「優先的に◯◯のSpot VMを使用し、中断等により利用で

    きない場合は◯◯のOn-Demandを使用する」といった形の ルールを定義 > 在庫が再び戻った際には再度最優先のルールを適用しス ケジューリングを行う ※公式ドキュメントに全ての機能が記載されているわけではない ので、CRDを確認することをオススメします!
  3. どう実装したか > Kubernetes Operatorを開発するためのフレームワークである、 Kubebuilder を利用し実装 > GKEのCluster AutoScalerと組み合わせる形で機能を再現 (Cluster

    AutoScalerによるスケジューリングをKubebuilderで制御しながら理想 のスケジューリング要件を満たすようにする )
  4. 実装方針 > Mutating Admission Webhooksにより、Pod/Node起動 時に以下処理を追加 - 各Nodeに、そのNodeのマシン(N2, E2など)をValue としたTaintを付与

    - Podに対しては、最優先で利用したいNodeに付与 されているTaintを許容するTolerationを付与→そ のNodeのみがスケジューリング対象に - ラベルが付与されていない、カスタムルールを適用し たくないPodに対してはValueを指定しない形で全て のTaintsを許容するようにすることで影響を受けなく なる Taints/Tolerationsの例
  5. カスタムルールに基づく Spot VMの利用 > Spot VMを使用したい時(カスタムリソースでspot: true) → NodeSelectorを自動付与し、Spotに関するラベルの付与されたNodeへのスケジューリングを試みる >

    On-Demandを利用したい時(カスタムリソースでspot: false) → NodeAffinityを自動付与し、Spotに関するラベルの付与されていないNodeをスケジューリング対象とする Mutating Admission Webhooksを利用
  6. フォールバックについて > イベント駆動でPodの状態変化(ex. Running→Pending)をリ アルタイムで検知する >Spot中断等により最優先ルールが適用できずTaintsにより Pending状態となったPodがある場合、そのPodに対して2番 目の優先度ルールを満たすような Tolerationを付与する(別 の理由で一瞬PendingとなっているだけのPodに対し処理をし

    ないように、一定以上Pending状態が続いたPodのみ対象と する) > 最優先ルールが適用できず PendingだったPodが2番目の カスタムルールを満たすようスケジューリングされるようにな る Reconcile Loopはリソースの理想状態を維 持するが、Podの状態変化による処理の実 行には向いていない →Informerを用いてPodの状態変化を検知 し、Runnableにより処理を実行する
  7. まとめ > GKEの新しい機能である、 Custom Compute Classesの紹介 > Cluster AutoScalerとKubebuilderを組み合わせる形でのスケジューリングに関する紹介 -

    定義した最優先のInstanceに関するNode利用、フォールバック時に 2番目のルール適用、 Spot VM利用 など - カスタムリソース適用時、必要に応じて NodePoolを自動で起動 - Nodeに付与したTaintsに対し、カスタムリソースで定義したルールに基づいて適切な TolerationsをPod に付与していくことで、スケジューリングの制御を行う - Podの状態をInformerによりリアルタイムで検知し、フォールバック時の Toleration追加処理を実現 > より詳しい内容はブログに記載しています! (詰まった点とその解消方法や、他に考えたが採用しなかった方 針なども書いています )