Among Us - Yellow Crewmate k8s 클러스터 모니터링 : Metrics-Server

DevOps/Kubernetes

k8s 클러스터 모니터링 : Metrics-Server

감쟈! 2021. 11. 17. 17:21

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 - kubernetes-sigs/metrics-server: Scalable and efficient source of container resource metrics for Kubernetes built-in aut

Scalable and efficient source of container resource metrics for Kubernetes built-in autoscaling pipelines. - GitHub - kubernetes-sigs/metrics-server: Scalable and efficient source of container reso...

github.com

 

아래 명령어와 같이 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