프로메테우스, 그라파나
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



프로메테우스, 그라파나 설치
# 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


# 그라파나 설치
kubectl apply -f grafana.yaml
# kubectl get pod -n monitoring
# kubectl get svc -n monitoring


프로메테우스 사용


그라파나 사용







https://grafana.com/grafana/dashboards
Dashboards | Grafana Labs
grafana.com




오토스케일링
오토스케일링 실습(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"


'메가존 클라우드 2기 교육 > 실무 특화' 카테고리의 다른 글
Kubernetes - Amazon EKS (0) | 2023.06.12 |
---|---|
Kubernetes - GCP에서의 사용 (0) | 2023.06.08 |
Kubernetes - 스케줄링(taint & toleration, cordon , drain), (0) | 2023.06.07 |
Kubernetes - NFS, configMap, namepsace, ResourceQuota (0) | 2023.06.05 |
Kubernetes - Ingress, metallb, Volume (0) | 2023.06.05 |