일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | |||||
3 | 4 | 5 | 6 | 7 | 8 | 9 |
10 | 11 | 12 | 13 | 14 | 15 | 16 |
17 | 18 | 19 | 20 | 21 | 22 | 23 |
24 | 25 | 26 | 27 | 28 | 29 | 30 |
- Spring
- Kubernetes
- CKA 기출문제
- 오블완
- CloudWatch
- Linux
- aws
- AI
- 코틀린 코루틴의 정석
- kotlin spring
- 정보처리기사실기 기출문제
- 정보처리기사 실기
- 공부
- Pinpoint
- kotlin coroutine
- Java
- 정보처리기사 실기 기출문제
- CKA
- AWS EKS
- Elasticsearch
- PETERICA
- 기록으로 실력을 쌓자
- minikube
- kotlin querydsl
- IntelliJ
- APM
- kotlin
- mysql 튜닝
- 티스토리챌린지
- MySQL
- Today
- Total
피터의 개발이야기
[kubernetes] Metrics Server 설치, Metrics API not available 에러 해결 본문
[kubernetes] Metrics Server 설치, Metrics API not available 에러 해결
기록하는 백앤드개발자 2022. 8. 19. 03:02
ㅁ 개요
kubernetes 환경에서 노드와 자원의 상태를 확인하기 위해 kubectl top 명령어를 자주 사용한다. 신규 EKS를 설치하고 TOP 명령어가 작동하지 않아 그 원인을 찾고 해결하는 과정을 정리하였다.
ㅁ Metrics Server 란?
Metrics Server는 클래스터 전체의 리소스 사용 데이터를 어그리게이션합니다. 각 노드에 설치된 kublet을 통해서 노드나 컨테인너의 CPU나 메모리 사용량 같은 메트릭을 수집한다. HPA(horizontal pod autoscaler)나 kubectl top 명령어를 사용하려면 metrics-server를 사용해야 한다.
ㅁ 에러 발생
[ec2-user@ip-172-31-43-214 ~]$ kubectl top no
error: Metrics API not available
ㅁ 원인분석
ㅇ 운영환경에서는 리소스의 자원을 확인 할 수 있는 TOP 명령어가 잘 작동하였다.
ㅇ metrics-server 파드가 떠 있어서 노드와 파드의 리소스 메트릭스를 수집하고 있었다.
ㅇ 신규EKS에는 metrics-server가 가동하고 있지 않아서 발생한 문제였다.
ㅇ Amazon EKS에서는 Metrics Server가 기본적으로 설치되지 않는다.
ㅇ 클러스터를 신규 생성했고 Metrics Server를 사용하여 컨테이너,
포드 또는 노드에서 지표를 수집하고자 하는 경우 Metrics Server를 설치해야한다.
ㅁ Kubernetes 지표 서버 설치
$ 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
ㅁ Kubernetes 지표 서버 테스트
[ec2-user@ip-172-31-43-214 ~]$ kubectl top no
NAME CPU(cores) CPU% MEMORY(bytes) MEMORY%
ip-192-168-78-251.ap-northeast-2.compute.internal 58m 3% 564Mi 16%
[ec2-user@ip-172-31-43-214 ~]$ kubectl top po -n prometheus
NAME CPU(cores) MEMORY(bytes)
prometheus-kube-state-metrics-5547d95bd-vngn6 1m 9Mi
prometheus-node-exporter-xk4tr 0m 2Mi
prometheus-pushgateway-74d44dfb7f-w4l4v 1m 6Mi
ㅇ 노드의 CPU, 메모리 사용량을 확인할 수 있다.
ㅇmetrics-server가 가동된 것을 확인할 수 있다.
ㅁ 트러블슈팅
ㅇ minikube 환경에서 metrics-server 설치하는 과정에서 다음과 같은 에러가 발생하였다.
E0821 02:23:56.720430 1 scraper.go:140] "Failed to scrape node" err="Get \"https://192.168.64.2:10250/metrics/resource\": x509: cannot validate certificate for 192.168.64.2 because it doesn't contain any IP SANs" node="minikube"
I0821 02:23:57.697089 1 server.go:187] "Failed probe" probe="metric-storage-ready" err="no metrics to serve"
ㅇ cannot validate certificate for 192.168.64.2 because it doesn't contain any IP SANs인 경우에는 서버에서 보내온 인증서의 서명을 확인하지 못하는 TLS 인증서 관련 문제이므로 kubelet-insecure-tls 파라메터를 사용하면 된다.
ㅇ kubectl edit deployments.apps -n kube-system metrics-server 명령어로 deployment를 수정하여 아래 파라메터를 추가하여 해결하였다.
ㅇ 적용 후 top명령어 확인이 가능하였고 로그 상에서도 다른 에러는 발생하지 않았다.
ㅁ 함께 보면 좋은 사이트