КОТЫ супраць ПАЛЫКІ + ФЛАСКІ + ДАКЕРЫ + КУБЕРНЕТЫ

Задумваліся, як пабудаваць вэб-прыкладанне Machine learning і разгарнуць яго маштаб і кіраваць ім усім у воблаку? Вы прыйшлі ў патрэбнае месца. У гэтым допісе я распавяду асноўныя канцэпцыі, якія змяшчаюць ваш вэб-дадатак ML і разгортваюць яго ў воблаку Google з дапамогай рухавіка kebernetes.

Поўны код можна знайсці тут. Для хуткага дэма-наведвання http://130.211.229.36/.(upload толькі выявы jpg)

Перадумовы = Разуменне Докер

Па-першае, што такое Кубернэты? Kubernetes - гэта сістэма аркестрацыі з адкрытым зыходным кодам для докер-кантэйнераў, яна апрацоўвае планаванне на вузлы ў вылічальным кластэры і актыўна кіруе рабочымі нагрузкамі, каб гарантаваць, што іх стан адпавядае заяўленым намерам карыстальніка, выкарыстоўваючы канцэпцыю надпісаў і струкоў, якія групуюць кантэйнеры, якія складаюць прыкладанне ў лагічныя адзінкі для лёгкага кіравання і выяўлення.

Kubernetes Architecture

Агляд кластара Kubernetes з вузламі Master і Work. Усе дзеянні кластера кантралююцца з вузла Master, які працуе API. Kubectl - гэта інтэрфейс каманднага радка для запуску каманд супраць кластэраў Kubernetes.

Кожныя Вузлы пазначаныя і пазначаныя тэгамі. Ваша кантэйнернае прыкладанне працуе ўнутры стручка ў вузле і разгорнута ў галоўным вузле.

НАЗА

Гэта Вузел са шматлікімі стручкамі з іх IP-адрасамі струкоў.

Pods- Гэта асноўная адзінка архітэктуры, якая звычайна змяшчае 2 кантэйнеры. Кожнаму струку ў Kubernetes прысвоены унікальны IP адрас у класце і можа кіравацца ўручную праз API Kubernetes. А стручок можа вызначыць аб'ём, напрыклад, лакальны дыскавы каталог або сеткавы дыск, і выставіць яго ў кантэйнеры ў стручок.

І, нарэшце, выкрываем ваша прыкладанне з дапамогай службы. Калі рабочы вузел памірае, струкі, якія працуюць на вузле, таксама страчваюцца. Набор рэплік можа затым дынамічна прывесці кластар назад у патрэбны стан, стварыўшы новыя Pods для падтрымання працы прыкладання. Гэта робіцца праз файл service.yaml.

Для лепшага разумення інфраструктуры кубернетаў я рэкамендую відэа, якое тлумачыць усе паняцці спрошчанай спасылкай.

Давайце пачнем наш вэб-дадатак.

Я трэніраваў мадэль Neural network і захаваў яе ў JSON, а таксама захаваў вагу ў файле h5. Я напісаў use_model.py, каб загрузіць навучаную мадэль ад JSON і прадказаць новы вобраз.

Я выкарыстаў FLASK для стварэння вэб-прыкладання. Дадатак проста: ён малюе і прадказвае котку ці сабаку з дапамогай use_model.py і вяртае "Ці вы ДОЛГ" ці "Вы CAT". Дадатак app.py выглядае так (я мяняў хост = 0.0.0.0 пры стварэнні кантэйнера.)

Тады самай важнай часткай з'яўляецца напісанне Dockerfie, каб мець магчымасць ствараць вобраз докера.

Запусціце каманды apt-get update & & python3…

Скапіруйце свой бягучы каталог. pip ўсталяваць патрабаванні.txt

Порт EXPOSE (дзе падаецца ваш app.py)

Затым запусціце каманду python3 app.py. CMD заўсёды будзе дададзены да Entrypoint, каб даць вам заключную каманду для запуску.

Вы можаце стварыць кантэйнер лакальна і пратэставаць дадатак з кантэйнерамі (запусціце гэтыя каманды ў каталогу праектаў)

docker build -t image_classifier: апошняя.
docker run -it -p 5500: 3000 image_classifier

Гэта запускае ваш app.py і пры пераадрасацыі порта вы можаце атрымаць доступ да webapp у вашым браўзэры па адрасе http: // localhost: 5000.

Зараз ідзе найбольш чаканая частка.

Стварыце ўліковы запіс у cloud.google.com, які дазволіць ажыццяўляць плацяжы, каб атрымаць доступ да рухавіка Kubernetes. Перайдзіце да рухавіка kubernetes і націсніце кнопку Актываваць воблачную абалонку ў верхняй частцы акна кансолі. Вы атрымаеце кансоль унізе, куды вы зможаце выконваць каманды. Гэтая кансоль пастаўляецца загадзя з усталяванымі праграмамі gcloud, docker і kubectl. Пасля таго, як у кансолі:

клон git <ваш_праект>
cd your_project

Усталюйце зменную сераду PROJECT_ID у абалонцы, атрымаўшы папярэдне наладжаны ідэнтыфікатар праекта ў gcloud, запусціўшы каманду ніжэй:

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

Значэнне PROJECT_ID будзе выкарыстоўвацца для пазнакі малюнка кантэйнера для адпраўкі яго ў ваш прыватны рэестр кантэйнераў.

Цяпер вы можаце сабраць выяву кантэйнера:

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

Спатрэбіцца некаторы час, каб сабраць, пасля зборкі вы можаце праверыць з дапамогай каманды "Docker images". Цяпер вы можаце стварыць свой кластар:

Пабудова малюнка кантэйнера

Стварэнне кантэйнернага кластара:

Цяпер, калі выява кантэйнера захоўваецца ў рэестры, вам трэба стварыць кластар кантэйнера для запуску выявы кантэйнера. Кластар складаецца з пула экзэмпляраў вылічальнай машыны Compute Engine VM пад кіраваннем Kubernetes.

Кластэры кантэйнераў gcloud ствараюць  --zone = us-central1-f --num-nodes = 2

Для завяршэння спатрэбіцца некаторы час, пасля завяршэння якога вы можаце пацвердзіць каманду "gcloud compute list of instance list".

Разгортванне вашай заяўкі:

kubectl run <нейкае імя> --image = gcr.io / $ {PROJECT_ID} / : 1.0.0 --port 3000

"Kubectl атрымаць струкі", каб убачыць струк, створаны пры разгортванні.

Выстаўленне вашай заяўкі ў Інтэрнэце:

kubectl выставіць разгортванне <імя> --type = LoadBalancer --port 80 --target-port 3000

Команда kubectl expose вышэй стварае службовы рэсурс, які забяспечвае сеткавую падтрымку і IP для Pods. вашага прыкладання. Флаг порта ўказвае нумар порта, наладжаны на Load Balancer, а флаг - target-port указвае нумар порта, які выкарыстоўваецца стручок, створаны камандай запуску kubectl з папярэдняга кроку.

kubectl атрымаць паслугу

Выхад дасць вам знешні IP (унізе малюнка ніжэй):

Атрымайце знешні IP

Як толькі вы вызначыце знешні IP-адрас для вашай заяўкі, скапіруйце IP-адрас. Навядзіце браўзэр на гэты URL (напрыклад, http://130.211.229.36), каб праверыць, ці даступна ваша прыкладанне.

На наведванне знешняй ІС

УВАГА: 1. Дзе б я ні выкарыстаў, не саромейцеся дадаваць патрэбныя імёны. 2. Я пісаў yaml файлы таксама ў маю праграму github, калі вы выкарыстоўваеце Digitalocean або любую воблачную платформу Orher.

Гэты блог карысны. Па любых сумневах і запытах каментары ніжэй.