# Bank API – Kubernetes projekt > Základ projektu a zdrojový kód aplikácie pochádza z repozitára [https://github.com/miracleqxz/K8s_project](https://github.com/miracleqxz/K8s_project). > Dokumentácia bola vypracovaná s pomocou umelej inteligencie (AI). --- ## Opis aplikácie Aplikácia **Bank API** je jednoduchý bankový systém dostupný cez webové rozhranie. Umožňuje používateľom: - registrovať sa, - pridávať peniaze na účet, - prevádzať peniaze medzi účtami, - kontrolovať zostatok, - brať a splácať pôžičky. Frontend tvorí statická HTML stránka obsluhovaná nginx. Backend je REST API napísané v Pythone (Flask + Gunicorn). Dáta sú uložené v databáze MongoDB. --- ## Zoznam použitých kontajnerov | Kontajner | Obraz | Opis | |---|---|---| | backend | `ghcr.io/miracleqxz/k8s_project/backend:latest` | Python Flask API, spúšťané cez Gunicorn na porte 5000 | | frontend | `ghcr.io/miracleqxz/k8s_project/web:latest` | nginx server so statickou HTML stránkou, proxy na backend | | mongodb | `mongo:latest` | NoSQL databáza pre ukladanie používateľov a transakcií | --- ## Zoznam Kubernetes objektov | Objekt | Názov | Opis | |---|---|---| | Namespace | `application` | Izolovaný priestor pre všetky objekty aplikácie | | Deployment | `backend` | Nasadenie backendovej aplikácie s 2 replikami | | Deployment | `frontend` | Nasadenie frontendovej aplikácie s 1 replikou | | StatefulSet | `mongodb` | Stavové nasadenie MongoDB databázy | | Service | `backend` | ClusterIP služba pre backend na porte 5000 | | Service | `frontend` | NodePort služba pre frontend na porte 30856 | | Service | `mongodb` | ClusterIP služba pre MongoDB na porte 27017 | | ConfigMap | `backend-config` | Konfigurácia premenných prostredia pre backend (URL databázy) | | ConfigMap | `nginx-config` | Konfigurácia nginx servera | | PersistentVolume | `mongodb-pv` | Trvalý zväzok 1Gi na ceste `/opt/mongodb-data` | | PersistentVolumeClaim | `mongodb-pvc` | Požiadavka na trvalý zväzok pre MongoDB | --- ## Opis virtuálnych sietí a zväzkov **Sieť:** Všetky objekty komunikujú v rámci Kubernetes internej siete v namespace `application`. Backend a MongoDB sú dostupné len interne cez ClusterIP. Frontend je dostupný externe cez NodePort `30856`. Nginx proxy preposiela požiadavky na `/api/` na backend service (`backend:5000`). **Zväzky:** - `mongodb-pv` – `hostPath` zväzok umiestnený na `/opt/mongodb-data` na node. Politika zachovania `Retain`. - `mongodb-pvc` – požiadavka na 1Gi zväzok priradená k `mongodb-pv`. --- ## Opis konfigurácie kontajnerov **Backend:** - Premenná prostredia `MONGO_HOST` načítaná z ConfigMap `backend-config` s hodnotou `mongodb://mongodb:27017`. - Pamäťový limit: 200Mi, požiadavka: 100Mi. - `imagePullPolicy: Always` pre vždy aktuálny obraz. **Frontend:** - Konfiguračný súbor nginx je mountovaný z ConfigMap `nginx-config` do `/etc/nginx/nginx.conf`. - Pamäťový limit: 200Mi, požiadavka: 100Mi. **MongoDB:** - Dáta sú uložené v PersistentVolume na `/data/db`. --- ## Návod na prácu s aplikáciou ### Požiadavky - Docker - kubectl nakonfigurovaný na Kubernetes cluster - Helm 3 ### Príprava (zostavenie a nahranie obrazov) ```bash chmod +x prepare-app.sh ./prepare-app.sh ``` ### Spustenie aplikácie ```bash chmod +x start-app.sh ./start-app.sh ``` ### Zastavenie a zmazanie aplikácie ```bash chmod +x stop-app.sh ./stop-app.sh kubectl delete pv mongodb-pv ``` --- ## Zobrazenie aplikácie v prehliadači Po spustení otvorte prehliadač a zadajte adresu: ``` http://:30856 ``` IP adresu nodu zistíte príkazom: ```bash kubectl get nodes -o wide ``` --- ## Štruktúra projektu ``` z2/ ├── backend/ # Python Flask aplikácia ├── frontend/ # Statická HTML stránka ├── nginx/ # Nginx Dockerfile a konfigurácia ├── tasks-app/ # Helm chart ├── prepare-app.sh # Skript na zostavenie obrazov ├── start-app.sh # Skript na spustenie aplikácie └── stop-app.sh # Skript na zastavenie aplikácie ```