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 ```