138 lines
4.1 KiB
Markdown
138 lines
4.1 KiB
Markdown
# 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://<IP-adresa-node>: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
|
||
```
|