IT/Kubernetes

[Kubernetes] Monitoring

물통꿀꿀이 2019. 4. 10. 01:14

k8s에서는 Container, Pod, Service와 같은 Cluster 내의 여러 리소스에 대해 Monitoring을 할 수 있다. 때문에 Monitoring 정보를 활용하여 각 리소스의 성능을 측정하고 Scale in-out을 할 수 있다. (+ 리소스 추가, 삭제 등)

k8s에서는 Monitoring을 위한 여러 가지 솔루션이 존재한다. 그러나 이번 포스팅에서는 그 중 많이 사용하는 Heapster에 대해 알아보려고 한다.


Heapster

Heapster는 k8s Cluster Monitoring 솔루션으로 Cluster의 모든 Node의 Metrics와 Events 정보를 수집한다. 그리고 Backend에 저장하여 Visualization을 제공한다.


그림 1. Heapster Architecture


그림 1의 Heapster Architecture에서 확인 할 수 있듯이 Heapster는 Pod로 실행되며 위에서 언급한 것처럼 Backend에 수집된 데이터를 저장한다. 일반적으로 Backend는 InfluxDB(Distributed Time series DB)를 사용하며, 수집된 데이터를 정제(+Schema 정의)하여 해당 DB에 쌓는다. 또한 쌓여진 데이터를 Visualization하기 위해 Frontend로 Grafana를 사용한다. 

그런데 그림 1을 보면 Heapster에서는 kubelet과 cAdvisor를 사용하고 있는데 각각에 대해 간단히 살펴보면 아래와 같다.

Kubelet

k8s의 Master와 Node의 중간 역할자(Bridge)로 Pod와 Container를 관리하는 kubelet은 Container Runtime Interface로 부터 각 Container의 사용 통계 값을 가져온다. 특히 Docker을 사용하는 경우에는 cAdvisor를 통해 가져온다. 그리고 kubelet metrics API(/metrics/resource/v1alpha1)를 통해 통계 값을 확인 할 수 있다.


cAdvisor

Docker에 내장되어 있는 오픈 소스로 Container 사용량 및 성능 분석을 위한 Agent이다. k8s에서는 kubelet과 연동하여 모든 Container 및 Root Container의 CPU, Memory, Filesystem, Network 등의 통계 값을 제공해준다. 


이렇듯 Heapster를 설치한 이후에는 Cluster 내부 리소스 통계 값을 확인 할 수 있다.

그림 2. Individual Pods for CPU & Memory


그림 3. Node Metrics


kubectl에서 제공해주는 top 명령어는 Linux에서 top과 거의 비슷하다. (Usage Metrics을 보여주기 때문에) 그런데 k8s에서는 top 명령어 입력 즉시 통계 값이 나오지 않을 수 있다. 이는 Heapster의 내부 구조상 Backend에 몇 분동안 누적된 데이터를 가져오기 때문에 데이터가 충분치 않으면 조금 기다려야 한다. (임의의 시간 이후에 명령어 재입력)


그림 4. DashBoard With CPU & Memory


그림 4와 같이 Heapster가 설치된 이후 시간이 얼마 흐른 뒤에는 위와 같이 DashBoard에서 Cluster의 리소스 통계 값을 확인 할 수 있다.


그림 5. Grafana


Heapster의 Visualization은 Grafana를 사용한다. 그림 5에서 확인 할 수 있듯이 Pod 등의 수집된 데이터를 InfluxDB에 저장하는데, 이 저장된 데이터를 바탕으로 위와 같이 그래프로 구성할 수 있다.

이렇듯 k8s에서 Heapster를 사용하여 Cluster 내부 리소스를 쉽게 Monitoring 할 수 있다. 또한 그림 1의 Heapster의 구조가 기본이지만 이를 응용하여 아래 그림과 같이 Auto Scaling 구성도 가능하다. (AWS에서 CloudWatch를 사용하여 AutoScaling을 구성하는 것과 같다.)


그림 6. Heapster (+ Auto Scaling)


물론 Heapster 이외에도 다양한 Monitoring Tool이 존재한다. 

최근 대세로 사용되고 있는 Prometheus와 GCP에서 제공하는 GCM(Google Cloud Monitoring) 등등과 같이 k8s의 리소스 통계를 확인 할 수 있는 방법은 많이 있다.


Reference

https://kubernetes.io/docs/tasks/debug-application-cluster/resource-usage-monitoring/

https://medium.com/@marko.luksa/kubernetes-autoscaling-based-on-custom-metrics-without-using-a-host-port-b783ed6241ac

https://medium.com/@ashish_fagna/influxdb-to-grafana-visualizing-time-series-data-in-real-time-2174940a894d