207 lines
6.0 KiB
Markdown
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
|
|
|
|
``` |