107 lines
4.6 KiB
Markdown
107 lines
4.6 KiB
Markdown
# 2025-capstone
|
||
작성: AI / 수정: nkey
|
||
|
||
라즈베리파이 k3s 클러스터(마스터/워커) + 모니터링/알람 + 자동 조치(승인/검증 포함) 데모를 위한 조직 레포입니다.
|
||
(Tailscale VPN 환경에서 k3s, Oracle 서버(n8n/WMS/DB), GPU 서버(Ollama/llama3)를 연동)
|
||
|
||
## What’s Inside
|
||
- **k3s 클러스터**
|
||
- **master node**: 클러스터 관리 + 매니페스트 적용(데모/모니터링 K8s 리소스)
|
||
- **worker service node**: 서비스 실행 노드(디스크 채우기 데모 Pod exec)
|
||
- **worker monitor node**: 모니터링 스택(Prometheus/Alertmanager/Loki/Grafana + auto action module)
|
||
- **Oracle Server**
|
||
- Web Monitoring Service(WMS)
|
||
- n8n hosting
|
||
- PostgreSQL
|
||
- **GPU Server**
|
||
- Ollama + llama3 (솔루션 생성/검증)
|
||
|
||
## Docs
|
||
- 각 레포지토리별 자세한 실행/구성은 해당 레포의 README를 참고하세요.
|
||
- `rpi-master-node/README.md`
|
||
- `rpi-worker-monitor-node/README.md`
|
||
- `rpi-worker-service-node/README.md`
|
||
- `oracle-server/README.md`
|
||
|
||
## Architecture
|
||
|
||
### High-level (요약)
|
||

|
||
|
||
### End-to-end Flow (상세)
|
||

|
||
|
||
### n8n Flow
|
||

|
||
|
||
## Repositories
|
||
- `rpi-master-node`
|
||
- k3s 매니페스트(예: `k3s-manifests/disk-fill-demo.yaml`, `k3s-manifests/aam-deploy.yaml`)
|
||
- K8s 기반 모니터링 스택 매니페스트(`k3s-monitoring/*`)
|
||
- kube-state-metrics 매니페스트(`kube-state-metrics/*`)
|
||
- `rpi-worker-monitor-node`
|
||
- `monitoring/docker-compose.yml` 기반 Prometheus/Alertmanager/Loki/Grafana 구동(워커 모니터 노드)
|
||
- `rpi-worker-service-node`
|
||
- 서비스 워커 노드(레포가 비어있을 수 있음)
|
||
- **중요:** 디스크 채우기 데모는 **master 노드 레포의 `disk-fill-demo.yaml`을 배포**한 뒤, **service 노드에서 Pod에 exec**하여 스크립트를 실행합니다.
|
||
- `oracle-server`
|
||
- n8n으로 자동화 워크플로우 구현
|
||
- PHP 기반 Laravel 프레임워크를 활용하여 개발한 웹 모니터링 서비스(WMS)
|
||
|
||
## Quickstart (Demo: DiskAlmostFull 알람 → 자동 조치 → 검증)
|
||
### 1) (Master) 디스크 채우기 데모 배포
|
||
```bash
|
||
# master 노드에서
|
||
git clone https://nkeystudy.site/gitea/2025-capstone/rpi-master-node.git
|
||
cd rpi-master-node
|
||
|
||
kubectl apply -f k3s-manifests/disk-fill-demo.yaml
|
||
kubectl get pod -n alert-service -l app=disk-fill-demo
|
||
kubectl get svc -n alert-service
|
||
```
|
||
|
||
### 2) (Master -> Service Worker) Pod exec로 디스크 채우기 / 정리 실행
|
||
> 아래 명령은 **Master 노드**에서 실행되는 시나리오를 기준으로 합니다.
|
||
```bash
|
||
# Pod 이름 확인
|
||
POD=$(sudo kubectl get pod -n alert-service -l app=disk-fill-demo -o jsonpath='{.items[0].metadata.name}')
|
||
|
||
# 절대경로로 실행
|
||
sudo kubectl exec -n alert-service "$POD" -- /usr/local/bin/fill_disk_safe.sh /tmp/disk-fill-demo 90 1024
|
||
|
||
# 상대경로로 실행
|
||
sudo kubectl exec -n alert-service "$POD" -- fill_disk_safe.sh /tmp/disk-fill-demo 90 1024
|
||
|
||
# 수동 해결(cleanup 셸 스크립트 실행)
|
||
sudo kubectl exec -n alert-service "$POD" -- cleanup_disk.sh /tmp/disk-fill-demo
|
||
```
|
||
|
||

|
||
|
||
|
||
|
||
### 3) (UI) 웹 페이지에서 확인
|
||
- disk full alert prometheus로 확인(2_check_disk_full_demo_result_in_prometheus)
|
||

|
||
|
||
- 해결책 생성 과정 워크플로우 동작 확인(3_check_make_solution_n8n_workflow)
|
||

|
||
|
||
- 해결책 거절 및 새로운 해결책 확인(4_reject_solution_and_check_other_solution)
|
||

|
||
|
||
- 해결책 검증(5_verify_solution)
|
||

|
||
|
||
- 해결책 적용 및 결과 확인(6_apply_solution_and_check_result)
|
||

|
||
|
||
|
||
### 4) (Logs) 자동 조치 모듈 로그 확인
|
||
- SSH로 대상 호스트에 접속해 precheck/action 수행, 결과를 Alert API로 전달하는 흐름 확인
|
||
- check_apply_solution_in_monitor_node(해결책 적용 수행 노드):
|
||

|
||
|
||
- check_apply_solution_in_service_node(해결책 적용 대상 노드):
|
||

|