🐕
k8sにhpaを導入したけどTARGETSがunknown
問題点
kubernetesでオートスケールさせるためにhpaを設定したら、targetsがunknownでした。
$ kubectl get hpa -n app
NAME REFERENCE TARGETS MINPODS MAXPODS REPLICAS AGE
app-hpa Deployment/app-deployment <unknown>/50% 1 10 1 28m
とりあえずdescribe
したらEventsにCPUの使用率が取得できないと警告が出ていました。
$ kubectl describe hpa -n app
Events:
Type Reason Age From Message
---- ------ ---- ---- -------
Warning FailedComputeMetricsReplicas 29m (x12 over 32m) horizontal-pod-autoscaler invalid metrics (1 invalid out of 1), first error is: failed to get cpu utilization: missing request for cpu
Warning FailedGetResourceMetric 2m31s (x121 over 32m) horizontal-pod-autoscaler failed to get cpu utilization: missing request for cpu
ということで、CPUの使用率を取得できるようにする必要がありそうです。
解決方法
まずCPUの使用率を取得するためclusterにmetrics-serverを導入します。
次にDeploymentにresoucesを追記します。
apiVersion: apps/v1
kind: Deployment
metadata:
namespace: app
name: app-deployment
spec:
replicas: 1
template:
metadata:
labels:
app.kubernetes.io/name: app
spec:
containers:
- image: app:latest
name: app
# 以下の行を追加(数値は適当)
+ resources:
+ requests:
+ memory: "256Mi"
+ cpu: "200m"
+ limits:
+ memory: "256Mi"
+ cpu: "200m"
数分待って再度確認するとTARGETSに値が入っています!
$ kubectl get hpa -n app
NAME REFERENCE TARGETS MINPODS MAXPODS REPLICAS AGE
app-hpa Deployment/app-deployment 2%/50% 1 10 1 48m
Discussion