[Kubernetes] Cluster Monitoring / Logs


서론

쿠버네티스 클러스터에서의 자원 사용량을 모니터링하는 방법에 대해 알아본다.

모니터링의 주요 대상은 크게 노드 수준과 파드 수준으로 나뉘며, 각각 다음과 같은 지표들을 포함한다.

  • 노드 수준: 클러스터 내 노드의 수, 각 노드의 상태(정상 여부), CPU, 메모리, 디스크, 네트워크 사용량 등
  • 파드 수준: 전체 파드 수, 각 파드의 CPU 및 메모리 사용량

쿠버네티스는 기본적으로 모니터링 솔루션을 내장하고 있지 않아 이러한 장보를 실시간으로 수집하고 분석할 수 있는 모니터링 솔루션을 별도로 설치해야 한다.

로그 수집 동작 방식

쿠버네티스의 각 노드는 kubelet을 가지고 있다.

kubelet은 API server로부터 명령을 받아 파드를 실행시키며, 내부에 cAdvisor(Container Advisor)라는 하위 컴포넌트를 포함하고 있다.

cAdvisor는 각 컨테이너의 성능 메트릭(CPU, 메모리 등)을 수집하고, 이를 kubelet API를 통해 외부에 노출한다.

Metrics Server는 이 API로부터 메트릭을 받아 집계한다.

Metrics Server

오늘날 모니터링 솔루션에는 Metrics Server, Prometheus, Elastic Stack 등이 있다.

이 중 가볍게 사용할 수 있는 것이 Metrics Server이며 클러스터당 하나씩 운영 가능하다.

Metrics Server는 메모리 기반의 모니터링 솔루션으로 각 노드와 파드에서 메트릭 데이터를 수집하고 이를 집계하여 메모리에 저장하기 떄문에 디스크에 메트릭 데이터를 저장하지는 않아 과거의 성능 데이터는 볼 수 없다.

과거 데이터를 보려면 다른 모니터링 솔루션을 사용해야 한다.

설치 방법

아래 주소로 클론한다.

git clone https://github.com/kubernetes-incubator/metrics-server.git

kubectl 명령어로 리소스(Pod, service, role 등)를 배포한다

kubectl create -f deploy/1.8+/

Metrics Server가 데이터를 수집할 시간을 약간 기다린 후, kubectl top 명령으로 확인한다.

사용 방법

Logs

쿠버네티스에서 파드의 로그를 보기 위해서는 아래와 같은 명령어를 사용하면된다.

kubectl logs -f {pod-name}

만약 파드내에 두개의 컨테이너가 들어가 있다면 파드이름과 함께 컨테이너 이름도 같이 적어 명령어를 실행하면된다.