119 lines
3.8 KiB
Markdown
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`
|