zkt25/z2/README.md

207 lines
6.0 KiB
Markdown

Sledovanie výdavkov - nasadenie Kubernetes
==========================================
Popis aplikácie
---------------
Expense Tracker je webová aplikácia na sledovanie osobných financií a správu výdavkov. Aplikácia umožňuje používateľom:
- Pridávať nové transakcie s uvedením sumy, typu (príjem/výdavok) a kategórie
- Zobraziť históriu transakcií
- Analyzovať výdavky podľa kategórií
- Sledovať zostatok na účte
Architektúra aplikácie
----------------------
Aplikácia je postavená na zásobníku MERN (MongoDB, Express.js, React, Node.js) a pozostáva z troch hlavných komponentov:
1. **Frontend** - klientska strana vyvinutá v Reacte pomocou Vite na rýchle zostavovanie
2. **Backend** - strana servera vyvinutá v Node.js pomocou Express.js
3. **MongoDB** - databáza na ukladanie informácií o transakciách
Zoznam použitých kontajnerov
----------------------------
1. **expense-tracker-frontend** - kontajner s klientskou časťou aplikácie
- Základný obraz: node:20-bookworm-slim
- Úloha: Slúži ako používateľské rozhranie aplikácie
- Port: 5173
2. **expense-tracker-backend** - kontajner so serverovou časťou aplikácie
- Základný obraz: node:20-bookworm-slim
- Úloha: Poskytuje API na prácu s údajmi o transakciách
- Port: 5000
3. **mongo** - kontajner s databázou MongoDB
- Základný obraz: mongo:latest
- Úloha: Ukladá údaje aplikácie
- Port: 27017
Objekty Kubernetes a ich popis
------------------------------
1. **Namespace**
- Názov: expense-tracker
- Úloha: Izolovaný menný priestor pre všetky zdroje aplikácie
2. **Deployment**
- Frontend Deployment: Spravuje repliky Pod s klientskou stranou aplikácie
- Backend Deployment: Spravuje repliky Pod so serverovou časťou aplikácie
3. **StatefulSet**
- MongoDB StatefulSet: Spravuje Pod s databázou MongoDB, ukladá stav a údaje
4. **Service**
- Frontend Service (NodePort): Poskytuje prístup ku klientskej strane aplikácie z prostredia mimo klastra
- Backend Service (ClusterIP): Poskytuje prístup k rozhraniu API v rámci klastra
- Služba MongoDB (ClusterIP): Poskytuje prístup k databáze v rámci klastra
5. **PersistentVolume a PersistentVolumeClaim**
- MongoDB PV/PVC: Poskytuje trvalé ukladanie údajov MongoDB
Sieťová infraštruktúra
----------------------
Aplikácia využíva nasledujúce sieťové prostriedky:
1. **Služby**
- Frontend Service (NodePort): Prístup z vonkajšej strany klastra cez port pridelený systémom Kubernetes (30000-32767)
- Backend Service (ClusterIP): Prístup zvnútra klastra cez `backend-service:5000`
- MongoDB Service (ClusterIP): Prístupné v rámci clusteru pod názvom `mongodb-service:27017`
2. **Intra-cluster DNS System**
- Umožňuje aplikačným komponentom odkazovať na seba navzájom pomocou názvov služieb namiesto IP adries
Úložiská údajov
---------------
Aplikácia používa trvalé úložisko pre databázu MongoDB:
1. **PersistentVolume**
- Typ: HostPath (pre lokálny vývoj)
- Veľkosť: 1Gi
- HostPath: `/mnt/data/mongodb`
2. **PersistentVolumeClaim**
- Požaduje 1Gi trvalého úložiska
Konfigurácia kontajnera
-----------------------
1. **Frontend**
- Prostredie: Na vývoj sa používa Vite Dev Server s možnosťou `--host` pre externý prístup
- Zdroje: Limity CPU: 0,5, Pamäť: 512Mi; Požiadavky CPU: 0,2, Pamäť: 256Mi
2. **Backend**
- Prostredie:
- PORT: 5000
- MONGO_URI: mongodb://mongodb-service:27017/expense-tracker
- Zdroje: Limity CPU: 0,5, Pamäť: 512Mi; Požiadavky CPU: 0,2, Pamäť: 256Mi
3. **MongoDB**
- Žiadna ďalšia konfigurácia, používa sa štandardný obraz
- Údaje sú uložené v trvalom úložisku
- Zdroje: Limity CPU: 0,5, Pamäť: 512Mi; Požiadavky CPU: 0,2, Pamäť: 256Mi
Pokyny na spustenie
-------------------
### Predpoklady
1. Nainštalovaný a nakonfigurovaný klaster Kubernetes (na lokálny vývoj môžete použiť Minikube)
2. Nainštalovaný a nakonfigurovaný kubectl
3. Docker
### Príprava aplikácie
1. Spustite prípravný skript:
```
chmod +x prepare-app.sh
./prepare-app.sh
```
Skript vykoná nasledujúce činnosti:
- Vytvorí adresár na uloženie údajov MongoDB
- Vytvorí obrazy Docker pre Frontend a Backend
### Spustenie aplikácie
1. Spustite spúšťací skript:
```
chmod +x start-app.sh
./start-app.sh
```
Skript vykoná nasledujúce kroky:
- Vytvorí menný priestor pre sledovanie výdavkov
- Použije všetky konfiguračné súbory Kubernetes
- Počká na spustenie všetkých komponentov
- Vypíše adresu URL na prístup k aplikácii
### Zastavenie aplikácie
1. Ak chcete zastaviť aplikáciu, vykonajte:
```
chmod +x stop-app.sh
./stop-app.sh
```
Skript vykoná nasledujúce činnosti:
- Odstráni všetky aplikačné zdroje nasadené v systéme Kubernetes
### Prístup k aplikácii
Po úspešnom spustení získate vo výstupe skriptu start-app.sh adresu URL na prístup k aplikácii. Zvyčajne to bude niečo také:
```
http://192.168.49.2:30080
```
Kde:
- 192.168.49.2 - IP adresa uzla klastra (pre Minikube je to IP adresa virtuálneho počítača)
- 30080 - pridelený NodePort pre službu Frontend
Ďalšie informácie
-----------------
- Zobrazenie všetkých zdrojov v mennom priestore sledovača výdavkov:
```
kubectl get all -n expense-tracker
```
- Zobrazenie protokolov komponentov:
```
kubectl logs deployment/frontend -n expense-tracker
kubectl logs deployment/backend -n expense-tracker
kubectl logs statefulset/mongodb -n expense-tracker
```
- Prístup do kontajnerového shellu:
```
kubectl exec -it deployment/frontend -n expense-tracker -- sh
kubectl exec -it deployment/backend -n expense-tracker -- sh
kubectl exec -it statefulset/mongodb -n expense-tracker -- sh
```