4.4.5 チューニング例
オートスケール機能を使用する際に、どのような考えに基づいて設定値をチューニングするかの具体例を示します。具体例では、「1. 評価対象とするメトリクスの選定」、「2. 評価対象のメトリクスの閾値の検討」、「3. 評価対象のメトリクスの評価間隔の検討」の順にチューニングする例を説明します。
- オートスケール機能の設定前の状態
-
この例の前提条件として、オートスケール機能の設定前の状態を次に示します。
-
業務要件として、1トランザクション当たりの処理時間は5秒を上限とする。
-
業務要件として、高負荷状態を許容できる時間は、30秒までとする。
-
平常時の負荷状況ではユーザ要件を満たせている。
-
ピーク時の負荷状況では1トランザクション当たりの処理時間5秒を超過してしまい、ユーザ要件を満たせていない。
-
Podが起動を開始してからトランザクションが受け付けられるようになるまでに必要な時間は20秒である。
オートスケール機能を適用する前の負荷テストなどで、これらの前提が分かっている場合、オートスケール機能を使用してピーク時でも1トランザクション当たりの処理時間5秒を実現することを考えます。
-
-
評価対象とするメトリクスの選定
過去のメトリクス情報を参照してトランザクションの処理時間と相関のあるメトリクスを調査し、評価対象にするメトリクスを選定します。
調査の結果、次のことが判明したと仮定します。
ピーク時に20秒程度の短い時間で急激にCPU利用率が増加し、CPU利用率が80%を超過するとトランザクションの処理時間が大きく増加する。
これによって、評価対象のメトリクスとしてCPU利用率を使用します。
-
評価対象のメトリクスの閾値の検討
調査の結果、CPU利用率が80%を超過するとトランザクションの平均処理時間が大きく増加することが分かっているため、CPU利用率80%を基準に考えます。スケールアウトの場合、ユーザ要件を満たせないタイミング(80%を超過してからスケールアウトによってPodが起動し安定稼働するまでの間)があるため、10%のバッファを持たせて70%を基準とします。
-
評価対象のメトリクスの評価間隔の検討
業務要件から、高負荷状態を許容できる時間を30秒までとしたい場合に関して考えます。Podが起動を開始してからトランザクションが受け付けられるようになるまでの時間が20秒のため、最低でも10秒間に1回、メトリクスの値を評価する必要があります。そのため、メトリクスの評価間隔を10秒に設定します。これに伴い、Prometheusがメトリクス対象から情報を取得する頻度を5秒に設定します。
これらの手順を踏まえると、次の設定になります。
-
kube-controller-managerの設定
kube-controller-manager --horizontal-pod-autoscaler-sync-period 10
HPAによるメトリクスの評価間隔を10秒に変更します(「3. 評価対象のメトリクスの評価間隔の検討」の設定)。
-
HPAのKubernetesマニフェストの記述例
apiVersion: autoscaling/v2 kind: HorizontalPodAutoscaler metadata: name: metrics-server-hpa namespace: my-namespace spec: (省略) metrics: - type: Resource resource: name: cpu …1 target: type: Utilization averageUtilization: 70 …2 (以下、省略)<説明>
-
評価対象のメトリクスにCPUを設定します。
-
メトリクスの閾値は平均CPU利用率を70%に設定します(「1. 評価対象とするメトリクスの選定」および「2. 評価対象のメトリクスの閾値の検討」)。
-