diff --git a/z2/README.md b/z2/README.md index e69de29..46382a0 100644 --- a/z2/README.md +++ b/z2/README.md @@ -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://: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 +``` diff --git a/z2/prepare-app.sh b/z2/prepare-app.sh new file mode 100644 index 0000000..a637159 --- /dev/null +++ b/z2/prepare-app.sh @@ -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 diff --git a/z2/start-app.sh b/z2/start-app.sh new file mode 100644 index 0000000..e0228fa --- /dev/null +++ b/z2/start-app.sh @@ -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 diff --git a/z2/stop-app.sh b/z2/stop-app.sh new file mode 100644 index 0000000..cd2392c --- /dev/null +++ b/z2/stop-app.sh @@ -0,0 +1,3 @@ +#!/bin/bash +helm uninstall tasks-app -n application +kubectl delete namespace application