こんにちは。株式会社ユーザベース SaaS事業 酒井です。
「HPAの閾値設定は100%以上あんねん」。思い込みで閾値は100%が上限と勘違いしそうになるねという記事になります。
先日とあるシステムのIstioリソースを眺めていた所、Istio Ingress GatewaysのPodが頻繁に増減しているのに気が付きました。
istioctlとIstioOperator定義で管理されていたので確認すると、以下のようなデフォルト値が使われていました。
ingressGateways: - name: istio-ingressgateway enabled: true k8s: resources: limits: cpu: "2" memory: 1Gi requests: cpu: 100m memory: 128Mi hpaSpec: minReplicas: 2 maxReplicas: 5 metrics: - type: Resource resource: name: cpu target: averageUtilization: 80 type: Utilization
この定義に従ってHPA等が設定されるのですが、見ての通りrequestsのcpu: 100m
に対しての80%
なので、平均cpu: 80m
を超えるとPodが増える設定値となっていました。
requestsのcpuを適正値に修正するとしても、上限であるlimitsに近づいてきたらPodを増やしたいケースもあると思います。
例えば、今回のデフォルト値(cpu: 100m
)のままcpu: "1"
まで利用率が伸びた際にPodを増やすのであれば、以下のようにaverageUtilization
を修正することでイメージの挙動となります。
metrics: - type: Resource resource: name: cpu target: averageUtilization: 1000 type: Utilization
# 変更前 $ kubectl get hpa istio-ingressgateway NAME REFERENCE TARGETS MINPODS MAXPODS REPLICAS AGE istio-ingressgateway Deployment/istio-ingressgateway 9%/80% 2 5 2 83d # 変更後 $ kubectl get hpa istio-ingressgateway NAME REFERENCE TARGETS MINPODS MAXPODS REPLICAS AGE istio-ingressgateway Deployment/istio-ingressgateway 8%/1000% 2 5 2 83d
設定内容だけ見るとそれはそうだよねという感じなのですが、なんとなく思い込みで100%が上限だと勘違いしそうになるお気持ち共有と、これが皆さんの何か新しい発見や気づきになれたら嬉しいです。