add scripts and documentation

This commit is contained in:
Pavel Umansky 2026-04-22 21:15:18 +02:00
parent 30fbf5a66a
commit 5591901e40
4 changed files with 148 additions and 0 deletions

View File

@ -0,0 +1,137 @@
# 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
```

5
z2/prepare-app.sh Normal file
View File

@ -0,0 +1,5 @@
#!/bin/bash
docker build --no-cache -t ghcr.io/miracleqxz/k8s_project/backend:latest ./backend
docker build --no-cache -t ghcr.io/miracleqxz/k8s_project/web:latest -f ./nginx/Dockerfile .
docker push ghcr.io/miracleqxz/k8s_project/backend:latest
docker push ghcr.io/miracleqxz/k8s_project/web:latest

3
z2/start-app.sh Normal file
View File

@ -0,0 +1,3 @@
#!/bin/bash
kubectl create namespace application --dry-run=client -o yaml | kubectl apply -f -
helm install tasks-app ./tasks-app -n application

3
z2/stop-app.sh Normal file
View File

@ -0,0 +1,3 @@
#!/bin/bash
helm uninstall tasks-app -n application
kubectl delete namespace application