zkt26/z2/README.md
Bohdan Kapliuk a40f28696a kapliuk2
2026-04-22 16:09:21 +03:00

119 lines
3.8 KiB
Markdown

# Zadanie 2 - webova aplikacia v Kubernetes
Tento projekt nasadzuje jednoduchu webovu aplikaciu do Kubernetes. Pouzivatel zada meno v prehliadaci, frontend ho odosle backend API a backend ulozi hodnotu do PostgreSQL. Ulozene mena sa potom znova zobrazia v prehliadaci.
## Pouzite kontajnery
- `z2-frontend:latest` - vlastny obraz Nginx, ktory obsluhuje staticky frontend a proxyuje API poziadavky na backendovu sluzbu.
- `z2-backend:latest` - vlastny obraz Node.js a Express API, ktory uklada a cita pouzivatelske udaje z PostgreSQL.
- `postgres:15-alpine` - databazovy kontajner bezici v StatefulSete s trvalym uloziskom.
## Objekty Kubernetes
- `Namespace zkt26-z2` - oddeluje vsetky prostriedky aplikacie do jedneho namespace.
- `Deployment backend-deployment` - spusta backend API kontajner.
- `Deployment frontend-deployment` - spusta frontendovy Nginx kontajner.
- `Service backend-service` - spristupnuje backend vo vnutri klastra.
- `Service frontend-service` - spristupnuje frontend cez NodePort `30080`.
- `Service postgres-service` - stabilny sietovy endpoint pre PostgreSQL.
- `PersistentVolume postgres-pv` - hostitelske ulozisko pre data PostgreSQL.
- `PersistentVolumeClaim postgres-pvc` - pripaja ulozisko pre databazovy pod.
- `StatefulSet postgres-statefulset` - spusta PostgreSQL s trvalymi datami.
## Siete a zvazky
Aplikacia pouziva predvolene sietovanie klastra Kubernetes. Pody medzi sebou komunikuju cez Kubernetes sluzby:
- `frontend-service` pre pristup z prehliadaca
- `backend-service` pre komunikaciu frontendu s backendom
- `postgres-service` pre komunikaciu backendu s databazou
Trvale data sa ukladaju pomocou:
- `PersistentVolume postgres-pv`
- `PersistentVolumeClaim postgres-pvc`
Zvazok pouziva `hostPath` na adrese `/tmp/zkt26-postgres-data`, takze data databazy ostanu dostupne aj po restarte podu.
## Konfiguracia kontajnerov
Frontendovy kontajner je zalozeny na Nginx a obsahuje vlastny `nginx.conf`, ktory proxyuje poziadavky `/api/*` na backendovu sluzbu.
Backendovy kontajner pouziva pre pripojenie k databaze tieto premenne prostredia:
- `DB_HOST=postgres-service`
- `DB_PORT=5432`
- `DB_USER=user`
- `DB_PASSWORD=password`
- `DB_NAME=mydb`
PostgreSQL kontajner je nakonfigurovany takto:
- `POSTGRES_USER=user`
- `POSTGRES_PASSWORD=password`
- `POSTGRES_DB=mydb`
## Ako aplikaciu pripravit, spustit, zastavit a odstranit
Prikazy spustite z adresara `z2`:
```bash
chmod +x prepare-app.sh start-app.sh stop-app.sh remove-app.sh
./prepare-app.sh
./start-app.sh
```
Na zastavenie aplikacie pouzite:
```bash
./stop-app.sh
```
Na uplne odstranenie aplikacie pouzite:
```bash
./remove-app.sh
```
## Ako aplikaciu pozastavit
Aplikaciu je mozne pozastavit zmenou poctu replik deploymentov a statefulsetu na nulu:
```bash
kubectl scale deployment frontend-deployment --replicas=0 -n zkt26-z2
kubectl scale deployment backend-deployment --replicas=0 -n zkt26-z2
kubectl scale statefulset postgres-statefulset --replicas=0 -n zkt26-z2
```
Na jej opatovne spustenie:
```bash
kubectl scale deployment frontend-deployment --replicas=1 -n zkt26-z2
kubectl scale deployment backend-deployment --replicas=1 -n zkt26-z2
kubectl scale statefulset postgres-statefulset --replicas=1 -n zkt26-z2
```
## Ako otvorit webovu aplikaciu
Po spusteni aplikacie v standardnom Kubernetes prostredi otvorte prehliadac na adrese:
- `http://localhost:30080`
Ak pouzivate Minikube vo WSL s Docker driverom, skutocnu URL pre prehliadac ziskate pomocou:
```bash
minikube service frontend-service -n zkt26-z2 --url
```
Nechajte tento terminal otvoreny a otvorte vypisanu URL v prehliadaci.
Ak vase Kubernetes prostredie nespristupnuje NodePort priamo na localhoste alebo chcete pevny lokalny port, pouzite:
```bash
kubectl port-forward service/frontend-service 8080:80 -n zkt26-z2
```
Potom otvorte:
- `http://localhost:8080`