| .. | ||
| backend | ||
| frontend | ||
| deployment.yaml | ||
| namespace.yaml | ||
| prepare-app.sh | ||
| README.md | ||
| service.yaml | ||
| start-app.sh | ||
| statefulset.yaml | ||
| stop-app.sh | ||
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 NodePort30080.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-servicepre pristup z prehliadacabackend-servicepre komunikaciu frontendu s backendompostgres-servicepre komunikaciu backendu s databazou
Trvale data sa ukladaju pomocou:
PersistentVolume postgres-pvPersistentVolumeClaim 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-serviceDB_PORT=5432DB_USER=userDB_PASSWORD=passwordDB_NAME=mydb
PostgreSQL kontajner je nakonfigurovany takto:
POSTGRES_USER=userPOSTGRES_PASSWORD=passwordPOSTGRES_DB=mydb
Ako aplikaciu pripravit, spustit, zastavit a odstranit
Prikazy spustite z adresara z2:
chmod +x prepare-app.sh start-app.sh stop-app.sh
./prepare-app.sh
./start-app.sh
Na zastavenie a odstranenie aplikacie pouzite:
./stop-app.sh
Ako aplikaciu pozastavit
Aplikaciu je mozne pozastavit zmenou poctu replik deploymentov a statefulsetu na nulu:
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:
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:
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:
kubectl port-forward service/frontend-service 8080:80 -n zkt26-z2
Potom otvorte:
http://localhost:8080