ISifundo seKubernetes iSigaba soku-1: Izicelo, iiMicroservices, kunye neMigqomo

Ngokwesicelo sethu, uHabr wenza ihabhu Kubernetes yaye siyakuvuyela ukuhambisa impapasho yokuqala kuyo. Bhalisa!

I-Kubernetes ilula. Kutheni iibhanki zindihlawula imali eninzi yokusebenza kule ndawo, ngoxa nabani na ekwazi kakuhle obu bugcisa ngeeyure nje ezimbalwa?

ISifundo seKubernetes iSigaba soku-1: Izicelo, iiMicroservices, kunye neMigqomo

Ukuba uyathandabuza ukuba iKubernetes inokufundwa ngokukhawuleza, ndicebisa ukuba uzame ngokwakho. Oko kukuthi, ukuba uyazi kakuhle le mathiriyeli, uya kuba nakho ukuqhuba isicelo esekwe kwii-microservices kwiqela le-Kubernetes. Ndingayiqinisekisa le nto, kuba ikwayindlela efanayo esetyenziswa apha ukuba ndifundise abathengi bethu ukusebenza noKubernetes. Yintoni eyenza esi sikhokelo sahluke kwezinye? Enyanisweni, kukho izinto ezininzi. Ke, uninzi lwezi zixhobo ziqala ngengcaciso yezinto ezilula - iikhonsepthi zeKubernetes kunye neempawu zomyalelo we-kubectl. Ababhali bezi zixhobo bacinga ukuba abafundi babo baqhelene nophuhliso lwesicelo, ii-microservices, kunye nezikhongozeli zeDocker. Siza kuhamba ngenye indlela. Okokuqala, siza kuthetha ngendlela yokusebenzisa usetyenziso olusekwe kwiinkonzo ezincinci kwikhompyuter. Emva koko siya kujonga kwimifanekiso yokwakha yesikhongozeli kwi-microservice nganye. Kwaye emva koko, siya kuqhelana neKubernetes kwaye sijonge ukuhambisa isicelo esekwe kwiinkonzo ezincinci kwiqela elilawulwa yiKubernetes.

Le ndlela, kunye nendlela ehamba ngokuthe ngcembe ye-Kubernetes, iya kunika ubunzulu bokuqonda okwenzekayo okuyimfuneko kumntu oqhelekileyo ukuze aqonde ukuba yonke into isebenza njani kwi-Kubernetes. Ngokuqinisekileyo i-Kubernetes yitekhnoloji elula, ngaphandle kokuba abo bafuna ukuyifunda bayazi ukuba isetyenziswa phi kwaye njani.

Ngoku, ngaphandle kokuqhubeka, masiqalise kwaye sithethe ngesicelo esiza kusebenza naso.

Isicelo sovavanyo

Isicelo sethu siya kwenza umsebenzi omnye kuphela. Kuthatha isivakalisi esinye njengegalelo, emva koko, usebenzisa izixhobo zokuhlalutya isicatshulwa, wenza uhlalutyo lweemvakalelo zesi sivakalisi, ukufumana uvavanyo lwesimo sengqondo sombhali wesivakalisi kwinto ethile.

Le yindlela iwindow engundoqo yesisicelo ejongeka ngayo.

ISifundo seKubernetes iSigaba soku-1: Izicelo, iiMicroservices, kunye neMigqomo
Isicelo seWebhu sokuhlalutya imvakalelo yeetekisi

Ukusuka kumbono wobugcisa, isicelo sinee-microservices ezintathu, nganye kuzo isombulula isethi ethile yemisebenzi:

  • I-SA-Frontend yiseva yewebhu ye-Nginx ekhonza iifayile ze-static React.
  • I-SA-WebApp sisicelo sewebhu esibhalwe kwiJava esiqhuba izicelo ezivela kwi-frontend.
  • I-SA-Logic sisicelo sePython esenza uhlalutyo lweemvakalelo kwisicatshulwa.

Kubalulekile ukuqaphela ukuba ii-microservices azikho zodwa. Basebenzisa ingcamango "yokwahlulwa koxanduva", kodwa kwangaxeshanye kufuneka basebenzisane omnye nomnye.

ISifundo seKubernetes iSigaba soku-1: Izicelo, iiMicroservices, kunye neMigqomo
Idatha iyahamba kwisicelo

Kulo mzobo ungentla, unokubona izigaba ezinamanani enkqubo, ebonisa ukuhamba kwedatha kwisicelo. Masizijonge:

  1. Isikhangeli sicela ifayile kumncedisi index.html (ethi, ngokulandelelana, ikhuphele iphakheji yesicelo seReact).
  2. Umsebenzisi unxibelelana nesicelo, oku kubangela ukufowunelwa kwisicelo sewebhu esekwe eNtwasahlobo.
  3. Isicelo sewebhu sidlulisela phambili isicelo sokwenza uhlalutyo lombhalo kwisicelo sePython.
  4. Isicelo sePython senza uhlalutyo lweemvakalelo zesicatshulwa kwaye sibuyisela umphumo njengempendulo kwisicelo.
  5. Isicelo se-Spring sithumela impendulo kwi-React application (eya kuthi, ibonise umphumo wohlalutyo lombhalo kumsebenzisi).

Ikhowudi yazo zonke ezi zicelo inokufumaneka apha. Ndicebisa ukuba ukhuphele le ndawo yogcino ngokwakho ngoku, kuba kukho imifuniselo emininzi enomdla ngayo phambi kwethu.

Ukuqhuba usetyenziso olusekwe kwiinkonzo ezincinci kumatshini wakho wasekhaya

Ukuze isicelo sisebenze, kufuneka siqale zontathu ii-microservices. Masiqale ngeyona intle kuzo zonke-isicelo sesiphelo sangaphambili.

▍ Misela iReact kuphuhliso lwasekhaya

Ukuze usebenzise iReact application, kufuneka ufakele iqonga leNode.js kunye neNPM kwikhompyuter yakho. Nje ukuba ufake yonke le nto, sebenzisa i-terminal ukuya kwifolda yeprojekthi yakho sa-frontend kwaye sebenzisa lo myalelo ulandelayo:

npm install

Ngokusebenzisa lo myalelo kwifolda node_modules ukuxhomekeka kwesicelo seReact kuya kulayishwa, iirekhodi zazo ezikwifayile package.json. Nje ukuba ukuxhomekeka kukhutshelwe kwifolda enye, sebenzisa lo myalelo ulandelayo:

npm start

Kuko konke. Ngoku iReact application iyasebenza, ungafikelela kuyo ngokuya kule dilesi ilandelayo kwisikhangeli sakho: localhost:3000. Unokutshintsha into kwikhowudi yayo. Uya kubona ngoko nangoko umphumo wolu tshintsho kwisikhangeli. Oku kunokwenzeka ngenxa yento ebizwa ngokuba yi "hot" yokutshintshwa kweemodyuli. Oku kwenza uphuhliso lwangaphambili lube ngamava alula kwaye awonwabisayo.

▍Ukulungiselela iReact application yemveliso

Ngenjongo yokusebenzisa usetyenziso lweReact, kufuneka siyiguqule ibe yiseti yeefayile ezimileyo kwaye sizisebenzise kubathengi abasebenzisa umncedisi wewebhu.

Ukwakha i-React application, kwakhona usebenzisa i-terminal, jonga kwifolda sa-frontend kwaye sebenzisa lo myalelo ulandelayo:

npm run build

Oku kuya kudala uvimba weefayili kwifolda yeprojekthi build. Iya kuqulatha zonke iifayile ezimileyo eziyimfuneko ukuze isicelo seReact sisebenze.

▍ Ukubonelela ngeefayile ezimileyo usebenzisa iNginx

Okokuqala kufuneka ufake kwaye usebenzise iseva yewebhu yeNginx. kuyinto unokuyikhuphela kwaye ufumane imiyalelo yendlela yokuyifaka kwaye uyiqhube. Emva koko kufuneka ukhuphele imixholo yefolda sa-frontend/build kwifolda [your_nginx_installation_dir]/html.

Ngale ndlela, ifayile eyenziwe ngexesha lokwakhiwa kwesicelo seReact index.html iza kufumaneka ku [your_nginx_installation_dir]/html/index.html. Le yifayile ethi, ngokungagqibekanga, iseva yeNginx ivelisa xa ifikelela kuyo. Umncedisi uqwalaselwe ukumamela kwizibuko 80, kodwa inokwenziwa ngendlela oyidinga ngayo ngokuhlela ifayile [your_nginx_installation_dir]/conf/nginx.conf.

Ngoku vula isikhangeli sakho kwaye uye ku localhost:80. Uya kubona iReact application page.

ISifundo seKubernetes iSigaba soku-1: Izicelo, iiMicroservices, kunye neMigqomo
Usetyenziso olusebenzayo olunikezelwa ngumncedisi we-Nginx

Ukuba ngoku ungenisa into ebaleni Type your sentence kwaye ucofe iqhosha Send - akukho nto iya kwenzeka. Kodwa, ukuba ujonga i-console, unokubona imiyalezo yempazamo apho. Ukuze uqonde apho kwenzeka khona ezi mpazamo, makhe sihlalutye ikhowudi yesicelo.

▍Uhlalutyo lwekhowudi yesicelo engaphambili

Ukujonga ikhowudi yefayile App.js, sinokubona ukuba ukucofa iqhosha Send ubiza indlela analyzeSentence(). Ikhowudi yale ndlela inikwe ngezantsi. Nceda uqaphele ukuba kumgca ngamnye onezimvo zefom # Номер, kukho inkcazo enikwe ngaphantsi kwekhowudi. Siza kuhlalutya amanye amaqhekeza ekhowudi ngendlela efanayo.

analyzeSentence() {
    fetch('http://localhost:8080/sentiment', {  // #1
        method: 'POST',
        headers: {
            'Content-Type': 'application/json'
        },
        body: JSON.stringify({
                       sentence: this.textField.getValue()})// #2
    })
        .then(response => response.json())
        .then(data => this.setState(data));  // #3
}

1. I-URL esenziwa kuyo isicelo se-POST. Kucingelwa ukuba kukho isicelo kule dilesi esilindele izicelo ezinjalo.

2.Iqumrhu lesicelo lithunyelwe kwisicelo. Nanku umzekelo womzimba wesicelo:

{
    sentence: "I like yogobella!"
}

3.Xa impendulo kwisicelo ifunyenwe, imeko yecandelo iyahlaziywa. Oku kubangela ukuba icandelo linikezelwe kwakhona. Ukuba sifumana idatha (oko kukuthi, into ye-JSON equlethe idatha yegalelo kunye nenqaku lombhalo obaliweyo), siya kukhupha icandelo. Polarity, ekubeni iimeko ezifanelekileyo ziya kuhlangatyezwa. Le yindlela esilichaza ngayo icandelo:

const polarityComponent = this.state.polarity !== undefined ?
    <Polarity sentence={this.state.sentence} 
              polarity={this.state.polarity}/> :
    null;

Ikhowudi ibonakala isebenza kakuhle. Yintoni engalunganga ngale nto, kunjalo? Ukuba ucinga ukuba kwidilesi apho isicelo sizama ukuthumela isicelo se-POST, akukho nto inokwamkela kwaye iqhubekisele phambili esi sicelo, ngoko uya kuba ulungile ngokupheleleyo. Oko kukuthi, ukusetyenzwa kwezicelo ezifunyenweyo http://localhost:8080/sentiment, kufuneka siqhube usetyenziso lwewebhu olusekwe kwiNtwasahlobo.

ISifundo seKubernetes iSigaba soku-1: Izicelo, iiMicroservices, kunye neMigqomo
Sidinga isicelo se-Spring esingamkela isicelo se-POST

▍ Ukumisela usetyenziso lwewebhu olusekwe eNtwasahlobo

Ukuze usebenzise isicelo se-Spring, uya kufuna i-JDK8 kunye ne-Maven kwaye iqwalaselwe ngokufanelekileyo ukuguquguquka kokusingqongileyo. Nje ukuba ufake yonke le nto, ungaqhubeka nokusebenza kwiprojekthi yethu.

▍Ukupakisha usetyenziso kwifayile yejagi

Lawula, usebenzisa i-terminal, kwifolda sa-webapp kwaye ngenisa lo myalelo ulandelayo:

mvn install

Emva kokuqhuba lo myalelo kwifolda sa-webapp uvimba weefayili uyakwenziwa target. Apha kulapho isicelo seJava sizakubekwa khona, sipakishwe kwifayile yejagi, emelwe yifayile sentiment-analysis-web-0.0.1-SNAPSHOT.jar.

▍ Ukusebenzisa usetyenziso lweJava

Yiya kwifolda target kwaye uqhube isicelo ngalo myalelo ulandelayo:

java -jar sentiment-analysis-web-0.0.1-SNAPSHOT.jar

Impazamo iyakwenzeka ngexesha uphumeza lo myalelo. Ukuqala ukuyilungisa, sinokuhlalutya iinkcukacha zangaphandle kwidatha yokulandelela istaki:

Error creating bean with name 'sentimentController': Injection of autowired dependencies failed; nested exception is java.lang.IllegalArgumentException: Could not resolve placeholder 'sa.logic.api.url' in value "${sa.logic.api.url}"

Kithina, eyona nto ibalulekileyo apha kukukhankanywa kokungenakwenzeka kokucacisa intsingiselo sa.logic.api.url. Makhe sihlalutye ikhowudi apho kwenzeka khona impazamo.

▍ Uhlalutyo lwekhowudi yesicelo seJava

Nantsi isicatshulwa sekhowudi apho impazamo yenzeka khona.

@CrossOrigin(origins = "*")
@RestController
public class SentimentController {
    @Value("${sa.logic.api.url}")    // #1
    private String saLogicApiUrl;
    @PostMapping("/sentiment")
    public SentimentDto sentimentAnalysis(
        @RequestBody SentenceDto sentenceDto) 
    {
        RestTemplate restTemplate = new RestTemplate();
        return restTemplate.postForEntity(
                saLogicApiUrl + "/analyse/sentiment",    // #2
                sentenceDto, SentimentDto.class)
                .getBody();
    }
}

  1. Kwi-SentimentController kukho intsimi saLogicApiUrl. Ixabiso layo lichazwe kwipropati sa.logic.api.url.
  2. Umgca saLogicApiUrl ihambelana nexabiso /analyse/sentiment. Ngokudibeneyo benza idilesi yokwenza umnxeba kwi-microservice eyenza uhlalutyo lombhalo.

▍Seta ixabiso lepropati

Ngentwasahlobo, umthombo osemgangathweni wamaxabiso epropathi yifayile application.properties, enokufumaneka kwi sa-webapp/src/main/resources. Kodwa ukusetyenziswa kwayo akukuphela kwendlela yokubeka amaxabiso epropathi. Oku kunokwenziwa kusetyenziswa lo myalelo ulandelayo:

java -jar sentiment-analysis-web-0.0.1-SNAPSHOT.jar --sa.logic.api.url=WHAT.IS.THE.SA.LOGIC.API.URL

Ixabiso lalo mhlaba kufuneka likhombe kwidilesi yesicelo sethu sePython.

Ngokuyiqwalasela, sixelela isicelo sewebhu se-Spring apho kufuneka siye khona ukwenza izicelo zokuhlalutya umbhalo.

Ukuze singabi nzima ubomi bethu, siya kuthatha isigqibo sokuba isicelo sePython siya kufumaneka localhost:5000 kwaye masizame ukungalibali ngayo. Ngenxa yoko, umyalelo wokuqalisa usetyenziso lwaseNtwasahlobo uya kujongeka ngolu hlobo:

java -jar sentiment-analysis-web-0.0.1-SNAPSHOT.jar --sa.logic.api.url=http://localhost:5000

ISifundo seKubernetes iSigaba soku-1: Izicelo, iiMicroservices, kunye neMigqomo
Inkqubo yethu ilahlekile isicelo sePython

Ngoku konke okufuneka sikwenze kukuqhuba isicelo sePython kwaye inkqubo iya kusebenza njengoko kulindelekile.

▍ Ukumisela usetyenziso lwePython

Ukuqhuba isicelo sePython, kufuneka ube nePython 3 kunye nePip efakwe, kwaye ukuguqulwa kwendawo efanelekileyo kufuneka kumiselwe ngokuchanekileyo.

▍Ukufakwa kokuxhomekeka

Yiya kwifolda yeprojekthi yakho sa-logic/sa kwaye uqhube le miyalelo ilandelayo:

python -m pip install -r requirements.txt
python -m textblob.download_corpora

▍Qalisa isicelo

Emva kokufaka ukuxhomekeka, sikulungele ukuqhuba isicelo:

python sentiment_analysis.py

Emva kokwenza lo myalelo siya kuxelelwa oku kulandelayo:

* Running on http://0.0.0.0:5000/ (Press CTRL+C to quit)

Oku kuthetha ukuba isicelo siyasebenza kwaye silinde izicelo kwi localhost:5000/

▍Uphando lweKhowudi

Makhe sijonge ikhowudi yesicelo sePython ukuqonda ukuba iphendula njani kwizicelo:

from textblob import TextBlob
from flask import Flask, request, jsonify
app = Flask(__name__)                                   #1
@app.route("/analyse/sentiment", methods=['POST'])      #2
def analyse_sentiment():
    sentence = request.get_json()['sentence']           #3
    polarity = TextBlob(sentence).sentences[0].polarity #4
    return jsonify(                                     #5
        sentence=sentence,
        polarity=polarity
    )
if __name__ == '__main__':
    app.run(host='0.0.0.0', port=5000)                #6

  1. Ukuqala into Flask.
  2. Ichaza idilesi yokwenza izicelo ze-POST kuyo.
  3. Ukufumana kwakhona iPropati sentence kwiqumrhu lesicelo.
  4. Ukuqala into engaziwa TextBlob kunye nokufumana ixabiso polarity kwisigwebo sokuqala esifunyenwe kumzimba wesicelo (kwimeko yethu, oku kuphela kwesigwebo esithunyelwe ukuhlalutya).
  5. Ukubuyisela impendulo enomzimba wayo oqulethe isicatshulwa sesivakalisi kunye nesalathisi esibaliweyo sayo polarity.
  6. Qalisa isicelo seFlask, esiza kufumaneka apha 0.0.0.0:5000 (ungafikelela kuyo usebenzisa ulwakhiwo lwefom localhost:5000).

Iinkonzo ezincinci ezenza usetyenziso ngoku ziyasebenza. Zilungele ukusebenzisana omnye nomnye. Yile ndlela umzobo wesicelo ukhangeleka ngayo kweli nqanaba lomsebenzi.

ISifundo seKubernetes iSigaba soku-1: Izicelo, iiMicroservices, kunye neMigqomo
Zonke ii-microservices ezenza isicelo ziziswa ngokusebenza

Ngoku, ngaphambi kokuba uqhubeke, vula isicelo sakho se-React kwisikhangeli kwaye uzame ukwahlula isivakalisi kunye nayo. Ukuba yonke into yenziwe ngokuchanekileyo - emva kokucofa iqhosha Send uya kubona iziphumo zokuhlalutya ngaphantsi kwendawo yokubhaliweyo.

Kwicandelo elilandelayo, siza kuthetha ngendlela yokuqhuba ii-microservices zethu kwizikhongozeli zeDocker. Oku kuyimfuneko ukuze ulungiselele isicelo sokusebenza kwiqela le-Kubernetes.

Izikhongozeli zeDocker

Kubernetes yinkqubo yokwenza ukusasazwa, ukukala kunye nolawulo lwezicelo eziqulathiweyo. Ikwabizwa ngokuba yi "container orchestrator". Ukuba i-Kubernetes isebenza kunye nezikhongozeli, ngoko ngaphambi kokusebenzisa le nkqubo kufuneka siqale sifumane ezi zikhongozeli. Kodwa kuqala, makhe sithethe malunga nokuba zeziphi izikhongozeli. Mhlawumbi eyona mpendulo ilungileyo kumbuzo wokuba yintoni na inokufumaneka kuyo amaxwebhu ukuya kwiDocker:

Umfanekiso wesikhongozeli yipakethe ekhaphukhaphu, ezimeleyo, ephunyezwayo equlethe isicelo, ebandakanya yonke into efunekayo ukuyiqhuba: ikhowudi yesicelo, indawo yokuphumeza, izixhobo zenkqubo kunye neelayibrari, izicwangciso. Iinkqubo ezifakwe kwikhonteyina zinokusetyenziswa kwiLinux nakwiindawo zeWindows, kwaye ziya kuhlala zisebenza ngokufanayo nokuba sisiphi na isiseko.

Oku kuthetha ukuba izikhongozeli zinokuqhutywa kuyo nayiphi na ikhompyuter, kubandakanya iiseva zemveliso, kwaye izicelo eziqulethwe kuzo ziya kusebenza ngokufanayo kuyo nayiphi na imeko.

Ukuphonononga iimpawu zezikhongozeli kwaye uzithelekise nezinye iindlela zokuqhuba izicelo, makhe sijonge kumzekelo wokusebenzela iReact application usebenzisa umatshini obonakalayo kunye nesitya.

▍ Ukubonelela ngeefayile ezimileyo zeReact application usebenzisa umatshini wenyani

Ukuzama ukuququzelela inkonzo yeefayile ezimileyo usebenzisa oomatshini ababonakalayo, siya kudibana nezi zinto zingeloncedo zilandelayo:

  1. Ukusetyenziswa okungafanelekanga kwezibonelelo, ekubeni umatshini ngamnye wenyani yinkqubo yokusebenza epheleleyo.
  2. Ukuxhomekeka kwiqonga. Yintoni esebenzayo kwikhompyuter yendawo isenokungasebenzi kwiseva yemveliso.
  3. Ukukala okucothayo kunye nobutyebi obunzulu besisombululo esisekwe kumatshini.

ISifundo seKubernetes iSigaba soku-1: Izicelo, iiMicroservices, kunye neMigqomo
Iseva yewebhu ye-Nginx ekhonza iifayile ezimileyo ezisebenza kumatshini wenyani

Ukuba izikhongozeli zisetyenziselwa ukusombulula ingxaki efanayo, ke, xa kuthelekiswa noomatshini ababonakalayo, la mandla alandelayo anokuqatshelwa:

  1. Ukusetyenziswa ngokufanelekileyo kwezibonelelo: ukusebenza kunye nenkqubo yokusebenza usebenzisa iDocker.
  2. Iqonga elizimeleyo. Isikhongozeli esingaqhutywa ngumphuhlisi kwikhompyuter yakhe siya kusebenza naphi na.
  3. Ukuhanjiswa okulula ngokusetyenziswa kweengqimba zemifanekiso.

ISifundo seKubernetes iSigaba soku-1: Izicelo, iiMicroservices, kunye neMigqomo
Umncedisi wewebhu we-Nginx okhonza iifayile ezimileyo ezisebenza kwisikhongozeli

Sithelekisa kuphela oomatshini ababonakalayo kunye nezikhongozeli kumanqaku ambalwa, kodwa oku kwanele ukufumana ukuva amandla ezikhongozeli. kuyinto Ungafumana iinkcukacha malunga nezikhongozeli zeDocker.

▍Ukwakha umfanekiso wesikhongozeli sosetyenziso lweReact

Ibhloko esisiseko sokwakha isikhongozeli seDocker yifayile Dockerfile. Ekuqaleni kwale fayile, irekhodi yenziwe ngomfanekiso wesiseko wesitya, emva koko kukho ukulandelelana kwemiyalelo ebonisa indlela yokwenza isitya esiya kuhlangabezana neemfuno zesicelo esithile.

Ngaphambi kokuba siqale ukusebenza kunye nefayile Dockerfile, masikhumbule into esiyenzileyo ukulungiselela iifayile zesicelo seReact ukuze zifakwe kwiseva yeNginx:

  1. Ukwakha iphakheji yesicelo seReact (npm run build).
  2. Ukuqala iseva yeNginx.
  3. Kukotshwa imixholo yolawulo build ukusuka kwifolda yeprojekthi sa-frontend kwifolda yomncedisi nginx/html.

Ngezantsi ungabona ungqamaniso phakathi kokwenza isikhongozeli kunye namanyathelo angasentla enziwe kwikhompyuter yakho yasekhaya.

▍Ukulungiselela i-Dockerfile yesicelo se-SA-Frontend

Imiyalelo eza kuqulathwa kuyo Dockerfile isicelo SA-Frontend, inamaqela amabini kuphela. Inyani kukuba iqela lophuhliso lwe-Nginx lilungiselele isiseko umfanekiso yeNginx, esiya kuyisebenzisa ukwenza umfanekiso wethu. La ngamanyathelo amabini ekufuneka siwachaze:

  1. Isiseko somfanekiso kufuneka sibe ngumfanekiso weNginx.
  2. Imixholo yesiqulathi seefayili sa-frontend/build kufuneka ikhutshelwe kwisiqulathi seefayili somfanekiso nginx/html.

Ukuba usuka kule nkcazo uye kwifayile Dockerfile, emva koko iya kujongeka ngolu hlobo:

FROM nginx
COPY build /usr/share/nginx/html

Njengoko ubona, yonke into elapha ilula kakhulu, kwaye imixholo yefayile ide ifundeke kwaye iyaqondakala. Le fayile ixelela inkqubo ukuba ithathe umfanekiso nginx ngayo yonke into esele ikuyo, kwaye ukhuphele imixholo yolawulo build kulawulo nginx/html.

Apha unokuba nombuzo malunga nendlela endazi ngayo apho kanye ufuna ukukopa iifayile kwifolda build, oko kukuthi, apho umendo wavela khona /usr/share/nginx/html. Enyanisweni, akukho nto inzima apha. Inyaniso kukuba ulwazi olufanelekileyo lunokufumaneka kwi inkcazelo umfanekiso.

▍Ukwakha umfanekiso kunye nokuwufaka kwindawo yokugcina

Ngaphambi kokuba sisebenze ngomfanekiso ogqityiweyo, kufuneka siwutyhalele kwindawo yokugcina umfanekiso. Ukwenza oku, siya kusebenzisa iqonga lokusingatha umfanekiso welifu wasimahla weDocker Hub. Kweli nqanaba lomsebenzi kufuneka wenze oku kulandelayo:

  1. Faka ifayile Docker.
  2. Bhalisa kwiwebhusayithi yeDocker Hub.
  3. Ngena kwiakhawunti yakho ngokwenza lo myalelo ulandelayo kwi-terminal:
    docker login -u="$DOCKER_USERNAME" -p="$DOCKER_PASSWORD"

Ngoku kufuneka usebenzise i-terminal ukuya kulawulo sa-frontend kwaye uqhube lo myalelo ulandelayo apho:

docker build -f Dockerfile -t $DOCKER_USER_ID/sentiment-analysis-frontend .

Apha nangaphezulu kwimiyalelo efanayo $DOCKER_USER_ID kufuneka itshintshwe ngegama lakho lomsebenzisi le-Docker Hub. Umzekelo, le ndawo yomyalelo inokujongeka ngolu hlobo: rinormaloku/sentiment-analysis-frontend.

Kule meko, lo myalelo unokufinyezwa ngokususa kuwo -f Dockerfile, kuba le fayile sele ikhona kulawulo apho senza khona lo myalelo.

Ukuze sithumele umfanekiso ogqityiweyo kwindawo yokugcina, sifuna lo myalelo ulandelayo:

docker push $DOCKER_USER_ID/sentiment-analysis-frontend

Emva kokuyigqiba, jonga uluhlu lweendawo zakho zokugcina kwi-Docker Hub ukuze uqonde ukuba ukulayishwa komfanekiso kwindawo yokugcina ilifu kuphumelele.

▍Ukuqhuba isikhongozeli

Ngoku nabani na unokukhuphela kwaye aqhube umfanekiso, owaziwa ngokuba $DOCKER_USER_ID/sentiment-analysis-frontend. Ukuze wenze oku, kufuneka wenze olu landelelwano lulandelayo lwemiyalelo:

docker pull $DOCKER_USER_ID/sentiment-analysis-frontend
docker run -d -p 80:80 $DOCKER_USER_ID/sentiment-analysis-frontend

Ngoku isikhongozeli siyasebenza, sinokuqhubeka nokusebenza ngokwenza eminye imifanekiso esiyidingayo. Kodwa ngaphambi kokuba siqhubeke, masiqonde ukuyila 80:80, ebonakala kumyalelo wokuqaliswa komfanekiso kwaye inokubonakala ibhidekisa.

  • Inani lokuqala 80 — eli linani lezibuko lenginginya (oko kukuthi, ikhompyutha yendawo).
  • Inombolo yesibini 80 lizibuko lesikhongozeli apho isicelo kufuneka sithunyelwe khona.

Qwalasela lo mzekeliso ulandelayo.

ISifundo seKubernetes iSigaba soku-1: Izicelo, iiMicroservices, kunye neMigqomo
Ukuhanjiswa kwePort

Inkqubo iphinda iqondise izicelo ezisuka kwizibuko <hostPort> kwizibuko ngalinye <containerPort>. Oko kukuthi, ukufikelela kwizibuko 80 ikhompyuter iqondiswe kwizibuko 80 isikhongozeli.

Ukususela kwizibuko 80 ivulwe kwikhompyuter yobulali, emva koko unokufikelela kwisicelo kule khompyutha localhost:80. Ukuba inkqubo yakho ayixhasi iDocker, isicelo sinokuqhutywa kumatshini weDocker onenyani, idilesi eya kujongeka ngathi. <docker-machine ip>:80. Ukufumana idilesi ye-IP yomatshini we-Docker wenyani, ungasebenzisa umyalelo docker-machine ip.

Ngeli xesha, emva kokuqalisa ngempumelelo isikhongozeli sesicelo sesiphelo sangaphambili, kuya kufuneka ukwazi ukuvula iphepha laso kwisikhangeli.

▍Ifayile ye-.dockerignore

Ukuqokelela umfanekiso wesicelo SA-Frontend, sinokuqaphela ukuba le nkqubo ijika icotha kakhulu. Oku kwenzeka ngenxa yokuba umxholo wokwakha umfanekiso kufuneka uthunyelwe kwi-Docker daemon. Uvimba weefayili omele umxholo wokwakha uchaziwe njengengxoxo yokugqibela yomyalelo docker build. Kwimeko yethu, kukho ichaphaza ekupheleni kwalo myalelo. Oku kubangela ukuba oku kulandelayo kufakwe kumxholo wokwakha:

sa-frontend:
|   .dockerignore
|   Dockerfile
|   package.json
|   README.md
+---build
+---node_modules
+---public
---src

Kodwa kuzo zonke iifolda ezikhoyo apha, sifuna kuphela ifolda build. Ukulayisha enye into yinkcitha xesha. Unokukhawulezisa ukwakha ngokuxelela i-Docker ukuba zeziphi izikhokelo zokungazihoyi. Kukwenza oku ukuba sifuna ifayile .dockerignore. Wena, ukuba uqhelene nefayile .gitignore, ulwakhiwo lwale fayile luzakubonakala luqhelekile. Idwelisa abalawuli ukuba inkqubo yokwakha umfanekiso inokuhoya. Kwimeko yethu, imixholo yale fayile ibonakala ngolu hlobo:

node_modules
src
public

Ifayile .dockerignore mayibe kulawulo olufanayo nefayile Dockerfile. Ngoku ukwakha umfanekiso kuya kuthatha umcimbi wemizuzwana.

Ngoku masisebenze kumfanekiso wesicelo seJava.

▍Ukwakha umfanekiso wesikhongozeli sosetyenziso lweJava

Uyazi ukuba yintoni, sele ufunde yonke into oyifunayo ukuze ukwazi ukwenza imifanekiso yesikhongozeli. Yiyo loo nto eli candelo liza kuba lifutshane kakhulu.

Vula ifayile Dockerfileekwifolda yeprojekthi sa-webapp. Ukuba ufunda okubhaliweyo kule fayile, uya kubona kuphela ulwakhiwo olutsha ezibini kuyo, ukuqala ngamagama angundoqo ENV и EXPOSE:

ENV SA_LOGIC_API_URL http://localhost:5000
…
EXPOSE 8080

Igama elingundoqo ENV Ikuvumela ukuba uchaze izinto eziguquguqukayo zemekobume ngaphakathi kwizikhongozeli zeDocker. Ngokukodwa, kwimeko yethu, ikuvumela ukuba ucacise i-URL yokufikelela kwi-API yesicelo esenza uhlalutyo lombhalo.

Igama elingundoqo EXPOSE ikuvumela ukuba uxelele iDocker ukuba ivule izibuko. Siza kusebenzisa eli zibuko ngelixa siqhuba isicelo. Apha unokuqaphela ukuba ngaphakathi Dockerfile isicelo SA-Frontend akukho myalelo unjalo. Oku kuphela ngeenjongo zamaxwebhu, ngamanye amazwi, olu lwakhiwo lwenzelwe lowo uya kufunda Dockerfile.

Ukwakha umfanekiso kunye nokuwutyhalela kwindawo yogcino kujongeka ngokufanayo kumzekelo wangaphambili. Ukuba awukazithembi kakhulu kwizakhono zakho, imiyalelo ehambelanayo inokufumaneka kwifayile README.md kwifolda sa-webapp.

▍Ukwakha umfanekiso wesikhongozeli sosetyenziso lwePython

Ukuba ujonga imixholo yefayile Dockerfile kwifolda sa-logic, ngoko awuyi kuzifumana into entsha apho. Imiyalelo yokwakha umfanekiso kunye nokuwuthumela kwindawo yokugcina kufuneka ukuba sele uqhelekile kuwe, kodwa, njengezinye izicelo zethu, zinokufumaneka kwifayile. README.md kwifolda sa-logic.

▍ Ukuvavanya izicelo ezifakwe kwiibhokisi

Ngaba unokuthembela kwinto ongakhange uyivavanye? Nam andikwazi. Masivavanye izikhongozeli zethu.

  1. Masiqalise isikhongozeli sesicelo sa-logic kwaye uyiqwalasele ukumamela kwizibuko 5050:
    docker run -d -p 5050:5000 $DOCKER_USER_ID/sentiment-analysis-logic
  2. Masiqalise isikhongozeli sesicelo sa-webapp kwaye uyiqwalasele ukumamela kwizibuko 8080. Ukongeza, kufuneka siqwalasele izibuko apho isicelo sePython siyakumamela izicelo ezisuka kwisicelo seJava ngokwabela kwakhona ukuguquguquka kwemekobume. SA_LOGIC_API_URL:
    $ docker run -d -p 8080:8080 -e SA_LOGIC_API_URL='http://<container_ip or docker machine ip>:5000' $DOCKER_USER_ID/sentiment-analysis-web-app

Ukufunda indlela yokufumana idilesi ye-IP yesikhongozeli seDocker okanye umatshini obonakalayo, bhekisa kwifayile README.

Masiqalise isikhongozeli sesicelo sa-frontend:

docker run -d -p 80:80 $DOCKER_USER_ID/sentiment-analysis-frontend

Ngoku yonke into ilungele ukuya kwidilesi kwisikhangeli localhost:80 kwaye uzame isicelo.

Nceda uqaphele ukuba utshintshe izibuko sa-webapp, okanye ukuba usebenzisa umatshini weDocker onenyani, kuya kufuneka uhlele ifayile App.js ukusuka kwisiqulathi seefayili sa-frontendngokutshintsha idilesi ye-IP okanye inombolo yezibuko kwindlela analyzeSentence(), endaweni yolwazi lwangoku endaweni yedatha ephelelwe lixesha. Emva koko, kufuneka udibanise umfanekiso kwaye uyisebenzise.

Yile ndlela esijonga ngayo umzobo wethu wesicelo ngoku.

ISifundo seKubernetes iSigaba soku-1: Izicelo, iiMicroservices, kunye neMigqomo
Iinkonzo ezincinci ziqhutywa kwizikhongozeli

Isishwankathelo: kutheni sifuna iqela leKubernetes?

Sisanda kuhlola iifayile Dockerfile, wathetha ngendlela yokwakha imifanekiso kwaye uyityhalele kwindawo yokugcina iDocker. Ukongeza, sifunde indlela yokukhawulezisa ukudibanisa umfanekiso usebenzisa ifayile .dockerignore. Ngenxa yoko, ii-microservices zethu ngoku zisebenza kwizikhongozeli zeDocker. Apha unokuba nombuzo othethelela ngokupheleleyo malunga nokuba kutheni sifuna iKubernetes. Inxalenye yesibini yalo mbandela iya kunikezelwa ekuphenduleni lo mbuzo. Okwangoku, qwalasela lo mbuzo ulandelayo:
Masicinge ukuba usetyenziso lwethu lwewebhu lokuhlalutya umbhalo sele ludumile kwihlabathi jikelele. Izigidi zezicelo ziza kuye ngomzuzu ngamnye. Oku kuthetha ukuba microservices sa-webapp и sa-logic iya kuba phantsi komthwalo omkhulu. Uzikala njani izikhongozeli ezisebenzisa iimicroservices?

ISifundo seKubernetes iSigaba soku-1: Izicelo, iiMicroservices, kunye neMigqomo

umthombo: www.habr.com

Yongeza izimvo