본문으로 건너뛰기

Kubernetes Engine 클러스터 모니터링 환경 구축

Kubernetes Engine에서 생성한 쿠버네티스 클러스터에 대한 워크로드 모니터링 환경을 구축하는 예제입니다. Alertmanager를 통해 쿠버네티스 클러스터 정보를 Slack Alert를 통해 제공받을 수 있고, Grafana를 통해 대시보드 형태로 모니터링할 수 있습니다.

안내

사전 준비

kubectl 설치하기

brew install kubectl 명령어를 통해 kubectl을 설치합니다.

kubectl 설치
brew install kubectl

Helm 설치하기

brew install helm 명령어를 터미널에 입력하여 Helm 패키지를 설치합니다. Helm은 쿠버네티스 패키지 매니저로, 쿠버네티스용 소프트웨어를 검색하거나 공유하고 사용할 수 있습니다.

Helm 설치
brew install helm

쿠버네티스 클러스터 생성

Kubernetes Engine을 이용한 쿠버네티스 환경 구축에 대한 상세 가이드는 Kubernetes Engine으로 쿠버네티스 클러스터 구축 문서를 참고하시기 바랍니다.

  1. Step 1. 쿠버네티스 클러스터 생성하기에 따라 Kubernetes Engine을 이용하여 클러스터를 생성합니다.

  2. Step 2. kubectl로 쿠버네티스 API 호출하기를 진행합니다.

작업 순서

Step 1. Slack Alert 설정

  1. Slack api 사이트에 접속한 후, Create an app을 클릭해 From scratch 타입의 앱을 생성합니다. 앱 생성 시, 앱 이름을 입력하고 워크스페이스를 선택합니다.

  2. 생성한 앱의 상세 페이지 좌측에 위치한 Incoming Webhooks 탭에서 Activate Incoming Webhooks 설정을 On으로 설정하고, Webhook URLs for Your Workspace 블록의 Add New Webhook to Workspace 버튼을 클릭해 Slack에서 알람을 수신할 채널을 추가합니다.

  3. 채널을 추가한 후 생성되는 Webhook URL을 확인합니다. [Copy] 버튼을 클릭하여 Webhook URL을 복사합니다.

Step 2. 모니터링 환경 구축

Helm을 이용하여 쿠버네티스 클러스터에서 Prometheus 스택 환경을 편리하게 생성하고 관리할 수 있습니다. kube-prometheus-stack 설정 파일을 수정하여 쿠버네티스 클러스터에 kube-prometheus 스택과 grafana 대시보드, alertmanager를 생성합니다.

설정 파일 커스터마이징하기
  1. 로컬 환경에 예제 작업을 진행할 디렉터리를 생성한 뒤, 해당 디렉터리 위치로 이동합니다.

    mkdir ~/k8se-monitor
    cd ~/k8se-monitor
  2. 사전 설정된 설정 파일, custom-values.yaml 파일을 다운로드합니다. 설정 파일에는 Alertmanager와 Grafana에 대한 설정이 포함되어 있습니다.

    curl -O https://raw.githubusercontent.com/kakaoenterprise/kc-handson-config/k8s-monitor/custom-values.yaml
  3. 다운로드한 custom-values.yaml 파일의 alertmanager 필드에서 수신 주기나 수신 메시지 형식, 수신 채널 등의 Slack alert 관련 설정을 수정할 수 있습니다. Step 1. Slack Alert 설정에서 생성한 채널과 Webhook URL 값을 각각 설정 파일의 channel 필드, api_url 필드에 입력합니다.

    # Line 157, 158
    - channel: '#channel-name'
    api_url: https://hooks.slack.com/services/...s/...
    • 부가적인 Slack alert 설정이 필요한 경우, slack_config를 참고해 alertmanager 필드를 수정하시기 바랍니다.
  4. 설정 파일의 additionalPrometheusRulesMap 필드에서 알람 규칙을 추가할 수 있습니다. 제공되는 설정 파일은 Cluster의 Memory Usage가 10%를 넘겼을 시 알람이 수신되도록 설정되어 있는 상태입니다.

    아래 예제와 같이 코드를 추가 입력하여 CPU Usage가 5%를 넘는 경우에도 알람이 수신되도록 규칙을 추가합니다.

    # Line 97~
    additionalPrometheusRulesMap:
    rule-name:
    groups:
    - name: Kubernetes Cluster Monitoring
    rules:
    - alert: Cluster Memory Usage Over 10%
    expr: sum (container_memory_working_set_bytes{kubernetes_io_hostname=~"^.*$"}) / sum (machine_memory_bytes{kubernetes_io_hostname=~"^.*$"}) * 100 > 10
    for: 1m
    annotations:
    title: "Cluster Memory Usage Over 10%"
    message: "Memory Usage: {{ $value }}"
    labels:
    severity: 'warning'
    #### Add Rule ####
    - alert: Cluster CPU Usage Over 5%
    expr: sum (rate (container_cpu_usage_seconds_total{kubernetes_io_hostname=~"^.*$"}[2m])) / sum (machine_cpu_cores{kubernetes_io_hostname=~"^.*$"}) * 100 > 5
    for: 1m
    annotations:
    title: "Cluster CPU Usage Over 5%"
    message: "CPU Usage: {{ $value }}"
    labels:
    severity: 'warning'
kube-prometheus-stack 설치하기

커스터마이징한 설정 파일을 적용하여 kube-prometheus-stack를 설치합니다.

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

helm install prometheus prometheus-community/kube-prometheus-stack -f custom-values.yaml -n kube-system

Step 3. Slack Alert 수신 확인

Slack 채널에 접속하여 설정한 규칙에 맞게 알람이 잘 오는지 확인합니다.

Step 4. Grafana 대시보드 확인

Grafana 대시보드를 통해 클러스터의 여러 데이터를 시각화된 대시보드 형태로 확인할 수 있습니다.

Grafana 대시보드 접속하기

  1. Grafana 대시보드에 접근하기 위해 포트포워딩을 진행합니다. 아래 kubectl 명령어를 이용하여 로컬 환경의 30080 포트의 진입을 Grafana 대시보드 엔드포인트로 포워딩하는 프로세스를 실행합니다.

    kubectl port-forward svc/prometheus-grafana -n kube-system 30080:80 &
  2. 로컬 환경에서 브라우저를 실행하여 로컬호스트 30080포트로 http 접속을 시도합니다. 정상적으로 설치된 경우 Grafana 대시보드로 접속합니다.

    Grafana 기본 계정은 다음과 같습니다. 계정 정보를 확인하여 로그인합니다.

    KeyValue
    usernameadmin
    passwordprom-operator
  3. 로그인에 성공하면 Grafana 홈 화면을 확인할 수 있습니다.

Grafana 데이터 소스 생성하기

prometheus 스택 중, prometheus-server는 prometheus-node-exporter로부터 모니터링할 노드의 메트릭 정보를 받아옵니다. Grafana 대시보드에서 Data Source를 생성하여 prometheus-server에 받아온 메트릭 정보를 요청합니다. 아래 표를 참고하여 데이터 소스를 생성합니다.

KeyData
Nameike-tutorial
Urlhttp://prometheus-kube-prometheus-prometheus:9090

데이터 소스 생성

Grafana 대시보드 확인하기

  1. 로컬 환경에 대시보드 설정 파일인 dashboard.json 파일을 다운로드합니다.

    curl -O https://raw.githubusercontent.com/kakaoenterprise/kc-handson-config/k8s-monitor/dashboard.json
  2. Grafana에서 좌측의 Dashboards 탭을 클릭하여 Import Dashboard 페이지에 접속한 뒤, [Upload JSON file] 버튼을 클릭해 다운로드한 dashboard.json 파일을 업로드합니다. 파일 업로드 후 Prometheus data source 선택 시 Grafana 데이터소스 생성하기에서 생성한 k8se-tutorial을 선택합니다.

    대시보드 생성

  3. Grafana 대시보드를 통해 클러스터의 Memory 사용량, CPU 사용량 등의 정보를 상세히 확인할 수 있습니다.