Prometheus, Grafana 실습
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 한다.