Kubernetes HPA の Object メトリクス参照設定の確認

測定対象のオブジェクトと、実際にスケールするワークロードを区別してください。

説明

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 です。

参考資料