나는 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
로 해결을 하였다.