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

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

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

oracle4engineer

March 23, 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. K8sのオートスケールにはどんな種類がある︖ 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.
  3. 今⽇のトピック 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のスペックをオンラインで変更する仕組みはない 7 Copyright © 2022, Oracle and/or its affiliates.
  4. HPA Horizontal Pod Autoscaler(HPA) • コンテナアプリケーション環境(Pod)を⽔平スケール(ス ケールアウト/イン)する仕組み • 正確にはDeployment(ReplicaSet)のレプリカ数を スケール

    • HorizontalPodAutoscalerリソースに振る舞い(ス ケール範囲、スケール時の挙動)を定義 • Controller Managerのひとつである HorizontalPodAutoscalerControllerが管理を実施 • デフォルトでは15秒間隔で周期 • HPAリソースに定義したターゲット値に近づくように Podの数を調整 • 基本はPodの平均CPU/メモリ使⽤率を利⽤する が、カスタムメトリクスも利⽤可能 ・・・ Replica数を 変更 Replica数に応じ てスケール HorizontalPod AutoscalerController 9 Copyright © 2022, Oracle and/or its affiliates.
  5. HPAのスケールの仕組み(CPU/メモリ使⽤率を利⽤する場合) ! ! ! HorizontalPod AutoscalerController metrics server ①HPAリソース取得 ③メトリクス取得

    ⑤スケール指⽰ ②メトリクス取得 ④スケール量算出 ⑥スケール 10 Copyright © 2022, Oracle and/or its affiliates.
  6. HPAのスケールロジック(CPUを例に) 以下の計算式で必要レプリカ数を算出 具体例) • Pod(現レプリカ数:5)の平均CPU使⽤率の合計が90%、ターゲットのCPU使⽤率が70%の場合 • 必要なレプリカ数 = 5 *

    (90(%) / 70(%)) = 6.42・・・ • 7個のレプリカが必要(2個のレプリカが追加) • Pod(現レプリカ数:5)の平均CPU使⽤率の合計が50%、ターゲットのCPU使⽤率が70%の場合 • 必要なレプリカ数 = 5 * (50 (%) / 70 (%)) = 3.57・・・ • 4個のレプリカが必要(1個のレプリカを削減) 考慮事項 • ⼩数点切り上げ • 「Podの平均CPU使⽤率」は、各Podの過去1分間のCPU使⽤率 必要なレプリカ数 = 現在のレプリカ数 * ( Podの平均CPU使⽤率 / ターゲットCPU使⽤率 ) CPU100%の基準は・・・?? 「ターゲットCPU使⽤率」・・・?? 12 Copyright © 2022, Oracle and/or its affiliates.
  7. HPA利⽤時のDeployment(Pod)側の定義 この部分の数値をCPU利⽤率100%と⾒る Resource RequestsとResource Limitsの書き⽅ • CPU 200m=0.2(core) • メモリ

    100Mi ≒ 0.1Gi ≒ 104MB • CPU 1(core)=1000m • メモリ 1Gi = 1024Mi ≒ 1074MB 14 Copyright © 2022, Oracle and/or its affiliates.
  8. HPA(Horizontal Pod Autoscaler) Manifest例(1) 項番 項⽬ 内容 1 スケール対象 スケール対象のapiVersion/kind/nameを

    指定。 基本的にはapiVersion: apps/v1、 kind: Deploymentを指定。 2 スケール範囲 スケールする際のPodのレプリカ数の最⼩値、 最⼤値を指定。 この範囲内のスケールの振る舞いは behaviorフィールド(次スライド)によって決 定。 3 スケール条件とする メトリクス スケール条件に利⽤するメトリクスを指定。 CPU/メモリの他にカスタムメトリクスも指定 可能。 これが「ターゲットCPU利⽤率」 15 Copyright © 2022, Oracle and/or its affiliates.
  9. HPA(Horizontal Pod Autoscaler) Manifest例(2) 項 番 項⽬ 種別 内容 4

    スケール時 の振る舞い (デフォルト) スケール アウト 即時スケール(リードタイム無) 以下のうち、追加レプリカ数が 多い⽅を採⽤ • 15秒で稼働中のレプリカ数 分を追加 • 15秒で4つのPodを追加 スケール イン リードタイム300秒(5分) 15秒で必要レプリカ数まで削減 v1.18から追加になった機能 16 Copyright © 2022, Oracle and/or its affiliates.
  10. HPA(Horizontal Pod Autoscaler)におけるスケール時の振る舞い(1) スケール時に指定可能な振る舞い(単⼀の場合) • Ex)現レプリカ数:3から必要レプリカ:10までスケールアウトする場合 • type: Percent •

    type: Pods レプリカ数分、必要レプリカ数までスケールアウト レプリカ(Pod)を4個(value:4)ずつスケールアウト 15秒 15秒 periodSeconds 15秒 +3 +4 +3 +4 15秒 17 Copyright © 2022, Oracle and/or its affiliates.
  11. HPA(Horizontal Pod Autoscaler)におけるスケール時の振る舞い(2) スケール時に指定可能な振る舞い(複数の場合) • Ex)現レプリカ数:80から必要レプリカ:10までスケールインする場合 指定したtypeのうち、 多い⽅(Max)を採⽤ 少ない⽅(Min)も指定可能 80個

    72個 40個 ・・・ 36個 32個 10個 Percent Percent Percent Pods Pods 60秒 60秒 60秒 ・・・ スケールごとに再計算 を⾏い、”selectPolicy” に基づいてポリシーを 選択 18 Copyright © 2022, Oracle and/or its affiliates.
  12. HPA Controllerが利⽤するメトリクス(HPA v2) 種別 メトリクス 収集元 スケールロジック PodResource PodのCPU使⽤率/メモリ 使⽤率

    metrics serverがkubeletか ら取得した値 PodのCPU/メモリ使⽤率を利⽤して 評価 ContainerResource (alpha版) ContainerのCPU使⽤率 /メモリ使⽤率 metrics serverがkubeletか ら取得した値 ContainerのCPU/メモリ使⽤率を利 ⽤して評価 Pods Podに関する任意のメト リクス API Aggregation Layerから 取得した任意のエンドポイ ント ”率”ではなく、⽣値で評価を実施 Object 任意のメトリクス(Pod以 外のk8sオブジェクト) API Aggregation Layerから 取得した任意のエンドポイ ント 単⼀の値で、⽬標値と⽐較を⾏い、 評価を実施 External 任意のメトリクス(k8sオブ ジェクト以外) API Aggregation Layerから 取得した任意のエンドポイ ント 単⼀の値で、⽬標値と⽐較を⾏い、 評価を実施 カスタムメトリクス 19 Copyright © 2022, Oracle and/or its affiliates.
  13. HPAのスケールの仕組み(カスタムメトリクスを利⽤する場合) ・・ ・ HorizontalPod AutoscalerController custom metrics (Pod) ①HPAリソース取得 ③メトリクス取得

    ⑤スケール指⽰ ②メトリクス取得 ④スケール量算出 ⑥スケール custom metrics (Object) custom metrics (External) metrics serverは利⽤しない 20 Copyright © 2022, Oracle and/or its affiliates.
  14. 複数メトリクスの設定 HPAは各条件の積(and条件)を維持 この場合は以下の条件 • 各PodのCPU使⽤率50% • 各Podが送信するパケットが1000パケット • main-route Ingressのバックエンドにある全てのPodが送信す

    るパケットが2000リクエスト/秒 各メトリクスの必要レプリカ数を算出し、最も多い結果を採⽤ スケールイン/スケールアウトにより、算出した最も多い結果 に対してPod数を近づける 22 Copyright © 2022, Oracle and/or its affiliates.
  15. HPAデモ 環境 • Oracle Container Engine for Kubernetes(OKE)︓v1.22.5 • VM.Standard.E4.Flex(1oCPU/メモリ8GB)

    × 3(Node) • metrics server︓v0.6.1 スケール対象のアプリケーション • アプリケーション • ベースイメージ︓busybox • command︓ʼdd if=/dev/zero of=/dev/null’ # CPUを100%にするため スケール条件 • ターゲットのCPU利⽤率︓50% • スケール範囲︓最⼩1/最⼤10 CRI-Oを使ってます!! 24 Copyright © 2022, Oracle and/or its affiliates.
  16. • 開発者・エンジニアにお届けするテクニカル な勉強会です • クラウドネイティブな時代に⾝につけておくべ きテクノロジーを深堀りしていきます • テーマはオープン/デファクト・スタンダード を 基準に選定し、Oracle固有な話題にはな

    らないように、且つ学んだ知識は広く応⽤が 利くように、配慮しています Season 5 • Kubernetes Operator 超⼊⾨ • Kubernetesで並列分散処理 • Kubernetes のセキュリティ • 挑戦 Typescript • 実験︕カオスエンジニアリング • MLOps を始めよう︕ 25
  17. #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 を始めよう︕