[Kubernetes] metrics-server 설치하기 (error: Metrics API not available 조치)
metrics-server 는 Kubernetes 클러스터 내에서 노드 및 Pod 의 리소스 사용량에 대한 메트릭 데이터를 수집하고 제공하는 서버입니다. 이러한 메트릭 데이터는 Kubernetes API 서버를 통해 조회할 수 있어, 사용자나 다른 Kubernetes 구성 요소들이 클러스터의 성능 및 리소스 사용에 대한 정보를 얻을 수 있습니다.
metrics-server 가 제공하는 주요 메트릭은 다음과 같습니다:
- CPU 사용량 (CPU Usage) : 클러스터 내의 각 노드 및 Pod 가 사용하는 CPU 의 양을 측정합니다.
- 메모리 사용량 (Memory Usage) : 클러스터 내의 각 노드 및 Pod 가 사용하는 메모리의 양을 측정합니다.
- 네트워크 입출력 (Network I/O) : 클러스터 내의 각 노드 및 Pod 가 수행하는 네트워크 입출력을 측정합니다.
- 파일 시스템 사용량 (Filesystem Usage) : 클러스터 내의 각 노드 및 Pod 가 사용하는 파일 시스템의 용량과 사용량을 측정합니다.
이러한 메트릭 데이터는 Kubernetes 의 Horizontal Pod Autoscaling (HPA) 및 기타 리소스 관리 및 모니터링 도구에서 사용됩니다. metrics-server 는 일반적으로 클러스터 내에서 자동으로 배포되며, Kubernetes 버전 1.8 이상에서는 기본적으로 활성화됩니다.
사용자는 kubectl top 명령을 통해 metrics-server 에서 수집된 메트릭 데이터를 조회할 수 있습니다. 예를 들어, kubectl top pods, kubectl top nodes 등을 사용하여 Pod 및 노드의 리소스 사용량을 확인할 수 있습니다.
1. Metrics-server 설치
설치는 한번의 명령으로 끝이 납니다.
아래 URL 은 공식 배포 URL 로써 항상 최신버전의 metrics-server 가 설치 됩니다.
# kubectl apply -f https://github.com/kubernetes-sigs/metrics-server/releases/latest/download/components.yaml
serviceaccount/metrics-server created
clusterrole.rbac.authorization.k8s.io/system:aggregated-metrics-reader created
clusterrole.rbac.authorization.k8s.io/system:metrics-server created
rolebinding.rbac.authorization.k8s.io/metrics-server-auth-reader created
clusterrolebinding.rbac.authorization.k8s.io/metrics-server:system:auth-delegator created
clusterrolebinding.rbac.authorization.k8s.io/system:metrics-server created
service/metrics-server created
deployment.apps/metrics-server created
apiservice.apiregistration.k8s.io/v1beta1.metrics.k8s.io created
명령이 잘 실행되는지 확인합니다.
아래는 nodes 의 자원 사용률 확인 명령입니다.
# kubectl top nodes
error: Metrics API not available
이와 동일한 에러가 출력된 경우, metrics-server Pod 가 잘 생성되었는지 확인합니다.
# kubectl get pod -A |grep metrics
kube-system metrics-server-5d875656f5-vmv66 0/1 Running 0 10s
설치가 되었으나 Running 중인 Pod 는 0개로 확인 됩니다.
Pod 의 상세 정보에서는 HTTP status code 500 에러가 확인되었습니다.
# kubectl describe pod metrics-server-5d875656f5-vmv66 -n kube-system
...
(생략)
...
Events:
Type Reason Age From Message
---- ------ ---- ---- -------
Normal Scheduled 52s default-scheduler Successfully assigned kube-system/metrics-server-5d875656f5-vmv66 to kind-control-plane
Normal Pulled 51s kubelet Container image "registry.k8s.io/metrics-server/metrics-server:v0.6.4" already present on machine
Normal Created 51s kubelet Created container metrics-server
Normal Started 51s kubelet Started container metrics-server
Warning Unhealthy 1s (x4 over 31s) kubelet Readiness probe failed: HTTP probe failed with statuscode: 500
문제 해결을 위해 Deployment 를 수정합니다.
# kubectl edit deployment metrics-server -n kube-system
출력된 내용중에 metric-resolution 문자열을 검색해서 그 다음에 옵션을 하나 더 추가해 주어야 하는데, 문자열을 검색하면 두 군데 나옵니다. 그중에서 아래와 같이 옵션이 행으로 구분된 곳에 --kubelet-insecure-tls 옵션을 추가해 줍니다.
kubelet-insecure-tls 옵션은 공식적으로 발급받은 인증서인지 확인하지 않고 접근하겠다는 의미입니다.
...
(생략)
...
spec:
containers:
- args:
- --cert-dir=/tmp
- --secure-port=4443
- --kubelet-preferred-address-types=InternalIP,ExternalIP,Hostname
- --kubelet-use-node-status-port
- --metric-resolution=15s
- --kubelet-insecure-tls
image: registry.k8s.io/metrics-server/metrics-server:v0.6.4
...
(생략)
...
저장 후 시간이 조금 지나야 적용됩니다.
적용이 되면 아래와 같이 자원 사용량 확인이 가능합니다.
# kubectl top nodes
NAME CPU(cores) CPU% MEMORY(bytes) MEMORY%
kind-control-plane 294m 3% 2753Mi 17%
# kubectl top pods
NAME CPU(cores) MEMORY(bytes)
b07a7888-df03-451f-8475-13c6d9bac48d-cf--cb3e18e9fd-0 1m 4Mi
nginx-665cb6f744-wf5g5 0m 6Mi
'리눅스 > Containers & Kubernetes' 카테고리의 다른 글
Docker data root directory 변경하기 (0) | 2024.03.27 |
---|---|
Ubuntu 22.04 단일 서버에서 K0S 설치하기 (0) | 2024.02.22 |
[Kubernetes] 네임스페이스의 메모리 및 CPU 할당량 구성 (0) | 2024.01.11 |
Kubernetes Pod 의 CPU 요청 및 제한값 변경하기 (Vertical Pod Autoscaler) (0) | 2023.12.29 |
[Kubernetes] 지워지지않는 Terminating 네임스페이스 삭제하기 (0) | 2023.10.31 |