개발강의정리/DevOps

[데브옵스를 위한 쿠버네티스 마스터] 리소스 로깅과 모니터링 - GKE에서 프로메테우스 설치와 모니터링

nineDeveloper 2021. 1. 19.
728x90

GKE에서 프로메테우스 설치와 모니터링


쿠버네티스 클러스터 모니터링 툴과 서비스 사용 현황


프로메테우스

  • Marketplace 에서 Prometheus & Grafana 검색 후 설치(네임 스페이스를 별도로 할당)
    • 네임스페이스만 prometheus 로 수정
    • 만약 prometheus 가 제대로 설치되지 않아 계속 Pending 된다면 애플리케이션에서 삭제하고 재설치


프로메테우스 아키텍처

  • Kubernetes 클러스터에서 메트릭을 자동으로 수집하여 Prometheus 서버에서 수집하고 Grafana에 제공

  • Prometheus StatefulSet

    • 구성된 모든 소스를 주기적으로 쿼리하여 구성된 모든 메트릭을 수집
    • 각 Prometheus Pod는 PersistentVolumeClaim에 데이터를 저장
  • Prometheus Node Export DaemonSet

    • 포드를 실행하고 있는 호스트 파일 시스템의 /sys, /proc을 수집 및 모니터링하여 노드의 하드웨어 및 운영 체제에 대한 값을 측정하고 메트릭을 NodeExport 포드의 포트 9100에 표시
  • Kube State Metrics Deployment

    • Kubernetes API 서버를 수신하고 리소스 (배포, 노드, 포드 등)와 관련된 메트릭을 생성
    • /metrics 포트 8080 에서 메트릭을 표시
    • Prometheus 서버는 메트릭 사용
  • Prometheus Alert Manager

    • Prometheus 서버에서 발생하는 경고를 수신하고 ConfigMap에 지정된 구성에 따라 처리
  • Grafana StatefulSet

    • Prometheus에 메트릭에 대한 쿼리를 위한 사용자 인터페이스를 제공하고 사전 구성된 대시 보드의 메트릭을 시각화
  • 모든 준비가 완료되면 NodePort를 생성하여 웹서비스 실행

grafana-nodeport.yaml

apiVersion: v1
kind: Service
metadata:
  name: grafana-nodeport
  namespace: prometheus-1
spec:
  type: NodePort
  ports:
  - port: 8080
    targetPort: 3000
    nodePort: 30001
  selector:
    app.kubernetes.io/component: grafana
$ kubectl create -f grafana-nodeport.yaml
service/grafana-nodeport created

$ kubectl get svc
NAME                TYPE        CLUSTER-IP      EXTERNAL-IP   PORT(S)          AGE
grafana-nodeport    NodePort    10.11.242.226   <none>        8080:30001/TCP   6m35s
kubernetes          ClusterIP   10.11.240.1     <none>        443/TCP          6m35s
  • 또한 gcloud 명령어를 사용하여 Firewall 설정 필요
$ gcloud compute firewall-rules create grafana-nodeport-rule --allow=tcp:30001

$ kubectl get node -o wide

$ curl 34.67.21.139:30001
<a href="/login">Found</a>.
  • 애플리케이션에서 세부 정보 확인


실습

Marketplace 에서 설치한 Prometheus & Grafana 서비스 확인

$ kubectl get svc -n prometheus
NAME                                 TYPE        CLUSTER-IP     EXTERNAL-IP   PORT(S)             AGE
prometheus-1-alertmanager            ClusterIP   10.36.2.172    <none>        9093/TCP            19m
prometheus-1-alertmanager-operated   ClusterIP   None           <none>        6783/TCP,9093/TCP   19m
prometheus-1-grafana                 ClusterIP   10.36.12.78    <none>        80/TCP              19m
prometheus-1-kube-state-metrics      ClusterIP   10.36.3.153    <none>        8080/TCP,8081/TCP   19m
prometheus-1-prometheus              ClusterIP   10.36.14.239   <none>        9090/TCP            19m

grafana 서비스 설정 변경

$ kubectl edit svc -n prometheus prometheus-1-grafana

ClusterIP -> LoadBalancer 로 type 변경

...
spec:
  ...
  type: LoadBalancer
  ...

prometheus-1-grafana 서비스에 LoadBalancer IP가 할당될때까지 pending 상태임을 확인

$ kubectl get svc -n prometheus prometheus-1-grafana
NAME                   TYPE           CLUSTER-IP    EXTERNAL-IP   PORT(S)        AGE
prometheus-1-grafana   LoadBalancer   10.36.12.78   <pending>     80:30440/TCP   24m

할당된 EXTERNAL-IP 를 확인

$ kubectl get svc -n prometheus prometheus-1-grafana
NAME                   TYPE           CLUSTER-IP    EXTERNAL-IP     PORT(S)        AGE
prometheus-1-grafana   LoadBalancer   10.36.12.78   34.64.184.167   80:30440/TCP   25m

EXTERNAL-IP 를 브라우저에 입력하고 grafana 웹에 접속해서 username, password 를 입력해서 로그인 하면됨

728x90

댓글

💲 추천 글