Okokufundisa kwe-Kubernetes Ingxenye 1: Izicelo, Ama-Microservices, Neziqukathi

Ngokwesicelo sethu, uHabr udale ihabhu Kubernetes futhi siyajabula ukubeka incwadi yokuqala kuyo. Bhalisa!

I-Kubernetes ilula. Kungani amabhange engikhokhela imali eningi ukuze ngisebenze kule ndawo, kuyilapho noma ubani engakwazi lobu buchwepheshe ngamahora ambalwa nje?

Okokufundisa kwe-Kubernetes Ingxenye 1: Izicelo, Ama-Microservices, Neziqukathi

Uma ungabaza ukuthi i-Kubernetes ingafundwa ngokushesha kangaka, ngiphakamisa ukuthi uzame ngokwakho. Okungukuthi, njengoba usuwazi kahle le nto, uzokwazi ukusebenzisa uhlelo lokusebenza olususelwe kuma-microservices kuqoqo le-Kubernetes. Ngingakuqinisekisa lokhu, njengoba kuyindlela efanayo ncamashi esetshenziswa lapha ukuthi ngifundise amakhasimende ethu ukusebenza noKubernetes. Yini eyenza lo mhlahlandlela wehluke kwabanye? Eqinisweni, ziningi izinto. Ngakho-ke, eziningi zalezi zinto ziqala ngencazelo yezinto ezilula - imiqondo ye-Kubernetes kanye nezici zomyalo we-kubectl. Ababhali balezi zinsiza bacabanga ukuthi abafundi bazo bajwayele ukuthuthukiswa kohlelo lokusebenza, ama-microservices, neziqukathi ze-Docker. Sizohamba ngenye indlela. Okokuqala, sizokhuluma ngokuthi singalusebenzisa kanjani uhlelo olusekelwe kuma-microservices kukhompyutha. Bese sizobheka ukwakha izithombe zeziqukathi ze-microservice ngayinye. Futhi ngemva kwalokho, sizojwayelana ne-Kubernetes futhi sibheke ukuthumela uhlelo lokusebenza olusekelwe kuma-microservices kuqoqo eliphethwe yi-Kubernetes.

Le ndlela, ngendlela eya kancane kancane ku-Kubernetes, izonikeza ukujula kokuqonda okwenzekayo okudingekayo kumuntu ovamile ukuze aqonde ukuthi konke kusebenza kanjani ku-Kubernetes. I-Kubernetes iwubuchwepheshe obulula, inqobo nje uma labo abafuna ukubufunda bazi ukuthi busetshenziswa kuphi futhi kanjani.

Manje, ngaphandle kokuchitha isikhathi, ake siqale futhi sikhulume ngohlelo lokusebenza esizosebenza nalo.

Uhlelo lokusebenza lokuhlola

Uhlelo lwethu lokusebenza luzokwenza umsebenzi owodwa kuphela. Kuthatha umusho owodwa njengokufakwayo, emva kwalokho, ngokusebenzisa amathuluzi okuhlaziya umbhalo, yenza ukuhlaziywa kwemizwelo yalo musho, ukuthola ukuhlolwa kwesimo sengqondo sombhali womusho entweni ethile.

Yile ndlela iwindi elikhulu lalolu hlelo lokusebenza elibukeka ngayo.

Okokufundisa kwe-Kubernetes Ingxenye 1: Izicelo, Ama-Microservices, Neziqukathi
Isicelo sewebhu sokuhlaziya imizwa yemibhalo

Ngokombono wezobuchwepheshe, uhlelo lokusebenza luqukethe ama-microservices amathathu, ngalinye elixazulula isethi ethile yemisebenzi:

  • I-SA-Frontend iyiseva yewebhu ye-Nginx enikezela ngamafayela e-React amile.
  • I-SA-WebApp iyisicelo sewebhu esibhalwe ku-Java esicubungula izicelo ezivela phambili.
  • I-SA-Logic iyisicelo sePython esenza ukuhlaziya imizwa embhalweni.

Kubalulekile ukuqaphela ukuthi ama-microservices awekho wodwa. Basebenzisa umqondo "wokuhlukaniswa kwemithwalo yemfanelo", kodwa ngesikhathi esifanayo badinga ukuxhumana nomunye nomunye.

Okokufundisa kwe-Kubernetes Ingxenye 1: Izicelo, Ama-Microservices, Neziqukathi
Idatha igeleza kuhlelo lokusebenza

Kumdwebo ongenhla, ungabona izigaba ezinenombolo zohlelo, okubonisa ukuhamba kwedatha kuhlelo lokusebenza. Ake sibheke kubo:

  1. Isiphequluli sicela ifayela kuseva index.html (okuyinto, elanda iphakheji yohlelo lokusebenza lwe-React).
  2. Umsebenzisi usebenzisana nohlelo lokusebenza, lokhu kubangela ucingo kuhlelo lokusebenza lwewebhu olusekelwe eNtwasahlobo.
  3. Uhlelo lokusebenza lwewebhu ludlulisela isicelo sokuhlaziya umbhalo kuhlelo lokusebenza lwePython.
  4. Uhlelo lokusebenza lwePython lwenza ukuhlaziya imizwa yombhalo bese lubuyisela umphumela njengempendulo yesicelo.
  5. Uhlelo lokusebenza lwe-Spring luthumela impendulo kuhlelo lokusebenza lwe-React (olubuye lubonise umphumela wokuhlaziywa kombhalo kumsebenzisi).

Ikhodi yazo zonke lezi zinhlelo zokusebenza ingatholakala lapha. Ngincoma ukuthi uzikopishele le nqolobane njengamanje, njengoba kukhona izivivinyo eziningi ezithokozisayo ngayo ngaphambi kwethu.

Ukusebenzisa uhlelo lokusebenza olususelwe kuma-microservices emshinini wangakini

Ukuze isicelo sisebenze, sidinga ukuqala wonke ama-microservices amathathu. Ake siqale ngezinhle kunazo zonke - uhlelo lokusebenza olungaphambili.

▍Misa i-React ukuze uthuthuke endaweni

Ukuze usebenzise uhlelo lwe-React, udinga ukufaka inkundla ye-Node.js kanye ne-NPM kukhompyutha yakho. Uma usufake konke lokhu, sebenzisa itheminali ukuze uye kufolda yephrojekthi yakho sa-frontend bese ugijima umyalo olandelayo:

npm install

Ngokusebenzisa lo myalo kufolda node_modules ukuncika kwesicelo se-React kuzolayishwa, amarekhodi akhona kufayela package.json. Uma ukuncika kulandwe kufolda efanayo, sebenzisa umyalo olandelayo:

npm start

Yilokho kuphela. Manje uhlelo lwe-React luyasebenza, ungalufinyelela ngokuya ekhelini elilandelayo esipheqululini sakho: localhost:3000. Ungashintsha okuthile kukhodi yayo. Uzobona ngokushesha umphumela walezi zinguquko esipheqululini. Lokhu kungenzeka ngenxa yalokho okubizwa ngokuthi "okushisayo" esikhundleni samamojula. Lokhu kwenza ukuthuthukiswa kwe-front-end kube yinto elula futhi ejabulisayo.

▍Ukulungiselela uhlelo lokusebenza lwe-React lokukhiqiza

Ngenhloso yokusebenzisa uhlelo lokusebenza lwe-React, sidinga ukuliguqulela libe yisethi yamafayela amile futhi siwanikeze amaklayenti asebenzisa iseva yewebhu.

Ukwakha uhlelo lokusebenza lwe-React, futhi usebenzisa itheminali, zulazulela kufolda sa-frontend bese ugijima umyalo olandelayo:

npm run build

Lokhu kuzodala uhla lwemibhalo kufolda yephrojekthi build. Izoqukatha wonke amafayela amile adingekayo ukuze uhlelo lokusebenza lwe-React lusebenze.

▍ Inikeza amafayela amile kusetshenziswa i-Nginx

Okokuqala udinga ukufaka nokusebenzisa iseva yewebhu ye-Nginx. kuyinto ungayilanda futhi uthole imiyalelo yokuthi ungayifaka kanjani futhi uyiqhube kanjani. Bese udinga ukukopisha okuqukethwe kwefolda sa-frontend/build kufolda [your_nginx_installation_dir]/html.

Ngale ndlela, ifayela elakhiwe phakathi nenqubo yokwakha yohlelo lokusebenza lwe-React index.html izotholakala ngo [your_nginx_installation_dir]/html/index.html. Leli yifayela, ngokuzenzakalelayo, iseva ye-Nginx elikhiqizayo lapho ulifinyelela. Iseva ilungiselelwe ukuthi ilalele embobeni 80, kodwa ingenziwa ngendlela oyidingayo ngokuhlela ifayela [your_nginx_installation_dir]/conf/nginx.conf.

Manje vula isiphequluli sakho bese uya ku localhost:80. Uzobona ikhasi lohlelo lokusebenza lwe-React.

Okokufundisa kwe-Kubernetes Ingxenye 1: Izicelo, Ama-Microservices, Neziqukathi
Uhlelo lokusebenza olusabelayo olunikezwa iseva ye-Nginx

Uma manje ufaka okuthile ensimini Type your sentence bese ucindezela inkinobho Send - akukho okuzokwenzeka. Kodwa, uma ubheka ikhonsoli, ungabona imilayezo yephutha lapho. Ukuze uqonde ukuthi la maphutha avela kuphi ngempela, ake sihlaziye ikhodi yohlelo lokusebenza.

▍ Ukuhlaziywa kwekhodi yohlelo lokusebenza ekupheleni

Ukubheka ikhodi yefayela App.js, singabona ukuthi ngokucindezela inkinobho Send ibiza indlela analyzeSentence(). Ikhodi yale ndlela inikezwe ngezansi. Sicela uqaphele ukuthi kulayini ngamunye onokuphawula kwefomu # Номер, kunencazelo enikezwe ngezansi kwekhodi. Sizohlaziya ezinye izingcezu zekhodi 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 okwenziwa kuyo isicelo se-POST. Kucatshangwa ukuthi kukhona isicelo kuleli kheli esilindele izicelo ezinjalo.

2.Umzimba wesicelo uthunyelwe esicelweni. Nasi isibonelo somzimba wesicelo:

{
    sentence: "I like yogobella!"
}

3.Uma impendulo yesicelo yamukelwe, isimo sengxenye siyabuyekezwa. Lokhu kubangela ukuthi ingxenye inikezwe kabusha. Uma sithola idatha (okungukuthi, into ye-JSON equkethe idatha yokokufaka kanye nesikolo sombhalo obaliwe), sizokhipha ingxenye Polarity, njengoba izimo ezifanele zizohlangatshezwana nazo. Nansi indlela esichaza ngayo ingxenye:

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

Ikhodi ibonakala isebenza kahle kakhulu. Yini engalungile ngalokhu, noma kunjalo? Uma ucabanga ukuthi ekhelini lapho isicelo sizama ukuthumela khona isicelo OKUTHUNYELWE, akukho lutho okwamanje olungamukela futhi lucubungule lesi sicelo, lapho-ke uzobe ulungile ngokuphelele. Okungukuthi, ukucubungula izicelo ezitholwe ku http://localhost:8080/sentiment, sidinga ukusebenzisa uhlelo lwewebhu olusekelwe ku-Spring.

Okokufundisa kwe-Kubernetes Ingxenye 1: Izicelo, Ama-Microservices, Neziqukathi
Sidinga isicelo saseNtwasahlobo esingamukela isicelo OKUTHUNYELWE

▍ Ukusetha uhlelo lokusebenza lwewebhu olususelwe eNtwasahlobo

Ukuze usebenzise uhlelo lokusebenza lwe-Spring, uzodinga i-JDK8 ne-Maven kanye nokuguquguquka kwemvelo okulungiselelwe kahle. Uma usufake konke lokhu, ungaqhubeka nokusebenza kuphrojekthi yethu.

▍Ukupakisha uhlelo lokusebenza kufayela lembiza

Zulazula, usebenzisa itheminali, uye kufolda sa-webapp bese ufaka umyalo olandelayo:

mvn install

Ngemva kokusebenzisa lo myalo kufolda sa-webapp kuzokwenziwa uhla lwemibhalo target. Lapha kulapho uhlelo lwe-Java luzotholakala khona, lupakishwe kufayela lembiza, elimelwe ifayela sentiment-analysis-web-0.0.1-SNAPSHOT.jar.

▍Ukuqalisa uhlelo lwe-Java

Iya kufolda target bese usebenzisa uhlelo lokusebenza ngomyalo olandelayo:

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

Kuzokwenzeka iphutha ngenkathi kusetshenziswa lo myalo. Ukuze siqale ukuyilungisa, singahlaziya imininingwane ehlukile kudatha yokulandela isitaki:

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, into ebaluleke kakhulu lapha ukukhuluma ngokungenakwenzeka kokucacisa incazelo sa.logic.api.url. Ake sihlaziye ikhodi lapho iphutha lenzeka khona.

▍ Ukuhlaziywa kwekhodi yohlelo lokusebenza lwe-Java

Nawa amazwibela ekhodi lapho iphutha lenzeka 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. Ku-SentimentController kukhona insimu saLogicApiUrl. Inani layo licaciswa yisakhiwo sa.logic.api.url.
  2. Ulayini saLogicApiUrl ihambisana nevelu /analyse/sentiment. Bebonke bakha ikheli lokushaya ucingo kwi-microservice eyenza ukuhlaziya umbhalo.

▍Setha inani lesakhiwo

Entwasahlobo, umthombo ojwayelekile wamanani ezakhiwo uyifayela application.properties, engatholakala ku sa-webapp/src/main/resources. Kodwa ukusetshenziswa kwayo akuyona ukuphela kwendlela yokusetha amanani ezakhiwo. Lokhu kungenziwa futhi ngokusebenzisa umyalo olandelayo:

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

Inani lalesi sakhiwo kufanele likhombe ekhelini lesicelo sethu sePython.

Ngokuyilungisa, sitshela uhlelo lokusebenza lwewebhu lwaseNtwasahlobo lapho ludinga ukuya khona ukuze lwenza izicelo zokuhlaziya umbhalo.

Ukuze singafaki impilo yethu inkimbinkimbi, sizonquma ukuthi isicelo sePython sizotholakala ku localhost:5000 futhi ake sizame ukungakhohlwa ngakho. Ngenxa yalokho, umyalo wokwethula uhlelo lokusebenza lwe-Spring uzobukeka kanje:

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

Okokufundisa kwe-Kubernetes Ingxenye 1: Izicelo, Ama-Microservices, Neziqukathi
Uhlelo lwethu lushoda ngohlelo lwePython

Manje okumele sikwenze ukusebenzisa uhlelo lwePython futhi uhlelo luzosebenza njengoba bekulindelekile.

▍ Ukusetha uhlelo lwePython

Ukuze usebenzise uhlelo lwe-Python, kufanele ufake i-Python 3 ne-Pip, futhi okuguquguqukayo kwendawo efanele kufanele kusethwe ngendlela efanele.

▍Ifaka okuncikile

Iya kufolda yephrojekthi yakho sa-logic/sa bese ugijima imiyalo elandelayo:

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

▍Yethula uhlelo lokusebenza

Ngemva kokufaka okuncikile, sesilungele ukusebenzisa uhlelo lokusebenza:

python sentiment_analysis.py

Ngemva kokusebenzisa lo myalo sizotshelwa okulandelayo:

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

Lokhu kusho ukuthi isicelo siyasebenza futhi silinde izicelo ngo localhost:5000/

▍ Ucwaningo Lwekhodi

Ake sibheke ikhodi yesicelo sePython ukuze siqonde ukuthi iphendula kanjani izicelo:

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. Iqalisa into Flask.
  2. Icacisa ikheli lokwenza izicelo ze-POST kuyo.
  3. Ukubuyisa Isakhiwo sentence kusuka kumgwamanda wesicelo.
  4. Ukuqala Into Engaziwa TextBlob nokuthola inani polarity ngomusho wokuqala otholwe emzimbeni wesicelo (kithi, lesi sigwebo kuphela esithunyelwe ukuze sihlaziywe).
  5. Ukubuyisela impendulo umzimba wayo oqukethe umbhalo womusho kanye nenkomba yayo ebaliwe polarity.
  6. Yethula isicelo se-Flask, esizotholakala ku- 0.0.0.0:5000 (ungafinyelela futhi usebenzisa ukwakhiwa kwefomu localhost:5000).

Ama-microservices akha uhlelo lokusebenza manje ayasebenza. Bacushwe ukuxhumana nomunye. Yile ndlela umdwebo wohlelo lokusebenza obukeka ngayo kulesi sigaba somsebenzi.

Okokufundisa kwe-Kubernetes Ingxenye 1: Izicelo, Ama-Microservices, Neziqukathi
Wonke ama-microservices akha uhlelo lokusebenza alethwa ukuze asebenze

Manje, ngaphambi kokuthi uqhubeke, vula uhlelo lwakho lokusebenza lwe-React kusiphequluli bese uzama ukuncozulula umusho othile ngaso. Uma konke kwenziwa ngendlela efanele - ngemva kokucindezela inkinobho Send uzobona imiphumela yokuhlaziya ngezansi kwenkambu yombhalo.

Esigabeni esilandelayo, sizokhuluma ngendlela yokusebenzisa ama-microservices ethu ezitsheni ze-Docker. Lokhu kuyadingeka ukuze ulungiselele uhlelo lokusebenza ukuthi lusebenze kuqoqo le-Kubernetes.

Iziqukathi ze-Docker

Kubernetes iwuhlelo lokuzenzakalela ukuthunyelwa, ukukala nokuphathwa kwezicelo ezifakwe emabhokisini. Ibizwa nangokuthi "i-orchestrator yesiqukathi". Uma uKubernetes esebenza neziqukathi, ngaphambi kokusebenzisa lolu hlelo kufanele siqale sithole lezi zitsha. Kodwa okokuqala, ake sikhulume ngokuthi ziyini iziqukathi. Mhlawumbe impendulo engcono kakhulu yombuzo wokuthi kuyini ingatholakala kuyo imibhalo ku-Docker:

Isithombe sesiqukathi siyiphakheji engasindi, eziqukethwe ngokwaso, esebenzisekayo equkethe uhlelo lokusebenza, ehlanganisa yonke into edingekayo ukuze iluqalise: ikhodi yohlelo, indawo yokusebenza, amathuluzi esistimu nemitapo yolwazi, izilungiselelo. Izinhlelo ezifakwe ku-Container zingasetshenziswa ezindaweni ze-Linux ne-Windows, futhi zizohlala zisebenza ngendlela efanayo ngaphandle kwengqalasizinda.

Lokhu kusho ukuthi iziqukathi zingasetshenziswa kunoma iyiphi ikhompuyutha, okuhlanganisa amaseva okukhiqiza, futhi izinhlelo zokusebenza eziqukethwe kuzo zizosebenza ngendlela efanayo kunoma iyiphi indawo.

Ukuhlola izici zeziqukathi futhi uziqhathanise nezinye izindlela zokuqalisa izinhlelo zokusebenza, ake sibheke isibonelo sokuphakela uhlelo lwe-React usebenzisa umshini obonakalayo nesiqukathi.

▍ Inikeza amafayela amile ohlelo lokusebenza lwe-React kusetshenziswa umshini obonakalayo

Ukuzama ukuhlela isevisi yamafayela amile kusetshenziswa imishini ebonakalayo, sizohlangabezana nezinkinga ezilandelayo:

  1. Ukusetshenziswa okungalungile kwezinsiza, njengoba umshini ngamunye obonakalayo uwuhlelo olugcwele lokusebenza.
  2. Ukuncika kwenkundla. Okusebenza kukhompyutha yendawo kungase kungasebenzi kuseva yokukhiqiza.
  3. Ukukala okunensayo nokunamandla kwensiza kwesixazululo esisekelwe emshinini esibonakalayo.

Okokufundisa kwe-Kubernetes Ingxenye 1: Izicelo, Ama-Microservices, Neziqukathi
Iseva yewebhu ye-Nginx isebenzisa amafayela amile asebenza emshinini obonakalayo

Uma iziqukathi zisetshenziselwa ukuxazulula inkinga efanayo, khona-ke, uma kuqhathaniswa nemishini ebonakalayo, amandla alandelayo angaqashelwa:

  1. Ukusetshenziswa kahle kwezinsiza: ukusebenza nohlelo lokusebenza usebenzisa i-Docker.
  2. Inkundla izimele. Isiqukathi unjiniyela angasisebenzisa kukhompuyutha yakhe sizosebenza noma yikuphi.
  3. Ukusabalalisa okulula ngokusebenzisa izendlalelo zesithombe.

Okokufundisa kwe-Kubernetes Ingxenye 1: Izicelo, Ama-Microservices, Neziqukathi
Iseva yewebhu ye-Nginx isebenzisa amafayela amile asebenza esitsheni

Siqhathanise kuphela imishini ebonakalayo neziqukathi emaphuzwini ambalwa, kodwa ngisho nalokhu kwanele ukuze uthole umuzwa wamandla eziqukathi. kuyinto Ungathola imininingwane mayelana neziqukathi ze-Docker.

▍Ukwakha isithombe sesitsha sohlelo lokusebenza lwe-React

Isakhiwo esiyisisekelo sesitsha se-Docker yifayela Dockerfile. Ekuqaleni kwaleli fayela, irekhodi lenziwe ngesithombe esiyisisekelo sesitsha, bese kuba nokulandelana kweziqondiso ezibonisa ukuthi ungakha kanjani isitsha esizohlangabezana nezidingo zesicelo esithile.

Ngaphambi kokuthi siqale ukusebenza ngefayela Dockerfile, masikhumbule ukuthi senzeni ukuze silungiselele amafayela ohlelo lwe-React ukuze alayishwe kuseva ye-Nginx:

  1. Ukwakha iphakheji yesicelo se-React (npm run build).
  2. Iqala iseva ye-Nginx.
  3. Ikopisha okuqukethwe kohla lwemibhalo build kusuka kufolda yephrojekthi sa-frontend kufolda yeseva nginx/html.

Ngezansi ungabona ukufana phakathi kokwenza isiqukathi kanye nezinyathelo ezingenhla ezenziwa kukhompuyutha yakho yangakini.

▍Ukulungiselela i-Dockerfile yohlelo lokusebenza lwe-SA-Frontend

Imiyalo ezoqukethwe ku Dockerfile kwesicelo SA-Frontend, inamaqembu amabili kuphela. Iqiniso liwukuthi ithimba lokuthuthukisa i-Nginx lilungiselele okuyisisekelo isithombe ye-Nginx, esizoyisebenzisa ukudala isithombe sethu. Lezi yizinyathelo ezimbili okudingeka sizichaze:

  1. Isisekelo sesithombe kufanele sibe isithombe se-Nginx.
  2. Okuqukethwe Kwefolda sa-frontend/build idinga ukukopishelwa kufolda yesithombe nginx/html.

Uma usuka kule ncazelo uye kufayela Dockerfile, khona-ke izobukeka kanje:

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

Njengoba ubona, yonke into lapha ilula kakhulu, futhi okuqukethwe ifayela kuze kube efundekayo ngempela futhi kuyaqondakala. Leli fayela litshela isistimu ukuthi ithathe isithombe nginx ngayo yonke into ekhona kakade, bese ukopisha okuqukethwe kuhla lwemibhalo build kuhla lwemibhalo nginx/html.

Lapha ungase ube nombuzo mayelana nokuthi ngazi kanjani ukuthi udinga ukukopisha amafayela kufolda build, okungukuthi, lapho indlela yavela khona /usr/share/nginx/html. Eqinisweni, akukho lutho oluyinkimbinkimbi nalapha. Iqiniso liwukuthi ulwazi olufanele lungatholakala ku incazelo isithombe.

▍Ukwakha isithombe bese usilayisha endaweni yokugcina

Ngaphambi kokuthi sisebenze ngesithombe esiqediwe, sidinga ukusiphushela endaweni yokugcina izithombe. Ukwenza lokhu, sizosebenzisa isiteji samahhala sokubamba isithombe samafu i-Docker Hub. Kulesi sigaba somsebenzi udinga ukwenza okulandelayo:

  1. Faka Docker.
  2. Bhalisa kuwebhusayithi ye-Docker Hub.
  3. Ngena ngemvume ku-akhawunti yakho ngokusebenzisa umyalo olandelayo kutheminali:
    docker login -u="$DOCKER_USERNAME" -p="$DOCKER_PASSWORD"

Manje udinga ukusebenzisa i-terminal ukuya kumkhombandlela sa-frontend bese ugijima umyalo olandelayo lapho:

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

Lapha futhi eminye imiyalo efanayo $DOCKER_USER_ID kufanele kushintshwe igama lakho lomsebenzisi le-Docker Hub. Isibonelo, le ngxenye yomyalo ingase ibukeke kanje: rinormaloku/sentiment-analysis-frontend.

Kulokhu, lo myalo ungafushaniswa ngokususa kuwo -f Dockerfile, njengoba leli fayela selivele likhona kufolda lapho senza khona lo myalo.

Ukuze sithumele isithombe esiqediwe endaweni yokugcina, sidinga umyalo olandelayo:

docker push $DOCKER_USER_ID/sentiment-analysis-frontend

Ngemva kokusiqeda, hlola uhlu lwamakhosombe akho ku-Docker Hub ukuze uqonde ukuthi ukulayishwa kwesithombe kusitoreji samafu kube yimpumelelo yini.

▍Ukusebenzisa isiqukathi

Manje noma ubani angalanda futhi asebenzise isithombe, esaziwa ngokuthi $DOCKER_USER_ID/sentiment-analysis-frontend. Ukuze wenze lokhu, udinga ukusebenzisa ukulandelana kwemiyalelo elandelayo:

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

Manje isiqukathi siyasebenza, singaqhubeka nokusebenza ngokwakha ezinye izithombe esizidingayo. Kodwa ngaphambi kokuba siqhubeke, ake siqonde umklamo 80:80, okuvela kumyalo wokwethulwa kwesithombe futhi kungase kubonakale kudida.

  • Inombolo yokuqala 80 — lena inombolo yembobo yesikhungo (okungukuthi, ikhompuyutha yendawo).
  • Inombolo yesibili 80 iyichweba lebhokisi lapho isicelo kufanele sidluliselwe khona.

Cabangela umfanekiso olandelayo.

Okokufundisa kwe-Kubernetes Ingxenye 1: Izicelo, Ama-Microservices, Neziqukathi
Ukudluliswa Kwembobo

Uhlelo luqondisa kabusha izicelo ezivela embobeni <hostPort> ethekwini <containerPort>. Okungukuthi, ukufinyelela echwebeni 80 ikhompuyutha iqondiswe kabusha ethekwini 80 isitsha.

Kusukela ethekwini 80 kuvulwe kukhompuyutha yendawo, bese ungafinyelela uhlelo lokusebenza kule khompyutha kokuthi localhost:80. Uma uhlelo lwakho lungasekeli i-Docker, uhlelo lokusebenza lungasebenza emshinini we-Docker virtual, ikheli lawo elizobukeka njenge <docker-machine ip>:80. Ukuthola ikheli le-IP lomshini we-Docker virtual, ungasebenzisa umyalo docker-machine ip.

Kuleli qophelo, ngemva kokwethula ngempumelelo isiqukathi sohlelo lokusebenza esisekupheleni, kufanele ukwazi ukuvula ikhasi laso kusiphequluli.

▍Ifayela elithi .dockerignore

Iqoqa isithombe sohlelo lokusebenza SA-Frontend, singaqaphela ukuthi le nqubo ibonakala ihamba kancane kakhulu. Lokhu kwenzeka ngoba umongo wokwakha isithombe kufanele uthunyelwe ku-Docker daemon. Uhla lwemibhalo olumelela umongo wokwakha lucaciswe njengengxabano yokugcina yomyalo docker build. Esimweni sethu, kunechashazi ekugcineni kwalo myalo. Lokhu kubangela ukuthi isakhiwo esilandelayo sifakwe kumongo wokwakha:

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

Kodwa kuwo wonke amafolda akhona lapha, sidinga ifolda kuphela build. Ukulayisha noma yini enye kuwukumosha isikhathi. Ungakwazi ukusheshisa ukwakha ngokutshela i-Docker ukuthi yiziphi izinkomba okufanele uzibe. Ukuze senze lokhu sidinga ifayela .dockerignore. Wena, uma ujwayele ifayela .gitignore, ukwakheka kwaleli fayela cishe kuzobonakala kujwayelekile. Ibala izinkomba isistimu yokwakha isithombe engaziba. Esimweni sethu, okuqukethwe kwaleli fayela kubukeka kanjena:

node_modules
src
public

Файл .dockerignore kufanele ibe kufolda efanayo nefayela Dockerfile. Manje ukwakha isithombe kuzothatha imizuzwana.

Manje ake sisebenze esithombeni sohlelo lokusebenza lwe-Java.

▍Ukwakha isithombe sesitsha sohlelo lokusebenza lwe-Java

Uyazi ukuthini, usufunde konke odinga ukukwazi ukuze udale izithombe zesiqukathi. Yingakho lesi sigaba sizoba sifushane kakhulu.

Vula ifayela Dockerfileekufolda yephrojekthi sa-webapp. Uma ufunda umbhalo waleli fayela, uzobona ukwakhiwa okusha okubili kuphela kulo, kuqala ngamagama angukhiye ENV и EXPOSE:

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

Igama elingukhiye ENV Ikuvumela ukuthi umemezele okuguquguqukayo kwendawo ngaphakathi kweziqukathi ze-Docker. Ikakhulukazi, esimweni sethu, ikuvumela ukuthi ucacise i-URL ukuze ufinyelele i-API yohlelo lokusebenza eyenza ukuhlaziya umbhalo.

Igama elingukhiye EXPOSE ikuvumela ukuthi utshele i-Docker ukuthi ivule ichweba. Sizosebenzisa lesi sikhungo ngenkathi sisebenzisa uhlelo. Lapha ungaqaphela ukuthi ku Dockerfile kwesicelo SA-Frontend awukho umyalo onjalo. Lokhu kwenzelwa izinjongo zemibhalo kuphela, ngamanye amazwi, lokhu kwakhiwa kuhloselwe lowo ozofunda Dockerfile.

Ukwakha isithombe bese usiphushela endaweni yokugcina kubukeka kufana ncamashi nesibonelo sangaphambilini. Uma ungakazithembi kakhulu ngamakhono akho, imiyalo ehambisanayo ingatholakala efayeleni README.md kufolda sa-webapp.

▍Ukwakha isithombe sesitsha sohlelo lokusebenza lwePython

Uma ubheka okuqukethwe yifayela Dockerfile kufolda sa-logic, khona-ke ngeke uzitholele lutho olusha lapho. Imiyalo yokwakha isithombe nokusithumela endaweni yokugcina kufanele futhi ube uyayazi kakade, kodwa, njengezinye izinhlelo zokusebenza zethu, ingatholakala efayeleni. README.md kufolda sa-logic.

▍Ihlola izinhlelo zokusebenza ezifakwe esitsheni

Ungayethemba into ongayihlolanga? Nami angikwazi. Ake sihlole iziqukathi zethu.

  1. Masiqalise isiqukathi sohlelo lokusebenza sa-logic futhi uyilungiselele ukuthi ilalele ethekwini 5050:
    docker run -d -p 5050:5000 $DOCKER_USER_ID/sentiment-analysis-logic
  2. Masiqalise isiqukathi sohlelo lokusebenza sa-webapp futhi uyilungiselele ukuthi ilalele ethekwini 8080. Ngaphezu kwalokho, sidinga ukulungisa ichweba lapho uhlelo lwePython luzolalela khona izicelo zohlelo lwe-Java ngokunikeza kabusha ukuguquguquka kwemvelo. 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

Ukuze ufunde ukuthi ungalithola kanjani ikheli le-IP lesiqukathi se-Docker noma umshini obonakalayo, bheka ifayela README.

Masiqalise isiqukathi sohlelo lokusebenza sa-frontend:

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

Manje yonke into isilungele ukuya ekhelini esipheqululini localhost:80 bese uzama uhlelo lokusebenza.

Sicela uqaphele ukuthi uma ushintshe ichweba ukuze sa-webapp, noma uma usebenzisa umshini we-Docker virtual, uzodinga ukuhlela ifayela App.js kusuka kufolda sa-frontendngokushintsha ikheli le-IP noma inombolo yembobo endleleni analyzeSentence(), esikhundleni solwazi lwamanje esikhundleni sedatha ephelelwe yisikhathi. Ngemuva kwalokhu, udinga ukuhlanganisa kabusha isithombe bese usisebenzisa.

Yile ndlela umdwebo wethu wohlelo lokusebenza obukeka ngayo manje.

Okokufundisa kwe-Kubernetes Ingxenye 1: Izicelo, Ama-Microservices, Neziqukathi
Ama-Microservices asebenza ezitsheni

Isifinyezo: kungani sidinga iqoqo le-Kubernetes?

Sisanda kuhlola amafayela Dockerfile, ukhulume ngendlela yokwakha izithombe futhi uziphushele endaweni yokugcina i-Docker. Ngaphezu kwalokho, sifunde indlela yokusheshisa ukuhlanganiswa kwesithombe usebenzisa ifayela .dockerignore. Njengomphumela, ama-microservices ethu manje asebenza ezitsheni ze-Docker. Lapha ungase ube nombuzo onesizathu esiphelele sokuthi kungani sidinga i-Kubernetes. Ingxenye yesibili yalesi sihloko izonikelwa ekuphenduleni lo mbuzo. Okwamanje, cabangela lo mbuzo olandelayo:
Ake sicabange ukuthi isicelo sethu sewebhu sokuhlaziya umbhalo sesidume umhlaba wonke. Izigidi zezicelo ziza kuye umzuzu nomzuzu. Lokhu kusho ukuthi ama-microservices sa-webapp и sa-logic izoba ngaphansi komthwalo omkhulu. Ungazikala kanjani iziqukathi ezisebenzisa ama-microservices?

Okokufundisa kwe-Kubernetes Ingxenye 1: Izicelo, Ama-Microservices, Neziqukathi

Source: www.habr.com

Engeza amazwana