[k8s] kind metrics-server 설치

metrics-server는 HPA, VPA 등의 Autoscale을 위한 메트릭 수집 서버다. 각 노드의 kubelet을 이용해 node, pod의 CPU, memory 메트릭을 수집하며, 이를 kube-apiserver로 전달한다.

kind로 만든 클러스터에 metrics-server를 helm으로 설치해보자. 간단한 설치 및 사용법은 이전 글을 참고하자

YAML manifest 또는 공식 helm chart로 설치할 수 있다

helm을 이용한 설치

args:
  - --kubelet-insecure-tls
override.yaml

먼저 위와 같이 override.yaml 파일을 만든다.

helm upgrade --install -f override.yaml metrics-server metrics-server/metrics-server

그 다음, 위 명령어로 설치한다

│ I0402 14:20:49.579928       1 server.go:187] "Failed probe" probe="metric-storage-ready" err="no metrics to serve"                                               │
│ I0402 14:20:59.577760       1 server.go:187] "Failed probe" probe="metric-storage-ready" err="no metrics to serve"                                               │
│ I0402 14:21:03.773956       1 server.go:187] "Failed probe" probe="metric-storage-ready" err="no metrics to serve"                                               │
│ E0402 14:21:04.332255       1 scraper.go:140] "Failed to scrape node" err="Get \"https://172.18.0.3:10250/metrics/resource\": x509: cannot validate certificate  │
│ E0402 14:21:04.333295       1 scraper.go:140] "Failed to scrape node" err="Get \"https://172.18.0.4:10250/metrics/resource\": x509: cannot validate certificate  │
│ E0402 14:21:04.334167       1 scraper.go:140] "Failed to scrape node" err="Get \"https://172.18.0.2:10250/metrics/resource\": x509: cannot validate certificate  │

args를 넣지 않으면 위처럼 인증서 관련 오류가 나오기 때문에 넣어줘야 한다.

설치가 완료되면 메트릭 API를 사용할 수 있다.

Usages

ex) k9s pulse

❯ kubectl get --raw "/apis/metrics.k8s.io/v1beta1/nodes/kind-worker" | jq '.'
{
  "kind": "NodeMetrics",
  "apiVersion": "metrics.k8s.io/v1beta1",
  "metadata": {
    "name": "kind-worker",
    "creationTimestamp": "2023-04-02T15:04:01Z",
    "labels": {
      "beta.kubernetes.io/arch": "arm64",
      "beta.kubernetes.io/os": "linux",
      "kubernetes.io/arch": "arm64",
      "kubernetes.io/hostname": "kind-worker",
      "kubernetes.io/os": "linux"
    }
  },
  "timestamp": "2023-04-02T15:03:55Z",
  "window": "20.039s",
  "usage": {
    "cpu": "46553820n",
    "memory": "113716Ki"
  }
}

ex) /apis/metrics.k8s.io/v1beta1/...

❯ k top nodes
NAME                 CPU(cores)   CPU%   MEMORY(bytes)   MEMORY%
kind-control-plane   335m         6%     550Mi           7%
kind-worker          54m          1%     110Mi           1%
kind-worker2         61m          1%     128Mi           1%

ex) kubectl top nodes

Reference