목차 | ||
---|---|---|
|
...
1. 쿠버네티스 모니터링
이번 장에서는 모니터링을 위해 Dashboard, Prometheus+Grafana 를 직접 설치하여 실습해 봅니다.
1.1 Kubernetes Dashboard
대시보드는 웹기반으로 쿠버네티스를 모니터링하고 관리 할 수 있습니다
...
다운로드 받은 파일에서 서비스 타입을 NodePort나 LoadBalancer로 수정합니다.
12/00-dashboard-install.txt
코드 블럭 |
---|
curl -LO https://raw.githubusercontent.com/kubernetes/dashboard/v2.7.0/aio/deploy/recommended.yaml |
...
(3) 로그인 시 필요한 토큰을 생성하여 접속합니다.
...
12/01-dashboard-user.yaml
...
코드 블럭 |
---|
---
apiVersion: v1
kind: ServiceAccount
metadata:
name: admin-user
namespace: kubernetes-dashboard
---
apiVersion: rbac.authorization.k8s.io/v1
kind: ClusterRoleBinding
metadata:
name: admin-user
roleRef:
apiGroup: rbac.authorization.k8s.io
kind: ClusterRole
name: cluster-admin
subjects:
- kind: ServiceAccount
name: admin-user
namespace: kubernetes-dashboard
|
코드 블럭 |
---|
kubectl create -f 017.01-dashboard-user.yaml serviceaccount/admin-user created kclusterrolebinding.rbac.authorization.k8s.io/admin-user created 토큰을 복사하여 로그인할 때 사용합니다. kubectl -n kubernetes-dashboard create token admin-user eyJhbGciOiJSUzI1NiIsImtpZCI6ImNlZ015NjBDby15R1c4NVlIMi1vTGVVQXhPdGVzeEk5cEV0NGJiWl92RFEifQ.eyJhdWQiOlsiaHR0cHM6Ly9rdWJlcm5ldGVzLmRlZmF1bHQuc3ZjLmNsdXN0ZXIubG9jYWwiXSwiZXhwIjoxNjk0Njc3NDgxLCJpYXQiOjE2OTQ2NzM4ODEsImlzcyI6Imh0dHBzOi8va3ViZXJuZXRlcy5kZWZhdWx0LnN2Yy5jbHVzdGVyLmxvY2FsIiwia3ViZXJuZXRlcy5pbyI6eyJuYW1lc3BhY2UiOiJrdWJlcm5ldGVzLWRhc2hib2FyZCIsInNlcnZpY2VhY2NvdW50Ijp7Im5hbWUiOiJhZG1pbi11c2VyIiwidWlkIjoiYTRjOGRmMzQtNGY4Yy00OGE5LWJmMjEtYTgyZDliODhhYzAwIn19LCJuYmYiOjE2OTQ2NzM4ODEsInN1YiI6InN5c3RlbTpzZXJ2aWNlYWNjb3VudDprdWJlcm5ldGVzLWRhc2hib2FyZDphZG1pbi11c2VyIn0.hF6NmSdHK-_nysVWZkQdLZZPtKDzPKq1VUfVKn3TjP1d44QfFoBYxVvcbC9mjcphPT0ggA-NKFcZalUN5a8X04lmk77Vel7PFyrXy4Q7WNx2OxiQN88U7F291pyptif0_sk44pZA58MMLYKEq9WKFGnKufyfZJeDsLcFq2YwkTtk4DYrJ47KeibKRnXf3QJ6Wcw4e61x0vBy_VU_vpCPkD4lC9bQKVRRy-Y-thevbAfE5FRthvADsNodBdIEZReXMGnDkvog_LL0okSGz6wKfWE8CpvEGhZQpydlagJGCcs6A15_wr05RyZBNtaoxOdFTDieeYEqKcio0qUJNTGOhA kubectl get svc -A NAMESPACE NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE kubernetes-dashboard kubernetes-dashboard NodePort 10.109.126.84 <none> 443:31963/TCP 8m35s nodeip:nodeport로 접근하여 위에서 확이한 token은 이용하여 접속합니다 |
...
(4) 브라우저를 통해 대시보드에 접속합니다.
...
1.2 Prometheus와 Grafana
프로메테우스와 그라파나는 모니터링에 특화된 솔루션입니다.
실제 운영 환경 모니터링은 그라파나를 가장 많이 사용합니다.
프로메테우스로 매트릭을 수집하여 저장하고 그라파나에서 필요한 데이터를 불러와 대시보드 형식으로 표현 합니다.
쿠버네티스와 노드의 매트릭 수집을 위해 kube-state-metric과 nodeexporter를 사용합니다.
프로메테우스 매트릭은 클러스터 규모가 커질수록 수집 대상 데이터도 많아지고 매트릭정보도 많아지므로 트래픽과 스토리지를 잘 설계해야 합니다.
...
(1) Prometheus&Grafana 설치
12/02-monitoring-install.txt
코드 블럭 |
---|
git clone https://github.com/prometheus-operator/kube-prometheus.git cd kube-prometheus/ kubectl create -f manifests/setup customresourcedefinition.apiextensions.k8s.io/alertmanagerconfigs.monitoring.coreos.com created customresourcedefinition.apiextensions.k8s.io/alertmanagers.monitoring.coreos.com created customresourcedefinition.apiextensions.k8s.io/podmonitors.monitoring.coreos.com created customresourcedefinition.apiextensions.k8s.io/probes.monitoring.coreos.com created customresourcedefinition.apiextensions.k8s.io/prometheuses.monitoring.coreos.com created customresourcedefinition.apiextensions.k8s.io/prometheusagents.monitoring.coreos.com created customresourcedefinition.apiextensions.k8s.io/prometheusrules.monitoring.coreos.com created customresourcedefinition.apiextensions.k8s.io/scrapeconfigs.monitoring.coreos.com created customresourcedefinition.apiextensions.k8s.io/servicemonitors.monitoring.coreos.com created customresourcedefinition.apiextensions.k8s.io/thanosrulers.monitoring.coreos.com created namespace/monitoring created 프로메테우스 servicemonitor 라는 crd가 설치되기 까지 기다리는 명령 "No resources found" 가 뜨면 성공 until kubectl get servicemonitors --all-namespaces ; do date; sleep 1; echo ""; done kubectl create -f manifests/ alertmanager.monitoring.coreos.com/main created networkpolicy.networking.k8s.io/alertmanager-main created poddisruptionbudget.policy/alertmanager-main created .. 생략 .. 설치에 시간이 소요될 수 있습니다. 전부 배포된 모습입니다. kubectl get all -n monitoring NAME READY STATUS RESTARTS AGE pod/alertmanager-main-0 2/2 Running 0 45s pod/alertmanager-main-1 2/2 Running 0 45s pod/alertmanager-main-2 2/2 Running 0 45s pod/blackbox-exporter-6cfc4bffb6-srf94 3/3 Running 0 51s pod/grafana-748964b847-rwrk5 1/1 Running 0 49s pod/kube-state-metrics-6b4d48dcb4-jb7qt 3/3 Running 0 49s pod/node-exporter-5v9lk 2/2 Running 0 48s pod/node-exporter-9b7md 2/2 Running 0 48s pod/node-exporter-bmdpz 2/2 Running 0 48s pod/prometheus-adapter-79c588b474-72k7p 1/1 Running 0 47s pod/prometheus-adapter-79c588b474-nq4pb 1/1 Running 0 47s pod/prometheus-k8s-0 2/2 Running 0 44s pod/prometheus-k8s-1 2/2 Running 0 44s pod/prometheus-operator-68f6c79f9d-x4jjm 2/2 Running 0 47s NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE service/alertmanager-main ClusterIP 10.105.88.232 <none> 9093/TCP,8080/TCP 51s service/alertmanager-operated ClusterIP None <none> 9093/TCP,9094/TCP,9094/UDP 45s service/blackbox-exporter ClusterIP 10.96.11.27 <none> 9115/TCP,19115/TCP 51s service/grafana ClusterIP 10.101.206.55 <none> 3000/TCP 50s service/kube-state-metrics ClusterIP None <none> 8443/TCP,9443/TCP 49s service/node-exporter ClusterIP None <none> 9100/TCP 49s service/prometheus-adapter ClusterIP 10.104.99.31 <none> 443/TCP 48s service/prometheus-k8s ClusterIP 10.97.36.1 <none> 9090/TCP,8080/TCP 48s service/prometheus-operated ClusterIP None <none> 9090/TCP 44s service/prometheus-operator ClusterIP None <none> 8443/TCP 47s NAME DESIRED CURRENT READY UP-TO-DATE AVAILABLE NODE SELECTOR AGE daemonset.apps/node-exporter 3 3 3 3 3 kubernetes.io/os=linux 49s NAME READY UP-TO-DATE AVAILABLE AGE deployment.apps/blackbox-exporter 1/1 1 1 51s deployment.apps/grafana 1/1 1 1 50s deployment.apps/kube-state-metrics 1/1 1 1 49s deployment.apps/prometheus-adapter 2/2 2 2 48s deployment.apps/prometheus-operator 1/1 1 1 47s NAME DESIRED CURRENT READY AGE replicaset.apps/blackbox-exporter-6cfc4bffb6 1 1 1 51s replicaset.apps/grafana-748964b847 1 1 1 50s replicaset.apps/kube-state-metrics-6b4d48dcb4 1 1 1 49s replicaset.apps/prometheus-adapter-79c588b474 2 2 2 48s replicaset.apps/prometheus-operator-68f6c79f9d 1 1 1 47s NAME READY AGE statefulset.apps/alertmanager-main 3/3 45s statefulset.apps/prometheus-k8s 2/2 44s |
...
참고) https://grafana.com/grafana/dashboards/
2. 쿠버네티스 로깅
2.1 Loki Stack
Grafana Labs에서 개발한 로그 집계 시스템으로, 프로메테우스와 유사한 메트릭 수집 모델을 사용합니다.
Loki는 메타데이터만 인덱싱하고 로그 데이터 자체는 압축된 청크로 저장하여 효율적이고 비용 효율적인 로그 관리 시스템을 제공합니다.
(1) Loki 구성요소
Loki
로그 저장 및 검색을 담당하는 백엔드 시스템입니다.
로그 데이터를 청크로 저장하고 메타데이터를 인덱싱합니다.
Promtail
로그 수집 에이전트로, 로그 데이터를 수집하여 Loki로 전송합니다.
쿠버네티스 환경에서는 노드에서 컨테이너 로그를 수집하고 레이블을 추가하여 Loki로 보냅니다.
Grafana
Loki 데이터를 시각화하고 쿼리하는 대시보드 도구입니다.
메트릭과 로그 데이터를 통합하여 종합적인 모니터링 솔루션을 제공합니다.
(2) Helm 차트를 이용한 설치
코드 블럭 |
---|
helm repo add grafana https://grafana.github.io/helm-charts
helm repo update |
helm install loki-stack grafana/loki-stack --namespace logging --create-namespace 코드 블럭