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
'DevOps > Kubernetes' 카테고리의 다른 글
AWS EKS에서 ALB를 Ingress Controller로 사용해보자 (0) | 2021.10.17 |
---|---|
kubeadm join 할 때 token값 확인하기 (0) | 2021.09.27 |
[k8s] kubernetes에 Prometheus와 grafana 연동하여 모니터링하기 (0) | 2021.05.01 |
[EKS] AWS EKS를 사용하여 클러스터 구성하기 (5) | 2021.04.26 |
[kubenetes] Kubeadm 사용하여 K8s 클러스터 구성하기 (0) | 2021.04.24 |