HPA Object メトリック参照の構成確認

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

説明

HPA の Object メトリックには、正しい described_object、メトリック名、目標値が必要です。測定対象は、レプリカ数を変更するワークロードを示す scale_target_ref とは異なる役割です。Resource や Pods などの他のメトリック種別も、要件に応じて使用できます。

参照先が存在しても、メトリックアダプターが必要な値を提供しなければ自動スケールには使えません。収集とスケールの実際の状態を確認してください。

想定される影響

  • 誤った参照や利用できないメトリックにより、必要なスケールが行われない場合があります。
  • 不適切な目標値は、過剰なスケールや負荷への対応失敗を招く場合があります。

対処方法

  • Object メトリックの described_object の名前・種類・API バージョン、metric 名、target の種類・値を実際のリソースに合わせてください。scale_target_ref はスケールするワークロードを正しく指定してください。
  • メトリックアダプター、単位、レプリカ数の上下限を確認し、負荷テストで HPA の条件、イベント、実際のスケールを検証してください。

例

旧 HPA・Ingress 形式の部分的な例です。現在の環境では kubernetes_horizontal_pod_autoscaler_v2 と対応する Ingress API を使ってください。必須の scale_target_ref、ワークロード、Ingress、メトリックアダプターは省略しています。50–100 個のレプリカと latency 100 は説明用の値です。

変更前

hcl
resource "kubernetes_horizontal_pod_autoscaler" "example" {
  metadata {
    name = "test"
  }

  spec {
    min_replicas = 50
    max_replicas = 100

    metric {
      type = "Object"

      object {
        target {
          type  = "Value"
          value = "100"
        }
      }
    }
  }
}

変更後

hcl
resource "kubernetes_horizontal_pod_autoscaler" "example" {
  metadata {
    name = "test"
  }

  spec {
    min_replicas = 50
    max_replicas = 100

    metric {
      type = "Object"

      object {
        metric {
          name = "latency"
        }

        described_object {
          name        = "main-route"
          api_version = "networking.k8s.io/v1beta1"
          kind        = "Ingress"
        }

        target {
          type  = "Value"
          value = "100"
        }
      }
    }
  }
}

補足:

  • 変更前: Object メトリックの名前と測定対象の参照がありません。
  • 変更後: 測定対象の Ingress と latency メトリックを指定します。実際の収集と別途のスケール対象設定も必要です。

参考資料