카테고리 없음

Prometheus, Grafana 실습

서머스 2022. 8. 9. 18:12

 

Prometheus

프로메테우스

오픈 소스 소프트웨어 모니터링 도구

여러 가지 메트릭을 수집/그래프화/모니터링할 수 있다.

pull 방식으로, 가져오는 방식

 

 

Grafana

오픈소스 메트릭 데이터 시각화 도구

두 개의 노드 kube-state-metrics와 Node-exporter - 는 에이전트의 역할을 한다.

 

1.19버전의 kubectl이 깔려 있는 VM을 사용한다.

Metric관련 API가 설치되지 않았으므로 에러가 뜬다.

 

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

설치한다.

 

kube-system에 설치가 되었을 것이다

 

 metric server -> 그래프나 지표를 보여준다.

하지만 READY가 0/1이다.

 

에러가 발생한다.

보안상의 이유로 설정이 빠져 있기 때문이다.

kubectl edit deployments.apps -n kube-system

deployment에 누락된 부분을 추가한다.

--kubelet-insecure-tls를 추가한다.

 

그러면 kubectl get all -n kube-system을 확인해 보면 0이었던 것이 1로 바뀌어 있다.

top node가 잘 실행된다.

 

모니터링이라는 ns가 만들어졌다.

 

git clone https://github.com/hali-linux/my-prometheus-grafana.git

git을 설치한 후, 프로메테우스를 clone 한다.

 

 

디렉터리로 들어간다.

 

 

grafana.yaml 빼고 다 apply 한다.

node-exporter : ec2의 자원을 관리하기 위해서 데이터를 저장하는 도구

 

 

프로메테우스가 worker1에 설치되어 있다.

 

 

나머지 4개도 apply 한다.

 

 

master node의 아이피로 들어가면 프로메테우스가 나온다.

 

이렇게 그래프가 보인다. 조금 조잡하지만..

 

 

grafana pod가 잘 러닝중인 것을 확인할 수 있다.

 

30004번 포트에 생겼다.

 

DATA SOURCES 클릭

 

여기서 말하는 DATA SOURCE = 프로메테우스 등 소스가 되는 데이터들을 의미한다.

프로메테우스 클릭

 

 

프로메테우스 서비스의 클러스터 IP, 8080포트를 넣어주면 된다.

 

하단의 save&test 클릭

 

 

https://grafana.com/grafana/dashboards/

 

Dashboards

 

grafana.com

대시보드를 찾는 사이트

여기서 골라볼 수 있다!

 

kubernetes 검색해서 적당한 것 클릭한다.

 

우측의 10000이 이 대시보드의 id이다.

카피한 뒤, 그라파나로 돌아간다.

 

우측의 Dashboard > Import 클릭

아까 대시보드의 id를 입력한다.

우측의 load 클릭

 

프로메테우스의 프로메테우스를 선택한 뒤, 확인 버튼 클릭한다.

 

이런 식으로 게이지를 볼 수 있다.

polling interval을 설정할 수 있다.

데이터를 수집해서 그래프에 수집해주는 인터벌

 

화면이 새로고침되는 시간을 설정할 수 있다.

 

 

오토스케일링(HPA: Horizontal Pod Autoscaler)

수평적 확장(=scale out)

부하를 낮추기 위해서 인스턴스의 개수를 늘려주는 것.

인스턴스의 개수를 늘리는게 아니라, 하나의 인스턴스의 cpu의 스팩을 늘릴 수도 있다. = 수직적 확장(scale up)

 

새로운 디렉터리를 만든 뒤 작업한다.

 

vi php-apache.yaml

apiVersion: apps/v1
kind: Deployment
metadata:
  name: php-apache
spec:
  selector:
    matchLabels:
      run: php-apache
  replicas: 2
  template:
    metadata:
      labels:
        run: php-apache
    spec:
      containers:
      - name: php-apache
        image: k8s.gcr.io/hpa-example #gcr : google container registry
        ports:
        - containerPort: 80
        resources:
          limits:
            cpu: 500m
          requests:
            cpu: 200m
---
apiVersion: v1
kind: Service
metadata:
  name: php-apache
  labels:
    run: php-apache
spec:
  ports:
  - port: 80
  selector:
    run: php-apache # 내부 통신용으로 만들었다.

 

 

그러면 pod 두개가 생긴다. 근데 난 안보임

 

그 다음에 

 

hpa.yaml

apiVersion: autoscaling/v1
kind: HorizontalPodAutoscaler
metadata:
  name: php-apache
spec:
  maxReplicas: 4
  minReplicas: 1
  scaleTargetRef:
    apiVersion: apps/v1
    kind: Deployment
    name: php-apache
  targetCPUUtilizationPercentage: 50
status:
  currentCPUUtilizationPercentage: 0
  currentReplicas: 2
  desiredReplicas: 2

 

 

kubectl run -i --tty load-generator --rm --image=busybox:1.28 --restart=Never -- /bin/sh -c "while sleep 0.01; do wget -q -O- http://php-apache; done"

과부하를 주게 되는 명령어

 

-rm: 부하를 주고 사라질 것임

http://php-apache <- 앞에서 썼던 이름

 

coredns : 서비스의 이름, metadata의 이름을 도메인으로 쓸 수 있게끔 한다.

 

부하를 준 뒤

kubectl get hpa, pod로 확인해 준다.

kubectl get hpa --watch 한다.