2023년 3월 6일부터 @cloudnet study를 시작 하였다.
[24단계 실습으로 정복하는 쿠버네티스][이정훈 지음]의 책을 기본으로 학습을 한다.
운영을 하면서도 부족한 부분을 배울 수 있을 것이란 기대감과 함께 시작한 수업이나 숙제를 하지 못해서 발생하는 불상사를 경험하지 않고 5주간의 스터디를 잘 마무리 했으면 좋겠다.
4주차 스터디 내용을 정리해 본다.
4주차에는 쿠버네티스 모니터링 시스템에 대해서 스터디 및 실습을 진행하였다.
내가 속해 있는 회사에서도 쿠버네티스 클러스터를 운영 중이고 클러스터 모니터링을 프로메테우스&그라파나로 진행하고 있어서 그 구축 과정속에서 정리 헀던 내용을 남겨보고자 한다.
helm repo add grafana https://grafana.github.io/helm-charts
helm repo update
helm pull grafana/grafana
tar xzf grafana-6.52.4.tgz
$ tree ./
./
├── Chart.yaml
├── README.md
├── ci
│ ├── default-values.yaml
│ ├── with-affinity-values.yaml
│ ├── with-dashboard-json-values.yaml
│ ├── with-dashboard-values.yaml
│ ├── with-extraconfigmapmounts-values.yaml
│ ├── with-image-renderer-values.yaml
│ └── with-persistence.yaml
├── dashboards
│ └── custom-dashboard.json
├── templates
│ ├── NOTES.txt
│ ├── _helpers.tpl
│ ├── _pod.tpl
│ ├── clusterrole.yaml
│ ├── clusterrolebinding.yaml
│ ├── configmap-dashboard-provider.yaml
│ ├── configmap.yaml
│ ├── dashboards-json-configmap.yaml
│ ├── deployment.yaml
│ ├── extra-manifests.yaml
│ ├── headless-service.yaml
│ ├── hpa.yaml
│ ├── image-renderer-deployment.yaml
│ ├── image-renderer-hpa.yaml
│ ├── image-renderer-network-policy.yaml
│ ├── image-renderer-service.yaml
│ ├── image-renderer-servicemonitor.yaml
│ ├── ingress.yaml
│ ├── networkpolicy.yaml
│ ├── poddisruptionbudget.yaml
│ ├── podsecuritypolicy.yaml
│ ├── pvc.yaml
│ ├── role.yaml
│ ├── rolebinding.yaml
│ ├── secret-env.yaml
│ ├── secret.yaml
│ ├── service.yaml
│ ├── serviceaccount.yaml
│ ├── servicemonitor.yaml
│ ├── statefulset.yaml
│ └── tests
│ ├── test-configmap.yaml
│ ├── test-podsecuritypolicy.yaml
│ ├── test-role.yaml
│ ├── test-rolebinding.yaml
│ ├── test-serviceaccount.yaml
│ └── test.yaml
└── values.yaml
그라파나 차트 정보와 템플릿 파일들을 확인 할 수 있다.
필요한 Service port 및 구성에 대한 정보를 수정 하고
회사에서 사용하는 GitRepo에 코드를 등록한 후 ArgoCD를 통해서 배포를 해보도록 하겠다.
ArgoCD Applications 등록
$ k get all
NAME READY STATUS RESTARTS AGE
pod/grafana-69c7768484-trpvz 1/1 Running 2 111d
pod/prometheus-alertmanager-5f5d5f956-9zwn7 2/2 Running 2 127d
pod/prometheus-kube-state-metrics-77ddf69b4-2srfh 1/1 Running 1 127d
pod/prometheus-node-exporter-grbm2 1/1 Running 0 126d
pod/prometheus-node-exporter-klfzk 1/1 Running 2 (69d ago) 127d
pod/prometheus-node-exporter-vm6wd 1/1 Running 4 127d
pod/prometheus-pushgateway-969d94d55-tm9f2 1/1 Running 1 127d
pod/prometheus-server-5b87dc7765-gmskr 2/2 Running 3 127d
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
service/grafana NodePort 10.97.75.149 <none> 80:30001/TCP 154d
service/prometheus-alertmanager NodePort 10.102.238.47 <none> 80:30000/TCP 127d
service/prometheus-kube-state-metrics ClusterIP 10.110.90.234 <none> 8080/TCP 127d
service/prometheus-node-exporter ClusterIP 10.101.239.48 <none> 9100/TCP 127d
service/prometheus-pushgateway ClusterIP 10.98.80.163 <none> 9091/TCP 127d
service/prometheus-server NodePort 10.96.192.234 <none> 80:30002/TCP 127d
http://{masterNodeIP}:30001 주소를 통해서 정상적으로 그라파나 화면이 동작하는 것을 확인 할 수 있다
초기 아이디와 비번은 admin:admin
이다
참고로 비밀번호를 잊어버려서 초기화가 필요하면 다음과 같은 커멘드로 초기화 할 수 있다
kubectl exec -it grafana-6dc4875968-278jh grafana-cli admin reset-admin-password admin
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
service/prometheus-server NodePort 10.96.192.234 <none> 80:30002/TCP 127d
그라파나의 여러 장점 중에 하는 다양한 대시보드 마켓이 있고 필요한 서비스나 솔루션에서 나오는 exporter 데이터를 활용한 대시보드 들이 다양하다는 것이다.
이러한 대시보드를 찾아서 import 해서 나에게 필요한 대시보드들을 만들 수 있다
kubernetes 관련 대시보드들을 추가해보겠다.
대시보드를 마켓에서 검색한다
필요 대시보드에 들어가서 ID를 확인한다
Grafana Dashboard import를 클릭한다
검색한 ID를 입력 하고 datasource를 선택한다
대시보드를 확인한다, 원하는 쿠버네티스 모니터링 대시보드가 추가 되었다.
K8S Dashboard : 13770
Loki Dashboard : 13639
Node Dashboard : 11074
Container ashboard : 13946, 14282
DGCM Dashboard : 12239
모니터링 시스템에서 가장 중요한 기능 중에 하나가 이상 상황이 발생 했을 때 알림을 받고 조치를 취하게하는 것이다 생각한다
프로메테우스 기능 중에 Alertmanager가 있고 다양한 레퍼런스가 존재하여서 사용하기에 좋지만
이번 포스팅에선 그라파나 기능 중 Alert에 대해서 소개하려고 한다.
절대 Alertmanager 까지의 포스팅이 귀찮아서가 아니다
Alert을 받기 위한 여러 방법이 있겠지만 우리 회사에선 Slack 메신저를 사용하고 있기에 Slack 으로의 알림을 설정하고 동작하는 것을 확인해 보도록 하겠다
오늘도 많은 알림이 왔고 조치 또는 이슈가 해결 된 이후에 해결 된 알림이 온것을 확인 할 수 있다.
Slack 알림을 위해서 Slack 설정을 진행한다. Alert 메뉴에서 Contact points를 클릭해서 설정 화면으로 들어간다
New Contact point를 클릭 후 알림을 받을 chanel에 대한 webhook url을 입력 하도록 한다
입력 후 알림 Test를 진행해 본다
정상적으로 알림이 설정 되고 채널에 전달 되는 것을 확인 할 수 있다.
이제 대시보드에서 여러 패널 중 알림을 받고자 하는 패널에서 설정을 진행해 보도록 하겠다. 패널 타이틀 부분을 클릭하면 다음과 메뉴가 나오고 Edit 을 클릭하면 패널 설정 화면으로 이동한다.
패널 설정 화면에서 중간 부분의 Alert 탭을 클릭한다( 이미 설정이 되어 있어서 (1)로 표시가 된다 )
Create alert rule from this panel을 클릭해서 alert의 조건을 설정해 준다
패널에서 보여주는 데이터를 기준으로 위험 값 또는 리스크 범주를 지정해서 그 기준에 부합(?) 할 경우 알림이 기존 contact point로 등록된 방식으로 전달 할 수 있다.
alert설정이 끝나면 대시보드 패널에서 그린 모양의 하트가 추가 된 것을 확인 할 수 있다. 조건이 걸린 패널이며 현재 alert상태가 아님을 표시한다. alert 발생하는 경우 빨간색의 하트가 표시된다
PKOS2기 4주차 스터디를 진행하면서 학습한 내용을 회사에 구축한 시스템을 활용해서 정리해 보았다.
모니터링 시스템은 보안과 함께 회사내에서 꼭 필요한 시스템이라고 생각한다.
스터디를 통해서 더 간편하고 시스템 환경에 맞는 구성 방법에 대해서 스터디 하였고 실습을 진행해 보았다.
오늘 정리 한 위 내용들이 글을 읽고 있는 분들에게 조금이나마 도움이 되었으면 하는 바람이고
유료 시스템도 많지만 다양한 OSS 솔루션을 활용해서 시스템을 구축하는 것도 필요한 경험이라고 생각한다.