본문 바로가기

메가존 클라우드 2기 교육/실무 특화

Kubernetes - 모니터링(Prometheus, Grafana), 오토스케일링(HPA)

프로메테우스, 그라파나

Prometheus

Prometheus는 CNCF가 호스트하는 오픈 소스 소프트웨어 모니터링 도구이다. 운영 비용이나 서버 측 머신 리소스가 필요하다. 여러 가지 메트릭을 수집/그래프화/모니터링할 수 있다.

대부분의 모니터링 도구가 Push 방식 즉, 대상 서버에 에이전트를 설치하고 이 에이전트가 메트릭 데이터를 수집해서 모니터링 서버로 보내면 상태를 보여주는 방식을 취한다. 하지만, Prometheus는 Pull 방식을 사용하여, 대상 서버에 에이전트가 떠있으면 Prometheus 서버가 주기적으로 에이전트에 접속해서 데이터를 가져오는 방식을 취한다.


Grafana

Grafana는 오픈소스 메트릭 데이터 시각화 도구로 메트릭 분석 플랫폼을 지향하고 있다.

매트릭 정보를 시각화하고 대시보드를 구성한다는 큰 틀은 여전히 변함이 없지만, AWS CloudWatch, Azure Monitor와 같은 클라우드 데이터 소스를 비롯해 로키(Loki)나 ElasticSearch 등을 기반으로 로그 데이터를 지원하는 등 더 많은 데이터 소스를 지원하고 있다.

 

metric-server

# 메트릭 서버 설치
kubectl apply -f https://github.com/kubernetes-sigs/metrics-server/releases/download/v0.6.1/components.yaml

# 암호화부분 수정
kubectl edit deployments.apps -n kube-system metrics-server
// args에 추가
--kubelet-insecure-tls
//

# kubectl top node

메트릭 서버 파드가 생겼다.

15초 마다 갱신된다.

프로메테우스, 그라파나 설치

# git 설치
yum install -y git

# monitoring 네임 스페이스 생성
kubectl create ns monitoring

# git에서 내려받기
cd
git clone https://github.com/hali-linux/my-prometheus-grafana.git
cd my-prometheus-grafana

kubectl apply -f prometheus-cluster-role.yaml
kubectl apply -f prometheus-config-map.yaml
kubectl apply -f prometheus-deployment.yaml
kubectl apply -f prometheus-node-exporter.yaml    # 에이전트 역할
kubectl apply -f prometheus-svc.yaml
kubectl get pod -n monitoring
kubectl get pod -n monitoring -o wide
kubectl apply -f kube-state-cluster-role.yaml    # kube-state: 에이전트 역할
kubectl apply -f kube-state-deployment.yaml
kubectl apply -f kube-state-svcaccount.yaml
kubectl apply -f kube-state-svc.yaml
kubectl get pod -n kube-system
2개의 node-exporter와 1개의 deployment가 생성된다.

# 그라파나 설치
kubectl apply -f grafana.yaml

# kubectl get pod -n monitoring
# kubectl get svc -n monitoring
브라우저 창에 master1의 아이피에 프로메테우스으 포트로 접속

프로메테우스 사용



그라파나 사용

그라파나의 포트로 접속.

'Add data source' 클릭

'Prometheus'클릭

URL에 도메인 주소 입력 8080포트 (get svc에서 나오는 서비스 이름을 도메인으로 사용 가능)

하단의 'Save & test'를 눌러 다음과 같이 정상이 떠야한다.

Dashboards에서 Import 클릭

Grafana 사이트에서 대시보드들을 골라서 Load한다.

https://grafana.com/grafana/dashboards

 

Dashboards | Grafana Labs

 

grafana.com


Prometheus 골라주고 'Import'


Edit 클릭
표현식을 복사하여 프로메테우스에서 사용 가능

 


오토스케일링

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

# php-apache 템플릿
vi php-apache.yaml
//
apiVersion: apps/v1
kind: Deployment
metadata:
  name: php-apache
spec:
  selector:
    matchLabels:
      run: php-apache
  replicas: 2 # Desired capacity, 시작 갯수

  template:
    metadata:
      labels:
        run: php-apache
    spec:
      containers:
      - name: php-apache
        image: k8s.gcr.io/hpa-example
        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
//

# kubectl apply -f php-apache.yaml


# 오토 스케일링 템플릿 생성
vi hpa.yaml
//
apiVersion: autoscaling/v1
kind: HorizontalPodAutoscaler
metadata:
  name: php-apache
spec:
  maxReplicas: 4
  minReplicas: 2
  scaleTargetRef:
    apiVersion: apps/v1
    kind: Deployment
    name: php-apache
  targetCPUUtilizationPercentage: 50
status:
  currentCPUUtilizationPercentage: 0
  currentReplicas: 2
  desiredReplicas: 2
//

# kubectl apply -f hpa.yaml

하단에 오토스케일링 정보가 나온다.

# 도커에서 busybox 이미지 받아서 사설 레지스트리에 업로드 (도커 로그인 확인)
docker pull busybox:1.28
docker tag busybox:1.28 192.168.1.158:5000/busybox:1.28
push 192.168.1.158:5000/busybox:1.28

# 부하를 주기 위한 테스트용 임시 파드 생성 (--rm: 종료시 삭제 --restart=Never: 일회성)
kubectl run -i --tty load-generator --rm --image=192.168.1.158:5000/busybox:1.28 --restart=Never -- /bin/sh -c "while sleep 0.01; do wget -q -O- http://php-apache; done"
'watch kubectl get pod -o wide'를 통해 현황 확인.
과부화로 인해 새로운 파드가 생성된다.