スケーラー構成を理解する
HPA API の v2
バージョンでは、spec.behavior
という YAML ファイルで新しいキーを使用して、動作のいくつかの側面を微調整できます。 scaleDown
および scaleUp
という他の 2 つのキーが受け入れられ、これらによって、スケールダウン時およびスケールアップ時に HPA がどのように動作するかが定義されます。
これらの各キーには、次の値を使用できます。
キー | Type | Description |
---|---|---|
stabilizationWindowSeconds | INT | 必要な状態を計算するために、HPA がメトリックを検索する期間。 scaleDown の既定値は 5 分で、scaleUp の安定化ウィンドウはありません。 |
selectPolicy | string | 使用するポリシーの種類を選択します。この値には、Min 、Max 、または Disabled を指定できます。 |
policies | HPAScalingPolicy の配列 |
適用する可能性のあるポリシーの配列。 |
HPAScalingPolicy
オブジェクトは、次のキーを持つオブジェクトとして定義されます。
キー | Type | 説明 |
---|---|---|
type | string | ポリシーのタイプ。Percent または Pods とすることができます。 |
値 | INT | ポリシーの値。 |
periodSeconds | INT | このポリシーを再度適用できるようになるまでに必要な時間。 |
スケーリング ポリシーを使用すると、スケーリングの動作方法を微調整できます。 @たとえば、次の例に示すように、scaleDown
ポリシーを Disabled
に設定することで、スケール ダウン操作を完全に無効にすることができます。
apiVersion: autoscaling/v2
kind: HorizontalPodAutoscaler
metadata:
name: contoso-website
namespace: hpa-contoso
spec:
scaleTargetRef:
apiVersion: apps/v1
kind: Deployment
name: contoso-website
minReplicas: 1
maxReplicas: 10
behavior:
scaleDown:
selectPolicy: Disabled
metrics:
- type: Resource
resource:
name: cpu
target:
type: Utilization
averageUtilization: 20
- type: Resource
resource:
name: memory
target:
type: Utilization
averageUtilization: 50
また、次のように scaleUp
ポリシーを定義することで、一度にスケールアウトするレプリカの数を設定することもできます。
apiVersion: autoscaling/v2
kind: HorizontalPodAutoscaler
metadata:
name: contoso-website
namespace: hpa-contoso
spec:
scaleTargetRef:
apiVersion: apps/v1
kind: Deployment
name: contoso-website
minReplicas: 1
maxReplicas: 10
behavior:
scaleUp:
selectPolicy: Max
stabilizationWindowSeconds: 120
policies:
- type: Percent
value: 30
periodSeconds: 60
- type: Pods
value: 7
periodSeconds: 90
metrics:
- type: Resource
resource:
name: cpu
target:
type: Utilization
averageUtilization: 20
- type: Resource
resource:
name: memory
target:
type: Utilization
averageUtilization: 50
このマニフェストでは、HPA に対し、過去 120 秒間のメトリックを検索して、必要な状態を計算し、これらの値の最大値を取得するように指示します。 その後、既存のポッドの 30% が計算され、この数値が切り上げられ、7 個のポッドの固定値と比較されます。 selectPolicy
は Max
に設定されているため、これら 2 つの数値の大きい方が使用され、そのポリシーが適用され、periodSeconds
待ってからポリシーがもう一度適用されます。
たとえば、Web サイトが 18 個のポッドで実行され、約 120 秒間続くスパイクが発生したとします。 必要な状態は、現在実行中のポッド数の 30%、つまり 5.4 (6 に丸められる) を算出することによって計算されます。 この値は、2 番目のポリシーのポッド数である 7 と比較されます。 selectPolicy
キーは Max
に設定されているため、これら 2 つの値の大きい方の値が使用されます。 その後、HPA は 7 個スケールアップされ、もう一度スケールアップする前に 90 秒間待機します。 スパイクが 25 ポッドまで続いた場合は、もう一度計算されます。 25 個のポッドの 30% は 7.5 (丸められて 8) で、7 より大きくなります。 今度は HPA は 8 個の新しいポッドを作成し、もう一度スケールアップする前に 60 秒間待機します。