🐕

k8sにhpaを導入したけどTARGETSがunknown

2022/09/12に公開

問題点

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を導入します。
https://zenn.dev/hkw/articles/0ee0f726008a63

次に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