현상
Kubernetes 클러스터에서 top 명령어를 사용할 수 있도록 아래의 명령어로 metrics-server를 설치하였다.
kubectl apply -f https://github.com/kubernetes-sigs/metrics-server/releases/latest/download/components.yaml
리소스 배포는 정상적으로 완료했으나 여전히 top 명령어를 사용할 수 없는 상태다.
원인 파악하고 문제를 해결해보자.
원인 파악
확인해 보니 metrics-server pod가 정상적인 Running 상태로 전환되지 않고 있었다.
kubectl get pods -n kube-system metrics-server
metrics-server pod의 이벤트를 확인해보니 readinessProbe를 만족하지 못하고 있는 상태인 것으로 보인다.
kubectl get events -n kube-system | grep metrics-server
kubectl logs 명령어로 pod의 상세 로그를 확인해 보면 TLS 관련 문제인 것으로 보인다.
kubectl logs -n kube-system metrics-server
즉, metrics-server는 기본적으로 https를 이용해 kubernetes api server와 통신하는데, 현재 사용 중인 kubernetes에서는 https 통신을 지원하고 있지 않아 발생하는 문제로 추정된다.
해결
metrics-server가 https를 사용하지 않도록 구성한다. metrics-server의 옵션에 아래 두 개 옵션을 추가한다.
- --kubelet-insecure-tls
- --kubelet-preferred-address-types=InternalIP
리소스 정의 파일을 이용하여 설치했으므로 리소스 정의 파일을 다운로드 및 수정하여 재배포하거나 deployment를 edit 하면 된다.
kubectl edit deployments.apps -n kube-system metrics-server
변경한 설정을 저장하고 잠시 기다리면 metrics-server pod가 정상적으로 동작하는 모습을 확인할 수 있다.
동작 확인
kubectl top 명령어가 정상적으로 동작하는지 확인한다.
kubectl top nodes
참고 문서
https://gurumee92.tistory.com/323