KOČKY vs DOGS + FLASK + DOCKER + KUBERNETES

Přemýšleli jste někdy nad tím, jak vytvořit webovou aplikaci Machine Learning a implementovat ji v měřítku a spravovat ji pro všechny v cloudu? Přišli jste na správné místo. V tomto příspěvku se seznámím se základními pojmy Kontejnerizace vaší webové aplikace ML a nasazením do cloudu Google pomocí kebernetes engine.

Celý kód najdete zde. Pro rychlé ukázky navštivte http://130.211.229.36/.(upload pouze obrázky jpg)

Předpoklady = Porozumění dokům

Nejprve to, co jsou kubernety? Kubernetes je otevřený zdrojový orchestrační systém pro kontejnerové doky, zpracovává plánování do uzlů ve výpočetním klastru a aktivně řídí pracovní zatížení, aby zajistil, že jejich stav odpovídá záměrům uživatele deklarovaným, pomocí konceptu štítků a lusků seskupuje kontejnery, které tvoří aplikace do logických jednotek pro snadnou správu a objevování.

Kubernetes Architecture

Přehled clusteru Kubernetes s Master a Work uzly. Všechny aktivity jsou řízeny z hlavního uzlu, který má spuštěné API. Kubectl je rozhraní příkazového řádku pro spouštění příkazů proti klastrům Kubernetes.

Každý uzel je označen a opatřen značkami. Vaše kontejnerizovaná aplikace běží uvnitř podu v uzlu a je nasazena v hlavním uzlu.

NODE

Toto je uzel s mnoha pody s jejich IP adresami pod.

Lusky - Jedná se o základní jednotku architektury obvykle obsahující 2 kontejnery. Každému podu v Kubernetes je v klastru přiřazena jedinečná IP adresa podu a lze ji spravovat ručně pomocí API Kubernetes. Pod může definovat svazek, například adresář lokálního disku nebo síťový disk, a vystavit jej kontejnerům v pod.

A konečně přijde Vystavení aplikace pomocí služby. Když pracovní uzel zemře, jsou ztraceny i lusky běžící na uzlu. Sada replik by pak mohla dynamicky posunout cluster zpět do požadovaného stavu vytvořením nových modulů Pods, aby zůstala vaše aplikace v chodu. To se provádí prostřednictvím souboru service.yaml.

Pro lepší pochopení infrastruktury kubernetů doporučuji video, které vysvětluje všechny pojmy zjednodušeným způsobem.

Začněme naší webovou aplikací.

Vycvičil jsem svůj model neuronové sítě a uložil jej do JSON a také uložil závaží do souboru h5. Napsal jsem use_model.py pro načtení vyškoleného modelu z JSON a předpovídání nového obrazu.

K vytvoření webové aplikace jsem použil FLASK. Aplikace je jednoduchá, vezme obrázek a předpovídá kočku nebo psa pomocí use_model.py a vrací, zda „Jsi DOG“ nebo „Jsi KOCOUR“. App.py vypadá takto (při vytváření kontejneru jsem změnil hostitele = 0.0.0.0).

Nejdůležitější částí je napsat Dockerfie, aby bylo možné sestavit obrázek doku.

Spusťte příkazy apt-get update && install python3…

Zkopírujte svůj aktuální adresář. pip install requirements.txt

EXPOSE port (kde se vaše aplikace zobrazuje)

Poté spusťte příkaz python3 app.py. CMD bude vždy připojen k Entrypoint, aby vám poskytl poslední příkaz ke spuštění.

Kontejner můžete sestavit lokálně a otestovat aplikaci kontejnerové baňky (tyto příkazy spusťte v adresáři projektu)

docker build -t image_classifier: nejnovější.
docker run -it -p 5500: 3000 image_classifier

Tím se spustí vaše app.py a s přesměrováním portů na místě se dostanete k webappu v prohlížeči na adrese http: // localhost: 5000.

Nyní přichází nejvíce očekávaná část.

Vytvořte si účet na cloud.google.com a umožněte tak platbám přístup k motoru Kubernetes. Přejděte na modul kubernetes a klikněte na tlačítko aktivace prostředí cloudu v horní části okna konzoly. Ve spodní části získáte konzolu, kde můžete spouštět příkazy, které tato konzola přichází předem nainstalovaná s gcloud, docker a kubectl. Jednou v konzoli:

git clone 
cd your_project

Nastavte proměnnou prostředí PROJECT_ID ve vašem shellu načtením předkonfigurovaného ID projektu v gcloud spuštěním následujícího příkazu:

export PROJECT_ID = "$ (projekt gcloud config get-value -q)"

Hodnota PROJECT_ID bude použita pro označení obrazu kontejneru pro jeho přesunutí do vašeho soukromého registru kontejnerů.

Nyní můžete vytvořit obrázek kontejneru:

sestavení doku -t gcr.io/${PROJECT_ID}/:1.0.0
docker push gcr.io/${PROJECT_ID}/:1.0.0

Stavba bude nějakou dobu trvat, po sestavení ji můžete ověřit pomocí příkazu „Docker images“. Nyní můžete vytvořit svůj klastr:

Vytváření obrazu kontejneru

Vytvoření clusteru kontejnerů:

Nyní, když je obraz kontejneru uložen v registru, musíte vytvořit cluster kontejneru, aby se obraz kontejneru spustil. Klastr se skládá ze skupiny instancí Compute Engine VM spuštěných Kubernetes.

clustery kontejnerů gcloud create  --zone = us-central1-f --num-nodes = 2

Dokončení bude chvilku trvat, po dokončení si to můžete ověřit příkazem „gcloud compute instances list“.

Nasazení aplikace:

kubectl run  --image = gcr.io / $ {PROJECT_ID} / : 1.0.0 --port 3000

Příkaz „kubectl get pods“ pro zobrazení podu vytvořeného rozmístěním.

Vystavení vaší aplikace na internetu:

kubectl vystavit nasazení  --type = LoadBalancer --port 80 --target-port 3000

Příkaz kubectl expose výše vytváří prostředek služby, který poskytuje podporu sítí a IP pod Pods.The - port flag určuje číslo portu nakonfigurované v Load Balancer a flag - target-port určuje číslo portu, které používá Pod vytvořený příkazem kubectl run z předchozího kroku.

kubectl získat službu

Výstup vám poskytne externí IP (ve spodní části obrázku níže):

Získejte externí adresu IP

Jakmile určíte externí adresu IP aplikace, zkopírujte ji. Přejděte prohlížečem na tuto adresu URL (například http://130.211.229.36) a zkontrolujte, zda je aplikace přístupná.

Při návštěvě externí IP

POZNÁMKA: 1. Kamkoli jsem použil <>, neváhejte a přidejte požadovaná jména. 2. Napsal jsem yaml soubory také do mého githubu, pokud používáte Digitalocean nebo jinou platformu orher cloud.

Tento blog je užitečný. Pro jakékoli pochybnosti a dotazy komentář níže.