ŠUNYS + ŠUNYS + FLASK + DOCKER + KUBERNETES

Ar kada susimąstėte, kaip sukurti mašinų mokymosi žiniatinklio programą ir diegti ją masteliu ir valdyti visiems pilve? Jūs atėjote į reikiamą vietą. Šiame įraše apžvelgsiu pagrindines mintis, kaip išsaugoti jūsų ML žiniatinklio programą ir įdiegti ją „Google“ debesyje naudojant „kebernetes“ variklį.

Visą kodą galite rasti čia. Norėdami greitai pamatyti demonstracinę versiją, apsilankykite http://130.211.229.36/. (Įkelti tik JPG vaizdus)

Privalomos sąlygos = Dockers supratimas

Pirma, kas yra kubernetai? „Kubernetes“ yra atvirojo kodo orkestrų sistema, skirta dokų konteineriams, ji tvarko planavimą ant mazgų kompiuterio klasteryje ir aktyviai valdo darbo krūvius, kad užtikrintų, jog jų būsena atitiktų vartotojo deklaruojamus ketinimus, naudodama etikečių ir ankščių sąvoką, sugrupuodama konteinerius, kurie sudaro pritaikymą loginiuose vienetuose, kad būtų lengva valdyti ir rasti.

Kubernetes architektūra

„Kubernetes“ klasterio su pagrindiniais ir darbiniais mazgais apžvalga. Visa klasterio veikla valdoma iš pagrindinio mazgo, kuriame veikia API. „Kubectl“ yra komandų eilutės sąsaja, skirta komandoms vykdyti prieš „Kubernetes“ grupes.

Kiekvienas mazgas yra paženklintas ir jiems suteiktos žymos. Tavo sudėtinė programa veikia mazgo angoje ir yra diegiama pagrindiniame mazge.

NODAS

Tai mazgas, turintis daugybę talpyklų su jų IP IP adresais.

Padėkliukai - tai yra pagrindinis architektūros vienetas, kurį paprastai sudaro 2 konteineriai. Kiekvienam „Kubernetes“ skydeliui yra priskirtas unikalus pod IP IP adresas klasteryje ir gali būti valdomas rankiniu būdu per „Kubernetes API“. Pod gali apibrėžti tomą, pvz., Vietinio disko katalogą ar tinklo diską, ir atskleisti jį talpyklose. pod.

Ir pagaliau ateina programos eksponavimas naudojantis paslauga. Kai darbuotojo mazgas miršta, taip pat prarandami mazge veikiantys skydeliai. Tada kopijos rinkinys gali dinamiškai sugrąžinti klasterį į norimą būseną, sukurdamas naujus pods, kad jūsų programa veiktų. Tai atliekama per service.yaml failą.

Norėdami geriau suprasti „kubernetes“ infrastruktūrą, rekomenduoju vaizdo įrašą, kuriame visos sąvokos paaiškintos supaprastintu būdu.

Pradėkime mūsų žiniatinklio programą.

Treniravau savo neuroninio tinklo modelį ir įrašiau jį į JSON bei svorius į h5 failą. Aš parašiau use_model.py, kad galėčiau įkelti apmokytą modelį iš JSON ir nuspėti naują vaizdą.

Aš sukūriau internetinę programą „FLASK“. Paraiška yra paprasta. Ji atvaizdą sukuria ir nuspėja katę ar šunį naudodama use_model.py ir grąžina, ar esate „DOG“, ar „jūs esate CAT“. „App.py“ eina taip (kurdamas talpyklą pakeičiau pagrindinį kompiuterį = 0.0.0.0).

Tuomet svarbiausia yra parašyti „Dockerfie“, kad būtų galima sukurti doko atvaizdą.

Vykdyti komandas apt-get update && install python3.

Nukopijuokite dabartinį katalogą. „pip“ įdiegimo reikalavimai.txt

„EXPOSE“ prievadas (kur rodoma jūsų „app.py“)

Tada paleiskite komandą python3 app.py. CMD visada bus pridėtas prie „Entrypoint“, kad gautumėte galutinę komandą.

Galite kurti konteinerį vietoje ir išbandyti savo talpyklos programą (paleiskite šias komandas projekto kataloge)

„docker build -t“ vaizdo klasifikatorius: vėliausias.
„docker run -it -p 5500“: 3000 vaizdo klasifikatorius

Tai paleis jūsų „app.py“, o turėdami uosto peradresavimą, naršyklės tinklalapyje galėsite pasiekti tinklalapį http: // localhost: 5000.

Dabar ateina laukiamiausia dalis.

Sukurkite sąskaitą debes.google.com, kad mokėjimai galėtų pasiekti „Kubernetes“ variklį. Eikite į „kubernetes“ variklį ir konsolės lango viršuje spustelėkite aktyvuoti debesies apvalkalo mygtuką. Gausite konsolę apačioje, kur galėsite paleisti komandas, kurias ši konsolė iš anksto įdiegė su „gcloud“, „docker“ ir „kubectl“. Kartą konsolėje:

Git klonas 
CD tavo projektas

Nustatykite aplinkos kintamąjį PROJECT_ID savo apvalkale, nuskaitydami iš anksto sukonfigūruotą projekto ID „gcloud“, vykdydami toliau pateiktą komandą:

eksportuoti PROJECT_ID = "$ („ gcloud config get-value project -q “)

„PROJECT_ID“ vertė bus naudojama pažymėti konteinerio atvaizdą, kad jis būtų įkeltas į jūsų privatų konteinerių registrą.

Dabar galite sukurti konteinerio vaizdą:

„docker build -t gcr.io/${PROJECT_ID}/:1.0.0
„docker push gcr.io/${PROJECT_ID}/:1.0.0

Kuris užtruks šiek tiek laiko, po pastatymo galėsite patikrinti naudodamiesi komanda „Docker images“. Dabar galite sukurti savo klasterį:

Talpyklos vaizdo kūrimas

Kurti konteinerių klasterį:

Dabar, kai konteinerio vaizdas saugomas registre, turite sukurti konteinerio klasterį, kad paleistumėte konteinerio vaizdą. Klasterį sudaro „Compute Engine VM“ egzempliorių rinkinys, kuriame veikia „Kubernetes“.

„gcloud“ konteinerių klasteriai sukuria  --zone = us-central1-f --num-nodes = 2

Tai užtruks, kol baigsite, galite patvirtinti naudodami komandą „gcloud compute instance list“.

Programos diegimas:

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

Komanda „kubectl get pods“, kad pamatytumėte diegimo metu sukurtą „Pod“.

Programos pateikimas internete:

„kubectl“ parodo diegimą  --type = „LoadBalancer“ - „port 80 “-„ target-port 3000 “

Aukščiau pateikta „kubectl expose“ komanda sukuria paslaugų šaltinį, teikiantį tinklą ir IP palaikymą jūsų programos „Pods“. Porto vėliava nurodo prievado numerį, sukonfigūruotą „Load Balancer“, o „target-port“ vėliava nurodo prievado numerį, kurį naudoja „Pod“, kurį sukūrė „kubectl run“ komanda iš ankstesnio žingsnio.

kubectl gauti paslaugą

Išvestis suteiks jums išorinį IP (apačioje esančio paveikslėlio apačioje):

Gaukite išorinį IP

Kai nustatysite išorinį savo programos IP adresą, nukopijuokite IP adresą. Nukreipkite naršyklę į šį URL (pvz., Http://130.211.229.36), kad patikrintumėte, ar jūsų programa pasiekiama.

Apsilankius išoriniame IP

PASTABA: 1. Visur, kur naudojau <>, nedvejodami pridėkite norimus vardus. 2. Aš taip pat parašiau „yaml“ failus savo „github“, jei naudojate „Digitalocean“ ar bet kurią „orher“ debesies platformą.

Šis tinklaraštis yra naudingas. Jei kyla abejonių ir klausimų, komentuokite žemiau.