説明
type: Object メトリクスを使う HPA では、describedObject、metric、target を正しく指定する必要があります。測定対象は、レプリカ数を変更するワークロードを示す scaleTargetRef とは役割が異なります。参照が不完全な場合やメトリクスアダプターが値を提供しない場合、自動スケーリングが期待どおりに動作しないおそれがあります。
想定される影響
- 負荷が増えた際に、必要なタイミングでレプリカが増えない場合があります。
- 不適切な目標値は、過剰なスケーリングや負荷への対応不足を招く場合があります。
対処方法
- Object メトリクスの describedObject の名前・種類・API バージョン、metric 名、target の種類と値を実際のリソースに合わせてください。スケールするワークロードの scaleTargetRef も別途正確に指定してください。
- メトリクスアダプター、単位、最小・最大レプリカ数を確認し、負荷試験で HPA の条件・イベントと実際のスケーリングを検証してください。
例
参照する Deployment、Ingress、requests-per-second を提供するアダプターが別途必要です。目標値 10k とレプリカ数 1–10 は例示であり、実際の負荷に合わせて調整してください。
変更前
yaml
apiVersion: autoscaling/v2
kind: HorizontalPodAutoscaler
metadata:
name: php-apache
spec:
scaleTargetRef:
apiVersion: apps/v1
kind: Deployment
name: php-apache
minReplicas: 1
maxReplicas: 10
metrics:
- type: Object
object:
metric:
name: requests-per-second
target:
type: Value
value: 10k
describedObject:
apiVersion: networking.k8s.io/v1
kind: Ingress
測定対象の Ingress に name がなく、参照が不完全です。
変更後
yaml
apiVersion: autoscaling/v2
kind: HorizontalPodAutoscaler
metadata:
name: php-apache
spec:
scaleTargetRef:
apiVersion: apps/v1
kind: Deployment
name: php-apache
minReplicas: 1
maxReplicas: 10
metrics:
- type: Object
object:
metric:
name: requests-per-second
describedObject:
apiVersion: networking.k8s.io/v1
kind: Ingress
name: main-route
target:
type: Value
value: 10k
測定対象に main-route を指定します。スケールするワークロードは、別の scaleTargetRef で指定した php-apache Deployment です。