Kubernetes 실습(4)

Posted by : at

Category : Kubernetes


Summary

  • Prometheus 설치

  • Prometheus Query

  • Grafana 연동

  • Grafana Dashboard 생성


Prometheus 설치

Prometheus 는 OpenSource 기반 Monitoring system으로, Kubernetes node들의 상태를 monitoring 한다. (master node에서 동작.)

간단한 text 형식으로 Metric을 쉽게 노출하고, Grafana 같은 대시보드 시스템에서 graph로 표시 가능하다.

PromQL Query Language를 사용한다.

image

설치 전 먼저 kubectl get nodes로 쿠버네티스 클러스터 상태가 정상인지 확인한다.

image

!참고 kubectl get nodes에서 ready 안 뜰 경우, 확인하는 법.

  1. docker, kubelet restart.
  2. 1 해도 안될 경우 config 파일 다시 복사떠와서 설정.(1주차 내용에 존재.)
  3. master, worker node로 설정한 node의 호스트명 확인. JOIN 당시의 호스트명을 전달해서 인식하기 때문에 node의 호스트명이 바뀌면 인식하지 못함.
  4. calico문제 => 방화벽 off 로 해결.
  5. pod 들이 pending되는 이유는, 배포할 node가 없다고 판단했기 때문.(master node는 애초에 배포할 node라고 가정하지 않음.) => kubectl get nodes로 worker node를 ready 상태로 만드는 것이 우선.


  • Helm 설치.

Helm 차트는 복잡한 Kubernetes app들을 편리하게 정의하여 설치하거나 upgrade가 가능하게 해 주는 tool이다. 한마디로 Kubernetes Package managing tool.

curl -fsSL -o helm.sh https://raw.githubusercontent.com/helm/helm/master/scripts/get-helm-3
chmod 777 helm.sh
./helm.sh
helm repo add stable https://charts.helm.sh/stable
helm repo update
  • Helm Chart git clone
    yum install -y git
    git clone https://github.com/helm/charts.git
    
  • Prometheus values 파일 수정. (Persistent Volume 사용하지 않고 설치)
    cd charts/stable/prometheus/
    vi values.yaml
    

    values.yaml 파일에서 persistentVolume: 하위의 enabled: 를 false로 설정. (3군데 수정필요)

  • Prometheus 설치
    helm install prometheus stable/prometheus -f charts/stable/prometheus/values.yaml
    

kubectl get pods로 설치 확인.

image

  • jq 설치. (Query response를 보기 편하게 해 주는 tool)
    yum install -y epel-release
    yum install snapd
    systemctl enable --now snapd.socket
    ln -s /var/lib/snapd/snap /snap     #symbolic link 생성.
    snap install jq
    yum install jq
    


Prometheus Query (PromQL)

  • Metric 출력 형태
    <Metric 이름>{<Lable key>=<Lable 값>, <Lable key>=<Lable 값> ... }<Metric 값>[<timestamp>]
  • Data type
    1. Instant Vector : 같은 시간대를 갖는 Metric 값들의 집합.
    2. Range Vector : 특정 시간 동안의 Metric 값들을 배열로 가진 집합.
  • Query 형식
    curl http://[prometheus-server ip]/[end point] -d query="[query]"
    Instant Query - end point: /api/v1/query
    Range Query - end point: /api/v1/query_range
  • Test
    curl http://[prometheus-server ip]/api/v1/query -d query="node_cpu_seconds_total"
    curl http://[prometheus-server ip]/api/v1/query -d query="node_memory_MemTotal_bytes" | jq
    

(curl 명령어로 작동이 안된다면 방화벽 문제일 가능성이 큼. 방화벽 off 해버리자.)
(또한, curl로 query를 날리는게 아닌, browser 상에서 대쉬보드로 PromQL을 날리고 싶다면, kubectl edit svc/prometheus-server 로 서비스를 수정하여 externalIPs 를 추가해주자.)

image

직접 Prometheus Query 를 날려보기 위해, prometheus-server의 IP를 확인해 보자.

image

이렇게 pod와 service의 IP를 확인할 수 있는데, 이 중 prometheus-server의 service Cluster-IP인 10.98.162.91을 사용한다. (이유는 pod의 IP주소는 유동적이고 service는 그러한 유동적인 pod의 IP를 찾을 수 있는 anchor역할을 하기 때문.)

image

이처럼 확인이 가능하다.

  • 대표적으로 많이 사용하는 Query
    • CPU 사용률: Node => node_cpu_seconds_total
      Container => container_cpu_usage_seconds_total
    • RAM 사용률: Node => node_memory_MemTotal_bytes
      Container => container_memory_working_set_bytes
    • Node, Container 상태: Node => kube_node_status_condition
      Container => kube_pod_status_ready


Grafana 연동

  • charts/stable/grafana/values.yaml 파일 수정

  • Grafana 설치 helm install grafana stable/grafana -f charts/stable/grafana/values.yaml

image

image

  • Grafana service 외부 IP 할당
    kubectl edit svc/grafana
    

clusterIP 하위에 externalIPs 추가 후 IP 할당. (자신의 node IP주소 기입.)
port 부분에 원하는 port 설정.

image

  • Grafana 접속

browser에서 externalIP port로 접속.
ID, Passwd를 svc/grafana에서 설정한 ID/PW로 로그인.

  • Prometheus와 연동

Grafana dashboard에서 Configuration - Data Sources - Add data source

Prometheus 선택, URL에 Prometheus server IP 입력.

image

Save & Test 진행.


  • 외부 Dashboard import.

https://grafana.com/grafana/dashboards 에서 원하는 dashboard 선택 후, import - url 붙여넣고 Load.

Dashboard 선택 후 확인.

image


<-- Incomment incase you want to use Disqus
-->
About Dohyun Kim

Network, Linux, Cloud Computing

Star
Useful Links