1
0
Files
2026-05-14 19:56:24 +02:00

91 lines
4.7 KiB
Markdown

# VK26 - Skúška #1
## Zadanie
Vytvorte webovú aplikáciu, do ktorej viete nahrať súbor, ktorý následne ľubovoľným spôsobom spracujete a výsledok uloží do druhého súboru.
Nahraté súbory musíte ukladať do priečinka `input` a výsledné súbory do priečinka `output`.
## Riešenie
Toto riešenie je aplikácia v Pythone pomocou frameworku Snowflake Streamlit.
Nahraté súbory sa ukladajú do priečinka `input` a následne sa vypočíta hash súboru pomocou nastavenéného algoritmu (MD5 alebo SHA256). Výsledný hash sa uloží do súboru v priečinku `output` s názvom `<názov_súboru>.<hash>` (mapr. `input/example.txt.md5`).
## Obsah
- [`main.py`](main.py) - hlavný súbor aplikácie
- [`initstuff.py`](initstuff.py) - inicializačný skript pre kubernetes init kontajner
## Spustenie
### Vytvorenie obrazu
Naprv je potrebné vytvoriť Docker obraz z tohto repozitára. Keďže neskôr budeme pushovať na Docker Hub, je potrebné používať vhodný názov pre obraz. Vhodný formát je `<docker-hub-username>/<nazov-aplicacie>` Môžete použiť nasledujúci príkaz:
```bash
docker build -t br0kenpixel/onlinefilehasherapp .
```
### Push na Docker Hub
Po vytvorení obrazu je potrebné ho pushnúť na Docker Hub, aby sme ho mohli použiť v Kubernetes. Použite nasledujúci príkaz:
```bash
docker push br0kenpixel/onlinefilehasherapp
```
Nezabudnite sa prihlásiť do Docker Hub pomocou `docker login` pred pushnutím obrazu.
### Spustenie v Kubernetes
Najprv vytvoríme namespace pre našu aplikáciu:
```bash
kubectl create namespace exam-varga
```
Následne aplikujeme každú konfiguráciu v [`k8s`](k8s) priečinku v nasledujúcom poradí:
```bash
kubectl apply -f configmap.yaml -n exam-varga
kubectl apply -f pv.yaml -n exam-varga
kubectl apply -f pv2.yaml -n exam-varga
kubectl apply -f pc.yaml -n exam-varga
kubectl apply -f pc2.yaml -n exam-varga
kubectl apply -f svc.yaml -n exam-varga
kubectl apply -f deployment.yaml -n exam-varga
```
Teotericky by malo stačiť iba `deployment.yaml`, ale mne to nešlo.
### Vysvetlenie Kubernetes konfigurácie
Aplikácia používa 2 volumy na uloženie nahratých súborov a výsledných hashov. Pre každý volume je vytvorený claim.
Porty sú nakonfigurované v `svc.yml` nasledovne:
- `port` - port, na ktorom beží aplikácia v kontejneri
- `targetPort` - port, pomocou ktorého iné pody v clusteru komunikujú s aplikáciou (nevyužíva sa v tomto prípade)
- `nodePort` - port, na ktorom je služba dostupná z clusteru (t.j. z vášho počítača)
### Prístup k aplikácii
Aplikácia je dostupná na porte 30000. Ako IP adresu použite IP adresu vášho Kubernetes clusteru. Viac info nižšie.
## Konfigurácia Kubernetes clusteru
Pre kubernetes je potrebné nakonfigurovať cluster (sada nód - alebo kvázy servery). V Docker Desktop je možné použiť integrovaný Kubernetes cluster.
Docker Desktop odporúčam inštalovať iba na Windows a macOS. Pre Linux je lepšie použiť iba Docker Engine.
Ako kubernetes cluster môžete použiť nástroj [Minikube](https://minikube.sigs.k8s.io/docs/), ktorý je možné nainštalovať na Linux. Minikube poskytuje jednoduchý spôsob, ako spustiť Kubernetes cluster lokálne.
V prípade Linuxu Minikube má rôzne backendy na virtualizáciu clusteru. Najlepšie je použiť `kvm2` avšak musíte mať zapnutý modul `kvm_intel` alebo `kvm_amd` v závislosti od vášho procesora.
Toto môže byť náročné, nakoľko potrebujete zmeniť boot parametre kernelu.
Cluster sa následne ovláda pomocou `kubectl`, ktorý je možné nainštalovať podľa [oficiálnej dokumentácie](https://kubernetes.io/docs/tasks/tools/).
## Získanie IP adresy clusteru
V prípade Windowsu je potrebné využiť port forwarding pomocou `kubectl port-forward` príkazu. Ak vaše riešenie pozostáva zo zvlášť backendu a frontendu, je potrebné použiť port forwarding pre oba komponenty.
V prípade Minikube s backendom `kvm2` **nie** je potrebné používať port forwarding, pretože Minikube poskytuje prístup k službám automaticky cez `NodePort`.
IP adresu služby (bežiaca aplikácia) získate pomocou nasledujúceho príkazu:
```bashbash
minikube service onlinefilehasher-service -n exam-varga --url
```
Príkaz vráti URL adresu, ktorú môžete použiť na prístup k aplikácii.
## Využitie obrazu
V prípade Minikube obraz nie je možné využiť z lokálneho počítaťa pretože cluster bežiaci v Minikube je vo virtuálnom stroji a má svoju vlastnú inštaláciu Dockeru. Ak vybuildujete obraz pomocou `docker build` tak bude dostupný iba v Dockeru na vašom počítači, ale nie v Dockeru v Minikube.
## Užitočné príkazy
- Zmazanie podu:
```bash
kubectl -n exam-varga delete pod onlinefilehasher-xxxx-xxxx
```