説明
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 メトリックを指定します。実際の収集と別途のスケール対象設定も必要です。