on
k8s 클러스터 모니터링 : Metrics-Server
k8s 클러스터 모니터링 : Metrics-Server
Metrics-Server 란 ?
쿠버네티스의 Metrics-Server는 각 노드에 설치된 kubelet을 통해서 node 및 pod의 CPU,Memory 의 사용량 Metric을 수집한다. Linux에서 사용하는 top 명령어를 k8s에서 사용할 수 있게 해준다고 생각하면 된다.
#node 리소스 사용량 확인 ubuntu@ip-10-0-0-246:~$ kubectl top no NAME CPU(cores) CPU% MEMORY(bytes) MEMORY% ip-10-0-0-167 134m 6% 2698Mi 70% ip-10-0-0-191 133m 6% 1616Mi 42% ip-10-0-0-246 309m 15% 1844Mi 48% #pod 리소스 사용량 확인 ubuntu@ip-10-0-0-246:~$ kubectl top po NAME CPU(cores) MEMORY(bytes) app-7c778fbd8b-kpx4l 2m 172Mi app-7c778fbd8b-l65jx 2m 179Mi
metric-server 없이 top 명령어를 사용하려고 하면 아래와 같은 에러가 뜬다
ubuntu@ip-10-0-0-246:~$ kubectl top no error: Metrics API not available
Metrics-Server 설치
Metric-server 를 설치하여 metric을 수집해주도록 하자.
아래의 Github는 metric-server를 제공하는 공식 repository이다.
https://github.com/kubernetes-sigs/metrics-server
아래 명령어와 같이 github에서 제공되는 metric-server를 가져다가 설치만 하면 된다.
# metric-server 설치 kubectl apply -f https://github.com/kubernetes-sigs/metrics-server/releases/latest/download/components.yaml
Metrics-server 설치 중 오류
1. Readiness probe failed: HTTP probe failed with statuscode: 500
설치는 됐는데 아래와 같이 상태가 0/1이고, Readiness probe failed: HTTP probe failed with statuscode: 500 라는 Event가 발견된다.
ubuntu@ip-10-0-0-246:~$ kubectl get po -n kube-system metrics-server-7b9c4d7fd9-5jh6b NAME READY STATUS RESTARTS AGE metrics-server-7b9c4d7fd9-5jh6b 0/1 Running 0 5m22s ubuntu@ip-10-0-0-246:~$ kubectl describe po -n kube-system metrics-server-7b9c4d7fd9-5jh6b Warning Unhealthy 0s (x12 over 100s) kubelet Readiness probe failed: HTTP probe failed with statuscode: 500
설치된 Deployment / metrics-server 에서 아래와 같이 --kubelet-insecure-tls 라는 커맨드를 추가해주자.
ubuntu@ip-10-0-0-246:~$ kubectl edit deploy -n kube-system metrics-server spec: containers: - args: - --cert-dir=/tmp - --secure-port=443 - --kubelet-preferred-address-types=InternalIP,ExternalIP,Hostname - --kubelet-use-node-status-port - --metric-resolution=15s - --kubelet-insecure-tls << 추가
2.Error from server (ServiceUnavailable): the server is currently unable to
handle the request (get nodes.metrics.k8s.io)
kubecetl top 명령어를 사용하려고 하는데 아래와 같이 오류가 난다..
ubuntu@ip-10-0-0-246:~$ kubectl top no Error from server (ServiceUnavailable): the server is currently unable to handle the request (get nodes.metrics.k8s.io)
metrics-server 를 수정해서 spec.template.spec 라인에 hostNetwork: true 를 추가해준다.
ubuntu@ip-10-0-0-246:~$ kubectl edit deploy -n kube-system metrics-server dnsPolicy: ClusterFirst hostNetwork: true << 추가 nodeSelector: kubernetes.io/os: linux
from http://potato-yong.tistory.com/150 by ccl(A) rewrite - 2021-11-17 18:00:43