전공영역 공부 기록

프로메테우스 helm chart 설치

악분 2021. 4. 17. 23:53
반응형

 

 

 

 

     

    이 문서는 프로메테우스 헬름 차트를 설치하는 방법을 소개합니다. 설치에 사용된 yaml파일 예제는 https://github.com/choisungwook/portfolio/tree/master/kubernetes/helm/prometheus-charts에서 확인할 수 있습니다.

    영상: https://youtu.be/qHIgk547SVA

     


    1. 프로메테우스란?

    프로메테우스는 시계열 데이터베이스이며 쿠버네티스에서는 metric을 수집할 때 많이 사용됩니다.

    다른 데이터베이스와 다르게 pull방식으로 데이터를 수집합니다. 예를 들어 EFK시스템에서는 컨테이너 로그를 puhs방식으로 엘라스틱서치에 전송합니다.

    반면, 프로메테우스는 직접 수집할 대상의 데이터를 수집해갑니다. 이 방식을 pull식이라고 합니다. push방법도 존재하지만 디폴트로 pull방법을 사용합니다.

    프로메테우스 컴퍼넌트

    ● exporter: 프로메테우스가 수집할 대상과 수집정보

    ● prometheus server: 프로메테우스 데이터베이스

    ● promql: 프로메테우스 sql

    ● alertmanager: 프로메테우에서 설정한 경계값이 트리거되면 알림을 전송

    ● Grafana: 프로메테우스 데이터 시각화

    프로메테우스 컴퍼넌트 워크플로우

     

    프로메테우스 헬름 핵심 쿠버네티스 리소스

    프로메테우스 헬름에 가장 핵심 컴퍼넌트는 오퍼레이터(operator)입니다. 오퍼레이터는 servicemonitor 리소스를 자동감지하여 프로메테우스를 쿠버네티스럽게 사용할 수 있도록 합니다.

    servicemonitor는 프로메테우스 익스포터를 오퍼레이터가 찾을 수 있도록 연결고리를 담당합니다.

    왼쪽: 프로메테우스 컴퍼넌트, 오른쪽: 헬름 쿠버네티스 핵심 리소스

     

    2. 헬름차트 설치

    저희가 사용할 헬름차트는 kube-prometheus-stack입니다. 해당 차트는 이름 그대로 사용자가 바로 프로메테우스를 사용할 수 있도록 모든 프로메테웃 stack(컴퍼넌트)을 설치합니다.

    ※ helm chart git: https://github.com/prometheus-community/helm-charts

    프로메테우스 헬름차트

     

    헬름에서 여러 설정이 있고 이 문서는 데이터를 영구적으로 저장하기 위해 persistent volumeclaim과 도메인 설정을 위한 ingress 설정을 다룹니다.

    persistent, ingress설정 관계도

     

     

    헬름 차트 추가

    프로메테우스 헬름차트 저장소를 추가합니다.

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

     

    persistent volumeclaim 설정

    동적 프로비저닝 기능이 비활성화 되어 있다면 persistentvolume을 먼저 생성합니다.

    apiVersion: v1
    kind: PersistentVolume
    metadata:
      name: prometheus-pv
      labels:
        app: my-example-prometheus
    spec:
      capacity:
        storage: 20Gi
      accessModes:
        - ReadWriteOnce
      hostPath:
        path: "/mnt/prometheus"
      volumeMode: Filesystem

    그리고 override_values.yaml파일을 생성하고 claimtemplate을 수정합니다. 매칭되는 persistentvolume을 지정해야 하는데 selector을 사용합니다.

    prometheus:
      # change here
      prometheusSpec:
        storageSpec:
          volumeClaimTemplate:
            spec:
              accessModes: ["ReadWriteOnce"]
              resources:
                requests:
                  storage: 5Gi
              selector:
                matchLabels:
                  app: my-example-prometheus

     

    프로메테우스 ingress 설정

    도메인 경로를 routeprefix에 설정합니다.

    prometheus:
      # change here
      prometheusSpec:
        routePrefix: /prom

     

    ingress를 활성화 하고 hosts에 도메인, path에 접속할 path를 설정합니다. 아래 예제는 choilab.com/prom에 접속하면 프로메테우스에 접속하게 하는 설정입니다.

    prometheus:
      ingress:
        enabled: true
        # change here
        hosts:
          - choilab.com
        # change here
        paths:
          - /prom

     

    그라파나 ingress 설정

    그라파나 path를 변경하기 위해서 grafana.ini을 수정해야 합니다. 그리고 nginx rewrite를 설정해야 합니다.

    grafana:
      ingress:
        enabled: true
        annotations:
          nginx.ingress.kubernetes.io/rewrite-target: /$2
        # change here
        path: /test(/|$)(.*)
        hosts:
          - choilab.com
      grafana.ini:
        server:
          # change here
          domain: choilab.com
          root_url: http://choilab/test/
          serve_from_sub_path: true

     

    그라파나 비밀번호 설정

    그라파나 대시보드에 접속할 때, 최초 admin 비밀번호를 설정합니다.

    grafana:
      adminPassword: password1234

     

    설치

    네임스페이스를 생성하고 설정한 values.yaml을 사용하여 헬름차트를 설치합니다. 아래 예제는 promtest네임스페이스에 헬름차트를 설치합니다.

    kubectl create ns promtest
    helm install -n promtest -f prometheus_values.yaml promtest prometheus-community/kube-prometheus-stack

     

    설치확인

    설정한 ingress에 접속되는지 확인합니다.

     

    반응형