You've already forked vk26-onlinehasherapp
91 lines
4.7 KiB
Markdown
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
|
|
``` |