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

k8sのオートスケール(VPA)を抑えよう!/ VPA Deep Dive

k8sのオートスケール(VPA)を抑えよう!/ VPA Deep Dive

oracle4engineer

April 20, 2022
Tweet

More Decks by oracle4engineer

Other Decks in Technology

Transcript

  1. ⾃⼰紹介 • 仁井⽥ 拓也 • ⽇本オラクル株式会社 • OCHaCafeメンバー • k8s中⼼のセッション

    (Network/Autoscale/Operator…) • 前職は某SIer • Cloud Native歴︓3年 • ジブリ⼤好き • OCHaCafeではジブリネタ(本編)で皆様をお待ちし ております︕︕ @takuya_0301 2 Copyright © 2022, Oracle and/or its affiliates.
  2. 今⽇のトピック Podの⽔平スケール(Horizontal Pod Autoscaler) • Podの数を増やすことによって処理性能を向上させるスケール⼿法 • CPUやメモリをはじめとして、ユーザ独⾃のメトリクスなども判断材料に利⽤可能 Podの垂直スケール(Vertical Pod

    Autoscaler) • Podが利⽤可能なリソースを増強することによって処理性能を向上させるスケール⼿法 • 主にCPUとメモリを判断材料に利⽤ Nodeの⽔平スケール(Cluster Autoscaler) • Worker Nodeの台数を増やすことによって処理性能を向上させるスケール⼿法(k8s環境によって実装は異なる) • Podの⽔平スケールと連携することも Nodeの垂直スケール • Kubernetesの機能としては未実装 • クラウドベンダーなどが提供するAPIなどを利⽤してNodeのリソース増強は可能・・・ • 現時点(2022/3)時点では、各ベンダーでComputeのスペックをオンラインで変更する仕組みはない 6 Copyright © 2022, Oracle and/or its affiliates. Copyright © 2022, Oracle and/or its affiliates. 6
  3. Vertical Pod Autoscaler(VPA) • コンテナアプリケーション環境(Pod)を垂直ス ケール(スケールアップ/ダウン)する仕組み • Podに要求されるCPU/メモリを推奨値を算 出して調整(Resource Requestsを上書き)

    • スケール定義はVPA(VerticalPodAutoscaler)リ ソースとして定義 • 複数のControllerの組み合わせで管理(HPAとは 異なる) • 主にUpdater、Admission Controller、 Recommenderが連携して動作 • 原則としてスケール時にはPodの再起動が 発⽣(Resource Requestsを適⽤させるため) • 起動中のままのスケールは未実装 VPA(Vertical Pod Autoscaler) Copyright © 2022, Oracle and/or its affiliates. 8 CPU︓0.5 CPU Memory︓200Mi CPU︓1.0 CPU Memory︓750Mi Updater Admission Controller Recommender
  4. VPA(Vertical Pod Autoscaler) Manifest例 Copyright © 2022, Oracle and/or its

    affiliates. 9 項番 項⽬ 内容 1 スケール対象 スケール対象の apiVersion/kind/nameを指定。 基本的にはapiVersion: apps/v1、 kind: Deploymentを指定。 2 アップデート ポリシー Auto、Recreate、Initial、Off • Auto(Default):再起動によるスケール アップ(将来的にはin-place?) • Recreate:再起動によるスケールアッ プ • Initial:Pod作成時にスケールアップ (evictしない) • Off:スケール値の算出だけ(スケール アップしない)
  5. Recommender • metrics serverからPodのメトリクスを取得し、リソースの実績を判断 • Resource Requestsの推奨値(下限/⽬標値/上限)を判断 • 推奨値の算出アルゴリズムは少し複雑・・・ •

    kubernetes/autoscaler/vertical-pod-autoscaler/pkg/recommender/logic/estimator.goにロジックが抽象化 Updater • RecommenderがVPAリソースに書き込んだ推奨値と動作中のPodのResource Requestsの値を⽐較 • 推奨値の範囲から外れている場合はそのPodを排除 Admission Controller • Updaderにより排除されたPodを再作成する際にAPI ServerのPodリクエストに割り込み • Resource Requestの値を書き換え(上書き) VPAを実現するController群(updatePolicy:Recreateの場合) Copyright © 2022, Oracle and/or its affiliates. 11
  6. VPAのスケールの仕組み(updateMode:Auto/Recreateの場合) Copyright © 2022, Oracle and/or its affiliates. 12 Updater

    Admission Controller Recommender ⑤Resource Requestsの推奨値と 現在のResource Requestsの⽐較 ⑥Podのevict ③Resource Requestsの推奨値算出 ④Resource Requestsの推奨値を登録 ①VPAリソースを読み込み ② Podのメトリクス取得 metrics server ⑦ Resource Requestsの 推奨値取得 ⑧Podのspecを上書き VPAリソース
  7. 実は・・・ CPU/メモリ使⽤率によるHPA/VPAでは・・・ (参考) HPAとVPAの併⽤ Copyright © 2022, Oracle and/or its

    affiliates. 13 CPUとメモリをスケール条件にしたHPAとVPAの併⽤は禁⽌︕︕ VPA VPAによってスケールされたPodに対してHPAでのスケール を適⽤すると、Pod毎のResource Requestsが煩雑になり、想 定通りのスケール挙動にならない可能性が⾼い ※HPAが実施された結果、オーバスケールだったり、ス ケール不⾜になることも…
  8. HPA(Podの数が増減するスケール⽅式) • Podが使⽤しているリソースとResource Requestsをもとに⽔平スケール • スケールの範囲や振る舞いをユーザ側で定義する必要性 • アプリケーション(Pod)にかかる負荷の傾向を把握 • コスト(経済/リソース)を考慮しながらスケール範囲の⾒極め

    • アプリケーションの特性や運⽤、サービス指標(SLA/SLOも含む)などを考慮し、スケールの振る舞 いを定義 VPA(Podのspec(Resource Requests)をスケール⽅式) • Podが使⽤しているリソース(CPU/メモリ)をもとに垂直スケール • 実際のリソース使⽤量を把握できていなくもよしなにスケール(実績値との乖離を防⽌) • 実際にスケールさせなくても、算出された推奨値を確認するだけという利⽤⽅法も • クラスタ全体のリソースを有効活⽤可能 • 現時点では、原則としてはPodの再起動が必要(in-placeは未実装) ここまでのまとめ: HPAとVPA Copyright © 2022, Oracle and/or its affiliates. 14
  9. シナリオ • VPAの各コンポーネント(Updater/Admission Controller/Recommender)をインストール • スケール対象のアプリケーションをデプロイ • アプリケーションのResource Requestsの初期値を確認 •

    Recommenderによる推奨値算出の確認 • アプリケーション(Pod)のResource Requestsが上書きされることを確認 VPAデモ Copyright © 2021, Oracle and/or its affiliates. 15 HPAはDeploymentがスケール対象でした。 VPAでは、Pod⾃体がスケール対象であることを意識してデモをご覧ください!
  10. • 開発者・エンジニアにお届けするテクニカル な勉強会です • クラウドネイティブな時代に⾝につけておくべ きテクノロジーを深堀りしていきます • テーマはオープン/デファクト・スタンダード を 基準に選定し、Oracle固有な話題にはな

    らないように、且つ学んだ知識は広く応⽤が 利くように、配慮しています Season 5 • Kubernetes Operator 超⼊⾨ • Kubernetesで並列分散処理 • Kubernetes のセキュリティ • 挑戦 Typescript • 実験︕カオスエンジニアリング • MLOps を始めよう︕ 16
  11. #ochacafe History Season 1 • コンテナを使ったCI/CD • Microservicesの運⽤・管理 • MicroservicesなJavaアプリケーション

    • Hyperledger Fabricアプリケーション設計⼊⾨ガイド • 避けては通れない︕認証・認可 • ⼈にもマシンにもやさしいAPIのエコシステム Season 2 • これからはじめる︕Kubernetes基礎 • ⼀体何モノなの︖GraalVM ⼊⾨ • Serverlessな世界をのぞいてみよう︕ • Cloud Native時代のモダンJavaの世界 • 変幻⾃在♪ 広がるKubernetesのエコシステム • Cloud Native × Streaming はじめの⼀歩 OCHaCafe Premium (Oracleフォーカス spin-off) • Oracle Cloudで考える⾼可⽤性アーキテクチャ • クラウド・アプリケーションのパフォーマンス • Oracle Cloud Infrastructure Cloud Native 2021 • マイクロサービスとデータマネージメント • クラウドで実践するEnterprise Java Season 3 • Cloud Native流のストレージ管理 • サービス間通信のトレンド - gRPC & GraphQL⼊⾨ • Kubernetesクラスタの管理術 • 挑戦! JavaでReactiveプログラミング • 明解! NoSQLの勘所 • コンテナ・ランタイムの未来 Season 4 • ⽣体認証のイロハ • Kubernetesのネットワーク • CI/CD 最新事情 • マイクロサービスの認証・認可とJWT • Kubernetes のオートスケーリング • Observability 再⼊⾨ Season 5 • Kubernetes Operator 超⼊⾨ • Kubernetesで並列分散処理 • Kubernetes のセキュリティ • 挑戦 Typescript • 実験︕カオスエンジニアリング • MLOps を始めよう︕
  12. <詳細・お申し込み> http://oracle.com/goto/emp-oradev Developer Days 未来を創造する最新テクノロジーを今、あなたの⼿に。 ITに携わるすべての開発者とエンジニアに オラクル テクノロジー最新情報を お届けするオンラインイベントを2⽇間開催︕ ❃━━━…‥・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・

    DB Day : 2022年5⽉20⽇ (⾦) 13:00 ~ Cloud Day : 2022年5⽉27⽇ (⾦) 13:00 ~ オンライン開催 参加費︓無料 (事前登録制) ハッシュタグ︓ #oradev22 ・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・‥…━━━❃
  13. <詳細・お申し込み> http://oracle.com/goto/emp-oradev Developer Days ハッシュタグ︓ #oradev22 ❃━…・・ Cloud Day 注⽬のセッション

    ・・…━❃ 【パネルディスカッション】 徹底討論︕マイクロサービス開発におけるJavaの最適解 【スペシャルセッション】 データの⼀貫性を確保 : Oracle Transaction Manager for Microservices によるクラウド・ネイティブ・アプリケーションの実現 Deepak Goel Software Development in the Database, Senior Director Todd Little Oracle Tuxedo Chief Architect Oracle Blockchain Platform and the Oracle Transaction Manager for Microservices. Brijesh Kumar Deo Blockchain and Distributed Transactions Technology Team Consulting Member of Technical Staff 上⽥ 志雄 ⽒ 東京ガスiネット株式会社 ロジ⼦ ⽒ 須江 信洋 ⽒ レッドハット株式会社 古⼿川 忠久 DB Day : 2022年5⽉20⽇ (⾦) / Cloud Day : 2022年5⽉27⽇ (⾦) 【Showcase】 Kubernetes & Observability ⼊⾨
  14. Oracle Developer Days 2022 - Spring 13:00 - 13:05 オープニング

    13:05 – 13:50 Ensuring data consistency for Cloud native apps with Oracle Transaction Manager for Microservices データの⼀貫性を確保 : Oracle Transaction Manager for Microservices(TMM)によるクラウド・ネイティブ・アプリケーションの実現 Deepak Goel / Todd Little / Brijesh Kumar Deo (Oracle Corporation) *⽇本語字幕付き 英語⾳声 13:50 – 13:55 休憩 (5分) 13:55 – 14:55 【パネルディスカッション】 徹底討論︕マイクロサービス開発におけるJavaの最適解 <モデレーター> 上⽥ 志雄 ⽒ (東京ガスiネット株式会社) <パネラー> ロジ⼦ ⽒ |須江 信洋 ⽒ (レッドハット株式会社) | 古⼿川 忠久 (⽇本オラクル株式会社) 14:55 – 15:05 休憩 (10分) 15:05 – 15:55 Microservices アーキテクチャのトランザクション管理の現実 ⼭成 慎吾 (⽇本オラクル株式会社) 15:05 - 16:50 【ハンズオン】 次世代Java⾼速実⾏基盤 GraalVM 鈴⽊ 淳 (Oracle Corporation) 15:05 - 17:45 【Showcase】 OCI Cloud Native Observability Service 市川 豊 仁井⽥ 拓也 (⽇本オラクル株式会社) 15:55 – 16:00 休憩 (5分) 16:00 – 16:50 ブロックチェーンの本格利⽤を加速するOracleのソリューション 中村 岳 (⽇本オラクル株式会社) 16:50 – 16:55 休憩 (5分) 16:55 – 17:45 データベースとクラウドのセキュリティを網羅的に活⽤する⽅法 ⻄村 克也 (⽇本オラクル株式会社) 17:45 – 17:50 クロージング Cloud Day 2022年 5⽉27⽇ (⾦) | 13:00 – 18:35 *12:45接続開始 (Zoom) ◀ 詳細/お申し込み