나는 Pod 별 CPU 량을 확인하려 했다. 그래서 Metric server 를 설치하고 CPU 사용량을 확인하려 했으나 실패했다.
# 메트릭 서버 설치
$ kubectl apply -f https://github.com/kubernetes-sigs/metrics-server/releases/latest/download/components.yaml
# kubectl top pod
error: Metrics API not available
이 문제와 관련하여 찾아본 결과, metrics-server 의 pod 실행 옵션에
--kubelet-insecure-tls 를 추가하면 손쉽게 해결할 수 있다. (다만 production 환경에서 사용시에는 주의해야한다.)
$ kubectl -n kube-system edit deployments.apps metrics-server
containers:
- args:
- --cert-dir=/tmp
...
- --kubelet-insecure-tls <- 추가하면 됨
# 정상 동작 확인
$ kubectl top pod
NAME CPU(cores) MEMORY(bytes)
coredns-5d78c9869d-7rsmp 5m 14Mi
coredns-5d78c9869d-82j7n 4m 14Mi
kubeadm 의 기본설정으로 설치하면 쿠버네티스의 인증서는 self-signed 이다. self-signed 인증서는 공인인증이 되지 않기 때문에 보안에 취약하여 해커(공격자)가 통신을 조작할 수 있는 여지가 있다. 그렇기에 metric server 는 기본적으로 self-signed 와의 통신은 하지 않는 것이 기본 설정이다. metric server 는 metric 정보를 얻기 위해 각각의 노드(kubelet)와 통신하는데 노드의 인증서가 self-signed 이기에 통신이 되지 않는 것이다.
따라서 두가지 방법으로 해결이 가능하다.
metric server 의 보안설정 낮추기.self-signed 하고 통신이 가능하도록 설정하는 방법이다. 이는 위에서 공유한 것과 같이--kubelet-insecure-tls 을 추가함으로써 해결이 가능하다.CA 에 인증된 인증서를 발급하는 과정이 필요하다. 이 과정에 대한 자세한 내용은 여기 링크 를 활용하면 좋다.나의 경우 해커의 침입이 염려되지 않는 상황인지라 첫번째 방법인--kubelet-insecure-tls 로 해결을 하였다.