728x90
반응형

Kubernetes Monitoring

 

어떤 시스템이든 가장 중요한 부분 중 하나가 모니터링 일것이다. 쿠버네티스 환경에서 모니터링 하는 방법을 알아본다.

설명할 내용은 기본 메트릭 서버, 프로메테우스이다.

 

우선 가장 기본적으로 알아야 할 것은 메트릭 (지표) 의 수집이다. 쿠버네티스 환경에서는 기본적으로 cAdvisor라는 메트릭 수집도구를 사용한다.

 

 

cAdvisor란 쿠버네티스에서 사용하는 기본적인 모니터링 에이전트로 모든 노드에 설치되서 노드에 대한 정보와 포드 (컨테이너) 에 대한 지표를 수집한다.

이렇게 수집된 내용은 Kubelet에게 전달되는데 이 후 전달된 내용은 모니터링 툴 (메트릭 서버, 프로메테우스) 에서 다시 수집해 간다.

cAdvisor의 경우 리소스 데이터만 수집한다. 이 리소스에는 CPU, Memory, Filesystem, Network Used와 같은 통계를 수집하는 것이다. 

 

리소스외에 다른 메트릭을 수집하고 싶다면 별도의 에이전트를 사용해야한다. 

이제 메트릭이 수집되는 과정을 확인해보면 아래 그림과 같다. 

 

 

cAdvisor + Metrics Server 부분은 쿠버네티스에서 사용하는 모니터링의 가장 기본적인 조합이다. 리소스만 수집하는 형태이며 조합이다.

 

데이터가 수집되는 동작 과정은 아래와 같다.

1. cAdvisor에서 노드의 정보와 포드의 지표를 수집

2. cAdvisor에서 수집한 내용을 Kubelet에게 전달

3. Metrics Server는 Kubelet에게서 수집된 정보를 가져감 

 

이런 수집된 데이터를 가지고 무엇을 할까?

 

아래의 그림을 보도록 하자. 이전 자료이기 때문에 Node X 부분에 Heapster라고 표현되어 있는데 이 부분이 메트릭 서버라고 생각하면 된다.

cAdvisor -> Kubelet -> Metrics Server 를 통해 수집된 데이터는 HPA (Pod AutoScaler) 에서 가져가고 이 데이터를 기반으로 포드를 늘려야할지 줄여야할 지 결정한다.

 

 

이제 메트릭을 생성할텐데 소스 코드는 github에서 다운받을 수 있으며 deploy 안에 있는 파일들을 하나로 합치거나

# kubectl apply -f deploy/

형태로 한번에 실행하여도 된다. (https://github.com/kubernetes-incubator/metrics-server/releases/latest)

 

메트릭 서버가 정상적으로 실행되는지 확인하는 명령은 아래와 같다. 메트릭 서버 또한 하나의 포드로 배포되며 시스템 포드 중 하나이다.

 

# kubectl get deployment metrics-server -n kube-system

 

HPA를 구성한 하고 get으로 HPA를 가져오면 

 

 

Target 부분에 지정한 리소스의 모니터링 값이 표시된다. 0%는 사용량이고 80%는 임계값이다.

 

이제 기본 메트릭서버를 만들어보았으니 프로메테우스를 생성해보겠다. 프로메테우스는 모니터링툴로 쿠버네티스 환경에서 많이 사용된다.

프로메테우스 또한 메트릭 서버와 마찬가지로 하나의 포드로 생성된다. 리소스만 수집하는 메트릭 서버와 달리 프로메테우스는 커스텀 메트릭 또한 수집할 수 있다.

 

 

 

프로메테우스를 생성하는 방법은 Helm을 사용하는 방법과 매니페스트를 사용하여 생성하는 방법인데 EKS 기반에서 프로메테우스를 실행하도록 할 것이다.

매니페스트 : https://github.com/coreos/prometheus-operator/blob/master/bundle.yaml -> kubectl apply -f bundle.yaml

Helm : helm install stable/prometheus \

--name prometheus \

--namespace prometheus \

--set alertmanager.persistentVolume.storageClass="gp2",server.persistentVolume.storageClass="gp2"

 

* Helm 설치

# Helm install

curl https://raw.githubusercontent.com/helm/helm/master/scripts/get > get_helm.sh

chmod 700 get_helm.sh

./get_helm.sh

 

# tiller ServiceAccount Create and ClusterRoleBinding

kubectl -n kube-system create sa tiller

kubectl create clusterrolebinding tiller --clusterrole cluster-admin --serviceaccount=kube-system:tiller

 

# tiller Install

helm init --service-account tiller --upgrade

 

프로메테우스 포드 구동 확인

 

 

프로메테우스를 설치하면 지표 수집 도구가 cAdvisor 뿐만 아니라 kube-state-metrics도 설치가 된다.

이제 로컬시스템에서 프로메테우스로 포트포워딩을 하여 접속 가능하게 해보자

 

# kubectl --namespace=prometheus port-forward deploy/prometheus-server 9090

 

웹 브라우저에서 localhost:9090으로 접속 하면 아래와 같이 실행된다.

 

 

이렇게 생성된 프로메테우스는 그라파나와 연결할 수 있다.

 

모니터링 부분은 아직 내용이 빈약하기 때문에 나중에 다시 정리를 해야겠다.

 

 

 

 

반응형

'Kubernetes' 카테고리의 다른 글

Kubernetes Ingress  (0) 2019.09.19
Kubernetes Service  (0) 2019.09.17
Kubernetes HorizontalPodAutoscaler  (0) 2019.08.31
Kubernetes Pod DaemonSet  (0) 2019.08.30
Kubernetes Pod Replica  (0) 2019.08.30

+ Recent posts