Kubernetes 실습(4)

Doveloper·2022년 6월 2일
0

Kubernetes

목록 보기
6/9
post-thumbnail

2021-04-12 Prometheus 설치, Query 및 Grafana dashboard 연동


Summary

  • Prometheus 설치

  • Prometheus Query

  • Grafana 연동

  • Grafana Dashboard 생성


Prometheus 설치

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

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

PromQL Query Language를 사용한다.

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

!참고 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로 설치 확인.

  • 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 를 추가해주자.)

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

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

이처럼 확인이 가능하다.

  • 대표적으로 많이 사용하는 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

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

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

  • Grafana 접속

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

  • Prometheus와 연동

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

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

Save & Test 진행.


  • 외부 Dashboard import.

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

Dashboard 선택 후 확인.

profile
Hungry Developer

0개의 댓글