본문 바로가기
개발/Docker & Kubernetes

[k8s study] 8. 모니터링과 로깅

by 달사쿠 2020. 10. 6.
반응형

본 포스트는 조나단바이에르, 쿠버네티스 기초다지기 3/e (에이콘)을 참고하여 정리하였습니다. 


다루는 내용

먼저 스터디에서 참고하고 있는 책(쿠버네티스 기초다지기 3/e, 에이콘)에서 다뤄진 내용은 다음 5가지 내용입니다.

  • 쿠버네티스가 cAdvisor, 힙스터, 인플럭스DB, 그라파나를 사용하는 방법
  • 기본 그라파나 대시보드 커스터마이징
  • 플루언티드(FleuntD)와 그라파나 사용방법
  • 로깅 도구의 설치 및 사용방법
  • 모니터링 능력을 확장하기 위해 스택드라이버(Stackdriver)나 시스딕처럼 널리 알려진 3rd-party 도구를 함께 사용하는 방법

하지만 본 포스트에서는 책과 다소 다루는 내용을 다르게 구성했습니다. 힙스터가 쿠버네티스 1.13부터 deprecated됨에 따라 (2020년 10월 쿠버네티스버전: 1.19) 기존의 모니터링 시스템의 아키텍처로 많이 사용되던 cAdvisor + 힙스터 + 인플럭스DB의 조합이 사용되지 않게 되었습니다. 따라서 현재 통용적으로 사용되는 구성인 cAdvisor + Prometheus에 맞게 포스트를 구성하게 되었고, 힙스터와 인플럭스DB에 대한 설명은 간단히 언급하겠습니다.


내장된 모니터링

가장 쉬운 모니터링 방법은 네임스페이스를 지정해서 get pods 커멘드를 실행시키는 것입니다.

kubectl get pods --namespace=kube-system

시스템 파드 조회

노드는 kubelet을 실행하는데, 이 kubelet은 API 서버와 상호작용하고 상태를 업데이트하는 노드의 메인 인터페이스 입니다. 이런 업데이트의 하나로 노드의 리소스에 대한 메트릭이 있습니다. 리소스 사용량의 실제 보고는 cAdvisor라는 프로그램에서 수행합니다.

cAdvisor (container Advisor)

cAdvisor는 컨테이너를 모니터링하는(컨테이너의 메트릭을 수집하는) 도구이면서 kubelet에 통합되어있는 컨테이너입니다구글의 또 다른 오픈 소스 프로젝트로, 컨테이너가 사용하는 리소스의 다양한 메트릭(CPU, 메모리, 네트워크 상태 등)을 제공합니다. 이 cAdvisor는 각 노드에서 실행중인 컨테이너들의 리소스 사용량과 성능에 대한 정보를 수집해서 kubelet으로 보고합니다.


쿠버네티스 1.13버전 이전까지의 모니터링 아키텍처 (cAdvisor + Heapster + inflexDB)

kubernetes 1.13 이전 버전에서 사용된 Heapster가 포함된 모니터링 아키텍처

(Heapster(힙스터)는 쿠버네티스 1.11버전에서 deprecated되었고 1.13버전에서 완전히 제거되었습니다.) 

힙스터의 동작과정은 다음과 같습니다.

 

  1. 힙스터가 쿠버네티스 클러스터 상에서 Pod로 실행
  2. 힙스터가 apiserver와 통신해 전체 클러스터의 node와 pod 목록을 가져옴
  3. 각 노드의 kubelet에 접근해서 데이터를 가져옴
  4. 별도의 스토리지 벡엔드(일반적으로 influxDB)에 저장

influxDB에 저장된 데이터를 조회할때는 대시보드 도구인 grafana를 많이 사용했습니다. 하지만 앞서 언급했듯 cAdvisor + Heapster + influxDB의 조합은 힙스터가 deprecated되며 사용하지 않게되었고, 현재는 메트릭서버(metric-server)가 힙스터의 역할을 대신하고cAdvisor + Prometheus 조합이 많이 사용되고 있습니다.

메트릭서버 (metric-server)

쿠버네티스의 메트릭을 수집하는 모니터링 아키텍처에서, 코어메트릭 파이프라인 쪽을 가볍게 하기 위해 힙스터 대신 표준으로 도입된 것이 바로 메트릭서버입니다. kubelet에서 메트릭데이터를 수집해서 메모리에 저장하고, Metrics API를 통해 Kubernetes apiserver에 노출하여 사용합니다. 메트릭 서버는 non-autoscaling 목적에서는 의미가 없습니다.

즉, 아래의 목적(HPA, VPA)으로는 사용할 수 있습니다.

하지만 아래와 같은 상황에서는 사용하지 않는 것을 권장합니다.

  • Non-Kubernetes clusters
  • 메트릭으로 정확한 정도의 자원이 사용될 때
  •  CPU/Memory 자원의 기반이 아닌 다른 Horizontal autoscaling일 경우

메트릭 서버를 사용하기 위해서는 아래와 같은 명령어를 입력하면 됩니다.

kubectl apply -f https://github.com/kubernetes-sigs/metrics-server/releases/download/v0.3.7/components.yaml

minikube 환경의 경우, 기본적으로 addon으로 내장되어있기 때문에 다음의 명령어를 입력하면 됩니다.

minikube addons enable metrics-server

 

cf. 쿠버네티스에서 필요한 핵심 데이터들은 대부분 etcd에 저장되지만, 메트릭 데이터를 etcd에 저장하면 etcd의 부하가 너무 커지기 때문에 메모리에 저장하도록 되어 있습니다. 따라서 메트릭서버용으로 실행한 포드가 재시작되면 수집됐던 데이터가 사라져, 보관주기를 길게 가져가려면 별도의 외부 스토리지를 사용하도록 설정해야 합니다.

유용한 옵션

  • --kubelet-preferred-address-types
    특정 node에 연결하기위한 주소를 결정할 때 사용되는 노드 주소 유형 (defaults: [Hostname, InternalDNS, InternalIP, ExternalDNS, ExternalIP])
  • --kubelet-insecure-tls
    kubelet에서 제공하는 CA를 확인하지 않으며, 보안에러가 나지않도록 무시하는 옵션
    (참고: 
  • --requestheader-client-ca-file
    들어온 request에 대해 클라이언트 인증서를 확인하기위한 루트 인증서 번들을 지정합니다.

쿠버네티스 모니터링 아키텍처 (cAdvisor + Prometheus)

프로메테우스 (Prometheus)

  • 다차원 데이터 모델(메트릭 이름과 키/값 쌍으로 식별되는 시계열)
  • 다차원성을 활용하는 유연한 쿼리 언어
  • 분산저장소에 의존하지 않고, 단일 서버 노드는 자율적
  • HTTP-기반의 풀(끌어오기 방식의) 모델로 시계열 수집
    : 유저는 노드의 매트릭을 HTTP를 통해 일반 텍스트유형으로 노출하는데만 집중
  • 다양한 유형의 그래프 및 대시보드 지원

설치 방법

 

Getting started | Prometheus

This guide is a "Hello World"-style tutorial which shows how to install, configure, and use Prometheus in a simple example setup. You will download and run Prometheus locally, configure it to scrape itself and an example application, and then work with que

prometheus.io

 

helm/charts

Curated applications for Kubernetes. Contribute to helm/charts development by creating an account on GitHub.

github.com

  • Operator (헬름과 비슷한 소프트웨어 관리 방식을 기반으로, 애플리케이션의 설치 및 유지보수, 복구에 대한 실무자의 운영지식을 더할 수 있도록 설계)
 

OperatorHub.io | The registry for Kubernetes Operators

 

operatorhub.io

헬름을 이용한 operator 설치

helm repo add prometheus-community https://prometheus-community.github.io/helm-charts

helm search repo prometheus-community

helm repo add stable https://kubernetes-charts.storage.googleapis.com/

helm repo update

helm install kube-prometheus-stack prometheus-community/kube-prometheus-stack

helm ls

kubectl get pods

cf) sysdig error


참고

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

https://arisu1000.tistory.com/27856?category=787056

https://github.com/kubernetes-sigs/metrics-server

 

반응형

댓글