You've already forked vk26-onlinehasherapp
init
This commit is contained in:
@@ -0,0 +1,91 @@
|
||||
# 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
|
||||
```
|
||||
Reference in New Issue
Block a user