zkt26/z2/README.md
2026-04-22 21:15:18 +02:00

138 lines
4.1 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

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