5
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

ZOZOAdvent Calendar 2024

Day 13

IstioのwarmupDurationSecsのweight値について

Posted at

概要

IstioのwarmupDurationSecsを利用する機会がありましたが,どういったweightの変更を行っているのかが気になったので本記事でまとめます。

warmupDurationSecsとは

warmupDurationSecsは,Istioで新しいPodがデプロイされた際にwarmup期間を指定するパラメータです.このパラメータはDestinationRuleのLoadBalancerSettingsで行います.

弊社ではFlaggerを用いているので,canaryリソースでは以下のような設定で行います

apiVersion: flagger.app/v1beta1
kind: Canary
metadata:
  name: tmp
spec:
  service:
    trafficPolicy:
      loadBalancer:
        simple: LEAST_REQUEST
        warmupDurationSecs: 60s

warmupDurationSecsのweight変更

warmupDurationSecsはEnvoyのSlow Start Modeの仕組みをラッピングした機能です.

ちゃんとした数式を元にweightが求められており、それが以下になります。

NewWeight = Weight * max(MinWeightPercent, TimeFactor^{1/Aggregation})

さらにTimeFactorは以下のように求められます.

TimeFactor = max(TimeSinceStartInSeconds, 1) / SlowStartWindowInSeconds
パラメータ 説明 備考
SlowStartWindowInSeconds warmup期間(秒)
TimeSinceStartInSeconds 開始からの経過時間(秒)
TimeFactor 経過時間の割合
MinWeightPercent 最小重み付け デフォルト値は0.1
Aggregation 重み付け曲線の調整パラメータ デフォルト値は1.0
NewWeight 新しい重み付け

デフォルト値のみで計算し、warmupDurationSecsを60sと設定すると、以下のように線形的にNewWeightが増えていき、最終的に100%になります。最初の7秒ほどはTimeFactorが0.1を下回るので、MinWeightPercentが最大値となるため10%固定です。
これによりHPA等で作られたPodは安全に暖気をしてからユーザのリクエストを受け入れる準備ができます。

image.png

まとめ

本記事ではwarmupDurationSecsのweight値の変更について調べました。
ちゃんとした式を用いられていることにびっくりしましたが、もっとEnvoyがどのようなネットワークでリクエストをうまく振り分けているのかも調べたいと思いました。

5
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
5
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?