Kubernetes - 모니터링

jsbak·2023년 6월 7일
0

Cloud

목록 보기
58/59

Prometheus

  • Prometheus
  • 모니터링 기능이 설치된 컨테이너가 파드 안에 존재
  • CNCF가 호스트하는 오픈 소스 소프트웨어 모니터링 도구
  • 운영 비용이나 서버 측 머신 리소스가 필요
  • 여러 가지 지표(메트릭)을 수집/그래프화/모니터링할 수 있습니다.
  • Pull 방식을 사용
    • 서버에 에이전트가 떠있으면 프로메테우스 서버가 주기적으로 에이전트에 접속해서 데이터를 가져오는 방식
    • 대부분의 모니터링 도구가 Push 방식
      • 서버에 에이전트를 설치하고 메트릭 데이터를 수집해서 모니터링 서버로 보내면 상태를 보여주는 방식

아키텍처

Grafana

아키텍처

  • kube-state-metricsnode-exporter 를 설치하여 Pod들의 CPU 사용량을 정보를 수집
    • 쿠버네티스 전체 상태와 노드의 상태를 Pull 방식으로 수집

구축

쿠버네티스_프로메테우스_그라파나_오토스케일링

$ cd ~
$ kubectl top node
-- error: Metrics API not available
$ kubectl top pod
-- error: Metrics API not available

metric-server

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

$ kubectl edit deploy -n kube-system metrics-server
----------------------------------------
# `spec.template.spec.containers.args` 아래에 추가
--kubelet-insecure-tls

kubectl top node
kubectl top pod

ns 생성 및 깃 자원 pull

$ kubectl create ns monitoring

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

프로메테우스 설치

	# 클러스터 Role 관한 내용
$ kubectl apply -f prometheus-cluster-role.yaml
$ kubectl apply -f prometheus-config-map.yaml
	# 프로메테우스 서버
$ kubectl apply -f prometheus-deployment.yaml
	# 노드의 정보 "node-exporter" 관련 에이전트
$ kubectl apply -f prometheus-node-exporter.yaml
	# 서버의 접속할 수 있는 엔드포인트 (서비스)
$ kubectl apply -f prometheus-svc.yaml

# "monitoring" 네임스페이스 확인
$ kubectl get pod -n monitoring
$ kubectl get pod -n monitoring -o wide


# kube-state : 쿠버네티스의 자원 사용량에 대한 에이전트
$ kubectl apply -f kube-state-cluster-role.yaml
$ 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

그라파나 설치

$ docker pull grafana/grafana:latest
$ docker tag grafana/grafana:latest 192.168.1.143:5000/grafana/grafana:latest
$ docker push 192.168.1.143:5000/grafana/grafana:latest

$ kubectl apply -f grafana.yaml
$ kubectl get pod -n monitoring

  • 메뉴 - Administration - Data sources - Prometheus





  • 메뉴 - Dashboards - Import
  • 결과
  • 사용하려던 대시보드 - k8s 클러스터 모니터링

오토스케일링 실습

  • HPA: Horizontal Pod Autoscaler

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

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 php-apache.yaml
$ kubectl apply -f hpa.yaml

$ kubectl get all

# 다른 탭에서 수행(마스터노드) 2초 간격으로 상태를 출력
# `-n` 옵선 초 단위로 관찰 가능 0.1초 보다는 빠른 시간은 안된다.
$ watch kubectl get pod -o wide 

# 부하를 주는 명령어
# "php-apache" 서비스 이름으로 접속시도를 하여 부하를 발생
$ 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"

$ kubectl get hpa
  • watch kubectl get pod -o wide
  • 부하 발생

질문 거리

  • kube-stateprometheus-node-exporter 은 각각 메트릭을 수집 하기 위한 것이라고 볼 수 있는가? - 그렇다.
    • kube-state 는 k8s 의 메트릭을 수집하기 위한 것이니 쿠버네티스가 아닌 다른 서비스?어플리케이션의 메트릭을 확인하고 싶다면 없어도 되는 것인가? - 그렇다.
    • 그렇다면 다른 메트릭 수집 관련을 넣어도 되는 것인가? - 위의 답변
  • grafanaprometheus 를 좀더 시각화 하기 위한 것이라고 볼 수 있는가? - 그렇다.

참고

profile
끄적끄적 쓰는곳

0개의 댓글