Kubernetes Tutorial Parti 1: Applikazzjonijiet, Mikroservizzi, u Kontenituri
Fuq talba tagħna, Habr ħoloq hub Kubernetes u bi pjaċir inpoġġu l-ewwel pubblikazzjoni fiha. Abbona!
Kubernetes huwa faċli. Għaliex il-banek iħallsuni ħafna flus biex naħdem f’dan il-qasam, filwaqt li kulħadd jista’ jaħkem din it-teknoloġija fi ftit sigħat biss?
Jekk tiddubita li Kubernetes jista' jitgħallem daqshekk malajr, nissuġġerixxi li tipprovaha lilek innifsek. Jiġifieri, wara li tkun ħakmu dan il-materjal, tkun tista' tħaddem applikazzjoni bbażata fuq mikroservizzi fi cluster Kubernetes. Nista' niggarantixxi dan, peress li hija preċiżament l-istess metodoloġija użata hawn li ngħallem lill-klijenti tagħna jaħdmu ma' Kubernetes. X'jagħmel din il-gwida differenti minn oħrajn? Fil-fatt, hemm ħafna affarijiet. Allura, ħafna minn dawn il-materjali jibdew bi spjegazzjoni ta 'affarijiet sempliċi - il-kunċetti ta' Kubernetes u l-karatteristiċi tal-kmand kubectl. L-awturi ta 'dawn il-materjali jassumu li l-qarrejja tagħhom huma familjari mal-iżvilupp tal-applikazzjonijiet, il-mikroservizzi, u l-kontenituri Docker. Se mmorru triq oħra. L-ewwel, ser nitkellmu dwar kif tħaddem applikazzjoni bbażata fuq mikroservizzi fuq kompjuter. Imbagħad inħarsu lejn il-bini ta' immaġini tal-kontejners għal kull mikroservizz. U wara dan, inkunu familjari ma’ Kubernetes u nħarsu lejn l-iskjerament ta’ applikazzjoni bbażata fuq mikroservizzi f’cluster immexxi minn Kubernetes.
Dan l-approċċ, b'approċċ gradwali għal Kubernetes, se jagħti l-profondità ta 'fehim ta' dak li qed jiġri li huwa meħtieġ għall-persuna medja sabiex tifhem kif sempliċement jaħdem kollox f'Kubernetes. Kubernetes ċertament hija teknoloġija sempliċi, sakemm dawk li jridu jitgħallmuha jkunu jafu fejn u kif tintuża.
Issa, mingħajr aktar dewmien, ejja nibdew u nitkellmu dwar l-applikazzjoni li se nkunu qed naħdmu magħha.
Applikazzjoni sperimentali
L-applikazzjoni tagħna se twettaq funzjoni waħda biss. Huwa jieħu sentenza waħda bħala input, u wara, bl-użu ta 'għodod ta' analiżi tat-test, iwettaq analiżi tas-sentiment ta 'din is-sentenza, u jikseb valutazzjoni tal-attitudni emozzjonali tal-awtur tas-sentenza għal ċertu oġġett.
Dan huwa kif tidher it-tieqa ewlenija ta 'din l-applikazzjoni.
Mil-lat tekniku, l-applikazzjoni tikkonsisti fi tliet mikroservizzi, li kull wieħed minnhom isolvi sett speċifiku ta 'problemi:
SA-Frontend huwa server tal-web Nginx li jservi fajls React statiċi.
SA-WebApp hija applikazzjoni tal-web miktuba bil-Java li tipproċessa talbiet mill-frontend.
SA-Logic hija applikazzjoni Python li twettaq analiżi tas-sentiment fuq it-test.
Huwa importanti li wieħed jinnota li l-mikroservizzi ma jeżistux waħedhom. Huma jimplimentaw l-idea ta '"separazzjoni tar-responsabbiltajiet", iżda fl-istess ħin jeħtieġ li jinteraġixxu ma' xulxin.
Id-dejta tiċċirkola fl-applikazzjoni
Fid-dijagramma ta 'hawn fuq, tista' tara l-istadji numerati tas-sistema, li juru l-flussi tad-dejta fl-applikazzjoni. Ejja nħarsu lejhom:
Il-browser jitlob fajl mis-server index.html (li, min-naħa tiegħu, tniżżel il-pakkett tal-applikazzjoni React).
L-utent jinteraġixxi mal-applikazzjoni, dan jikkawża sejħa għall-applikazzjoni tal-web ibbażata fuq ir-Rebbiegħa.
L-applikazzjoni tal-web tibgħat it-talba biex titwettaq analiżi tat-test lill-applikazzjoni Python.
L-applikazzjoni Python twettaq analiżi tas-sentiment tat-test u tirritorna r-riżultat bħala tweġiba għat-talba.
L-applikazzjoni tar-Rebbiegħa tibgħat tweġiba lill-applikazzjoni React (li, min-naħa tagħha, turi r-riżultat tal-analiżi tat-test lill-utent).
Il-kodiċi għal dawn l-applikazzjonijiet kollha jistgħu jinstabu hawn. Nirrakkomanda li tikkopja dan ir-repożitorju għalik innifsek issa, peress li hemm ħafna esperimenti interessanti magħha quddiemna.
Tmexxi applikazzjoni bbażata fuq mikroservizzi fuq il-magna lokali tiegħek
Sabiex l-applikazzjoni taħdem, irridu nibdew it-tliet mikroservizzi. Nibdew bl-aktar ħelu minnhom kollha - l-applikazzjoni front-end.
▍Twaqqaf React għall-iżvilupp lokali
Sabiex tħaddem applikazzjoni React, għandek bżonn tinstalla l-pjattaforma Node.js u NPM fuq il-kompjuter tiegħek. Ladarba jkollok dan kollu installat, uża t-terminal biex tinnaviga lejn il-folder tal-proġett tiegħek sa-frontend u mexxi l-kmand li ġej:
npm install
Billi tħaddem dan il-kmand fil-folder node_modules id-dipendenzi tal-applikazzjoni React se jiġu mgħobbija, li r-rekords tagħhom jinsabu fil-fajl package.json. Ladarba d-dipendenzi jitniżżlu fl-istess folder, mexxi l-kmand li ġej:
npm start
Dak kollox. Issa l-applikazzjoni React qed taħdem, tista' taċċessaha billi tmur fl-indirizz li ġej fil-browser tiegħek: localhost:3000. Tista 'tbiddel xi ħaġa fil-kodiċi tagħha. Inti se tara immedjatament l-effett ta 'dawn il-bidliet fil-browser. Dan huwa possibbli grazzi għall-hekk imsejħa sostituzzjoni "taħraq" tal-moduli. Dan jagħmel l-iżvilupp front-end esperjenza sempliċi u pjaċevoli.
▍Tħejjija ta' applikazzjoni React għall-produzzjoni
Għall-iskop li fil-fatt nużaw applikazzjoni React, irridu naqilbuha f'sett ta 'fajls statiċi u naqduhom lill-klijenti li jużaw server tal-web.
Biex tibni l-applikazzjoni React, għal darb'oħra billi tuża t-terminal, innaviga lejn il-folder sa-frontend u mexxi l-kmand li ġej:
npm run build
Dan se joħloq direttorju fil-folder tal-proġett build. Se jkun fih il-fajls statiċi kollha meħtieġa biex taħdem l-applikazzjoni React.
▍Jservu fajls statiċi bl-użu ta 'Nginx
L-ewwel trid tinstalla u tħaddem is-server tal-web Nginx. Hawnhekk tista' tniżżelha u ssib struzzjonijiet dwar kif tinstallaha u tħaddem. Imbagħad għandek bżonn tikkopja l-kontenut tal-folder sa-frontend/build għal folder [your_nginx_installation_dir]/html.
B'dan l-approċċ, il-fajl iġġenerat matul il-proċess tal-bini tal-applikazzjoni React index.html se jkunu disponibbli fuq [your_nginx_installation_dir]/html/index.html. Dan huwa l-fajl li, b'mod awtomatiku, is-server Nginx jipproduċi meta jaċċessah. Is-server huwa kkonfigurat biex jisma' fuq il-port 80, iżda jista 'jiġi personalizzat kif għandek bżonn billi teditja l-fajl [your_nginx_installation_dir]/conf/nginx.conf.
Issa tiftaħ il-browser tiegħek u mur fuq localhost:80. Se tara l-paġna tal-applikazzjoni React.
React applikazzjoni moqdija mis-server Nginx
Jekk issa ddaħħal xi ħaġa fil-qasam Type your sentence u agħfas il-buttuna Send - xejn mhu se jiġri. Iżda, jekk tħares lejn il-console, tista 'tara messaġġi ta' żball hemmhekk. Sabiex nifhmu fejn iseħħu eżattament dawn l-iżbalji, ejja nanalizzaw il-kodiċi tal-applikazzjoni.
▍Analiżi tal-kodiċi tal-applikazzjoni ta 'quddiem
Nagħtu ħarsa lejn il-kodiċi tal-fajl App.js, nistgħu naraw li tagħfas il-buttuna Send jitlob metodu analyzeSentence(). Il-kodiċi għal dan il-metodu huwa mogħti hawn taħt. Jekk jogħġbok innota li għal kull linja li għandha kumment tal-formola # Номер, hemm spjegazzjoni mogħtija taħt il-kodiċi. Aħna se nanalizzaw frammenti oħra tal-kodiċi bl-istess mod.
1. Il-URL li għalih issir it-talba POST. Huwa preżunt li hemm applikazzjoni f'dan l-indirizz li tistenna tali talbiet.
2.Il-korp tat-talba mibgħut lill-applikazzjoni. Hawn hu eżempju ta' korp ta' talba:
{
sentence: "I like yogobella!"
}
3.Meta tiġi riċevuta tweġiba għal talba, l-istat tal-komponent jiġi aġġornat. Dan jikkawża li l-komponent jerġa' jiġi mogħti. Jekk nirċievu dejta (jiġifieri oġġett JSON li fih id-dejta tal-input u l-punteġġ tat-test ikkalkulat), aħna noħorġu l-komponent Polarity, peress li se jintlaħqu l-kundizzjonijiet xierqa. Dan huwa kif niddeskrivu l-komponent:
Il-kodiċi jidher li jaħdem pjuttost tajjeb. X'hemm ħażin f'dan, xorta waħda? Jekk tassumi li fl-indirizz fejn l-applikazzjoni qed tipprova tibgħat talba POST, għad m'hemm xejn li jista 'jaċċetta u jipproċessa din it-talba, allura inti tkun assolutament raġun. Jiġifieri, biex tipproċessa talbiet riċevuti fi http://localhost:8080/sentiment, jeħtieġ li nħaddmu applikazzjoni tal-web ibbażata fuq ir-Rebbiegħa.
Għandna bżonn applikazzjoni tar-Rebbiegħa li tista' taċċetta talba POST
▍Twaqqif ta' applikazzjoni tal-web ibbażata fuq ir-Rebbiegħa
Sabiex tiskjera applikazzjoni tar-Rebbiegħa, ser ikollok bżonn JDK8 u Maven u varjabbli ambjentali konfigurati sew. Ladarba jkollok dan kollu installat, tista' tkompli taħdem fuq il-proġett tagħna.
▍Ippakkjar applikazzjoni f'fajl vażett
Innaviga, billi tuża terminal, għall-folder sa-webapp u daħħal il-kmand li ġej:
mvn install
Wara li tmexxi dan il-kmand fil-folder sa-webapp se jinħoloq direttorju target. Dan huwa fejn l-applikazzjoni Java se tkun ippakkjata f'fajl vażett, rappreżentat mill-fajl sentiment-analysis-web-0.0.1-SNAPSHOT.jar.
▍Tmexxi applikazzjoni Java
Mur fil-folder target u mexxi l-applikazzjoni bil-kmand li ġej:
Se jseħħ żball waqt l-eżekuzzjoni ta' dan il-kmand. Biex nibdew nirranġawha, nistgħu nanalizzaw id-dettalji tal-eċċezzjoni fid-dejta tat-traċċa tal-munzell:
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}"
Għalina, l-iktar ħaġa importanti hawnhekk hija li tissemma l-impossibbiltà li tiġi ċċarata t-tifsira sa.logic.api.url. Ejja nanalizzaw il-kodiċi li fih iseħħ l-iżball.
▍Analiżi tal-kodiċi tal-applikazzjoni Java
Hawn hu s-snippet tal-kodiċi fejn iseħħ l-iżball.
@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();
}
}
F'SentimentController hemm għalqa saLogicApiUrl. Il-valur tiegħu huwa speċifikat mill-proprjetà sa.logic.api.url.
Linja saLogicApiUrl jikkonkatena mal-valur /analyse/sentiment. Flimkien jiffurmaw l-indirizz biex issir sejħa lill-mikroservizz li jwettaq analiżi tat-test.
▍Issettja valur tal-proprjetà
Fir-Rebbiegħa, is-sors standard tal-valuri tal-proprjetà huwa fajl application.properties, li tista' tinstab fuq sa-webapp/src/main/resources. Iżda l-użu tiegħu mhuwiex l-uniku mod biex jiġu stabbiliti l-valuri tal-proprjetà. Dan jista 'jsir ukoll bl-użu tal-kmand li ġej:
Il-valur ta 'din il-proprjetà għandu jindika l-indirizz tal-applikazzjoni Python tagħna.
Billi tikkonfiguraha, aħna ngħidu lill-applikazzjoni tal-web tar-Rebbiegħa fejn trid tmur biex twettaq talbiet għall-analiżi tat-test.
Sabiex ma nikkomplikawx ħajjitna, aħna se niddeċiedu li l-applikazzjoni Python tkun disponibbli fuq localhost:5000 u ejja nippruvaw ma ninsewx. Bħala riżultat, il-kmand biex titnieda l-applikazzjoni tar-Rebbiegħa se tidher bħal din:
L-ispeċifikazzjoni ta' indirizz għat-twettiq ta' talbiet POST lilu.
Irkupru ta 'Proprjetà sentence mill-korp tat-talba.
Inizjalizzazzjoni Oġġett Anonimu TextBlob u jkollna l-valur polarity għall-ewwel sentenza li waslet fil-korp tat-talba (fil-każ tagħna, din hija l-unika sentenza mibgħuta għall-analiżi).
Jirritorna tweġiba li l-korp tiegħu fih it-test tas-sentenza u l-indikatur ikkalkulat għaliha polarity.
Tnedija applikazzjoni Flask, li se tkun disponibbli fuq 0.0.0.0:5000 (tista 'wkoll taċċessaha billi tuża kostruzzjoni tal-formola localhost:5000).
Il-mikroservizzi li jiffurmaw l-applikazzjoni issa qed jaħdmu. Huma sintonizzati biex jinteraġixxu ma 'xulxin. Hekk tidher id-dijagramma tal-applikazzjoni f'dan l-istadju tax-xogħol.
Il-mikroservizzi kollha li jiffurmaw l-applikazzjoni jiddaħħlu fis-sod
Issa, qabel ma tkompli, iftaħ l-applikazzjoni React tiegħek f'brawżer u pprova teżamina xi sentenza magħha. Jekk kollox isir b'mod korrett - wara li tagħfas il-buttuna Send se tara r-riżultati tal-analiżi taħt il-qasam tat-test.
Fit-taqsima li jmiss, ser nitkellmu dwar kif inħaddmu l-mikroservizzi tagħna fil-kontenituri Docker. Dan huwa meħtieġ sabiex titħejja l-applikazzjoni biex taħdem fuq cluster Kubernetes.
Kontenituri Docker
Kubernetes hija sistema għall-awtomatizzazzjoni tal-iskjerament, l-iskala u l-ġestjoni tal-applikazzjonijiet fil-kontejners. Huwa msejjaħ ukoll "orkestratur tal-kontenitur". Jekk Kubernetes jaħdem b'kontenituri, allura qabel ma nużaw din is-sistema l-ewwel irridu nakkwistaw dawn il-kontenituri. Imma l-ewwel, ejja nitkellmu dwar x'inhuma l-kontenituri. Forsi l-aħjar tweġiba għall-mistoqsija dwar x'inhi tista' ssibha fiha dokumentazzjoni lil Docker:
Immaġini ta 'kontenitur hija pakkett ħafif, awtonomu, eżekutibbli li fih applikazzjoni, li jinkludi dak kollu meħtieġ biex titħaddem: kodiċi ta' applikazzjoni, ambjent ta 'eżekuzzjoni, għodod tas-sistema u libreriji, settings. Programmi f'kontenituri jistgħu jintużaw f'ambjenti Linux u Windows, u dejjem se jaħdmu l-istess irrispettivament mill-infrastruttura.
Dan ifisser li l-kontenituri jistgħu jitħaddmu fuq kwalunkwe kompjuter, inklużi servers ta 'produzzjoni, u l-applikazzjonijiet li jinsabu fihom se jaħdmu l-istess fi kwalunkwe ambjent.
Biex tesplora l-karatteristiċi tal-kontenituri u tqabbelhom ma 'modi oħra biex tħaddem l-applikazzjonijiet, ejja nħarsu lejn eżempju ta' kif sservi applikazzjoni React bl-użu ta 'magna virtwali u kontenitur.
▍Servi ta' fajls statiċi ta' applikazzjoni React bl-użu ta' magna virtwali
Nippruvaw norganizzaw is-servizz ta 'fajls statiċi bl-użu ta' magni virtwali, se niltaqgħu ma 'l-iżvantaġġi li ġejjin:
Użu ineffiċjenti tar-riżorsi, peress li kull magna virtwali hija sistema operattiva sħiħa.
Dipendenza tal-pjattaformi. Dak li jaħdem fuq kompjuter lokali jista 'ma jaħdimx fuq server ta' produzzjoni.
Skalar bil-mod u li juża ħafna riżorsi ta' soluzzjoni bbażata fuq magni virtwali.
Nginx web server li jservi fajls statiċi li jaħdmu fuq magna virtwali
Jekk il-kontenituri jintużaw biex isolvu problema simili, allura, meta mqabbla ma 'magni virtwali, jistgħu jiġu nnotati s-saħħiet li ġejjin:
Użu effiċjenti tar-riżorsi: taħdem mas-sistema operattiva billi tuża Docker.
Pjattaforma indipendenti. Kontenitur li żviluppatur jista 'jmexxi fuq il-kompjuter tiegħu se jaħdem kullimkien.
Skjerament ħafif permezz tal-użu ta 'saffi tal-immaġni.
Nginx web server li jservi fajls statiċi li jaħdmu f'kontenitur
Aħna qabblu biss magni virtwali u kontenituri fuq ftit punti, iżda anke dan huwa biżżejjed biex inħossu l-qawwiet tal-kontenituri. Hawnhekk Tista' ssib dettalji dwar il-kontenituri Docker.
▍Bini ta' immaġni ta' kontenitur għal applikazzjoni React
Il-blokka bażika ta' kontenitur Docker hija l-fajl Dockerfile. Fil-bidu ta 'dan il-fajl, isir rekord tal-immaġni bażi tal-kontenitur, imbagħad hemm sekwenza ta' struzzjonijiet li tindika kif toħloq kontenitur li se jissodisfa l-ħtiġijiet ta 'ċerta applikazzjoni.
Qabel ma nibdew naħdmu mal-fajl Dockerfile, ejja niftakru x'għamilna biex nippreparaw il-fajls tal-applikazzjoni React għat-tlugħ fis-server Nginx:
Bini ta' pakkett ta' applikazzjoni React (npm run build).
L-istruzzjonijiet li se jkun fihom Dockerfile għall-applikazzjoni SA-Frontend, jikkonsistu biss minn żewġ timijiet. Il-fatt hu li t-tim ta 'żvilupp ta' Nginx ħejja bażika immaġni għal Nginx, li se nużaw biex noħolqu l-immaġni tagħna. Dawn huma ż-żewġ passi li għandna bżonn niddeskrivu:
Il-bażi tal-immaġni għandha tkun l-immaġni Nginx.
Kontenut tal-folder sa-frontend/build jeħtieġ li tiġi kkupjata fil-folder tal-immaġni nginx/html.
Jekk tmur minn din id-deskrizzjoni għall-fajl Dockerfile, allura jidher bħal dan:
FROM nginx
COPY build /usr/share/nginx/html
Kif tistgħu taraw, kollox hawnhekk huwa sempliċi ħafna, u l-kontenut tal-fajl saħansitra jirriżulta li jinqara u jinftiehem pjuttost. Dan il-fajl jgħid lis-sistema biex tieħu l-immaġni nginx b'dak kollu li diġà hemm fih, u kkopja l-kontenut tad-direttorju build għad-direttorju nginx/html.
Hawnhekk jista 'jkollok mistoqsija dwar kif naf fejn eżattament għandek bżonn tikkopja fajls mill-folder build, jiġifieri minn fejn ġiet it-triq /usr/share/nginx/html. Fil-fatt, m'hemm xejn ikkumplikat hawn lanqas. Il-fatt hu li l-informazzjoni rilevanti tista’ tinstab fi deskrizzjoni immaġni.
▍Il-bini tal-immaġni u t-tlugħ fir-repożitorju
Qabel ma nkunu nistgħu naħdmu bl-immaġni lesta, għandna bżonn nimbottawha għar-repożitorju tal-immaġni. Biex nagħmlu dan, se nużaw il-pjattaforma ta' hosting ta' immaġini tas-sħab b'xejn Docker Hub. F'dan l-istadju tax-xogħol trid tagħmel dan li ġej:
Hawn u aktar f'kmandi simili $DOCKER_USER_ID għandu jiġi sostitwit bl-isem tal-utent tad-Docker Hub tiegħek. Pereżempju, din il-parti tal-kmand tista' tidher bħal din: rinormaloku/sentiment-analysis-frontend.
F'dan il-każ, dan il-kmand jista 'jitqassar billi jitneħħa minnu -f Dockerfile, peress li dan il-fajl diġà jeżisti fil-folder li fih qed inwettqu dan il-kmand.
Sabiex nibagħtu l-immaġni lesta lir-repożitorju, għandna bżonn il-kmand li ġej:
Wara li tlestiha, iċċekkja l-lista tar-repożitorji tiegħek fuq Docker Hub sabiex tifhem jekk it-tlugħ tal-immaġni fil-ħażna tal-cloud kienx suċċess.
▍Tmexxi kontenitur
Issa kulħadd jista' jniżżel u jmexxi l-immaġni, magħrufa bħala $DOCKER_USER_ID/sentiment-analysis-frontend. Sabiex tagħmel dan, għandek bżonn tmexxi s-sekwenza ta 'kmandi li ġejja:
docker pull $DOCKER_USER_ID/sentiment-analysis-frontend
docker run -d -p 80:80 $DOCKER_USER_ID/sentiment-analysis-frontend
Issa l-kontenitur qed jaħdem, nistgħu nkomplu naħdmu billi noħolqu stampi oħra li għandna bżonn. Imma qabel inkomplu, ejja nifhmu d-disinn 80:80, li jidher fil-kmand tat-tnedija tal-immaġni u jista 'jidher konfuż.
L-ewwel numru 80 — dan huwa n-numru tal-port ospitanti (jiġifieri, il-kompjuter lokali).
It-tieni numru 80 huwa l-port tal-kontejner li lejh għandha tintbagħat it-talba.
Ikkunsidra l-illustrazzjoni li ġejja.
Port Forwarding
Is-sistema tidderieġi mill-ġdid it-talbiet mill-port <hostPort> għal kull port <containerPort>. Jiġifieri aċċess għall-port 80 kompjuter huwa ridirett lejn il-port 80 kontenitur.
Peress li l-port 80 miftuħa fuq il-kompjuter lokali, imbagħad inti tista 'aċċess għall-applikazzjoni minn dan il-kompjuter fuq localhost:80. Jekk is-sistema tiegħek ma tappoġġjax Docker, l-applikazzjoni tista' titħaddem fuq magna virtwali Docker, li l-indirizz tagħha jkun jidher bħal <docker-machine ip>:80. Biex issir taf l-indirizz IP tal-magna virtwali Docker, tista 'tuża l-kmand docker-machine ip.
F'dan il-punt, wara li tniedi b'suċċess il-kontenitur tal-applikazzjoni ta 'quddiem, għandek tkun tista' tiftaħ il-paġna tagħha fil-browser.
▍Il-fajl .dockerignore
Ġbir ta 'immaġni ta' applikazzjoni SA-Frontend, nistgħu ninnutaw li dan il-proċess jirriżulta li huwa estremament bil-mod. Dan jiġri minħabba li l-kuntest tal-bini tal-immaġni għandu jintbagħat lid-daemon Docker. Id-direttorju li jirrappreżenta l-kuntest tal-bini huwa speċifikat bħala l-aħħar argument tal-kmand docker build. Fil-każ tagħna, hemm tikka fl-aħħar ta 'dan il-kmand. Dan jikkawża li l-istruttura li ġejja tiġi inkluża fil-kuntest tal-bini:
Iżda mill-folders kollha preżenti hawn, għandna bżonn biss il-folder build. It-tagħbija ta 'xi ħaġa oħra hija ħela ta' ħin. Tista' tħaffef il-bini billi tgħid lil Docker liema direttorji għandu jinjora. Huwa sabiex nagħmlu dan li għandna bżonn il-fajl .dockerignore. Inti, jekk inti familjari mal-fajl .gitignore, l-istruttura ta' dan il-fajl probabbilment tidher familjari. Jelenka direttorji li s-sistema tal-bini tal-immaġini tista' tinjora. Fil-każ tagħna, il-kontenut ta 'dan il-fajl jidher bħal dan:
node_modules
src
public
fajl .dockerignore irid ikun fl-istess folder bħall-fajl Dockerfile. Issa l-bini ta 'l-immaġni se jieħu kwistjoni ta' sekondi.
Ejja issa naħdmu fuq l-immaġni għall-applikazzjoni Java.
▍Bini ta' immaġni ta' kontenitur għal applikazzjoni Java
Taf xiex, diġà tgħallimt dak kollu li għandek bżonn tkun taf biex toħloq immaġini tal-kontejners. Huwa għalhekk li din it-taqsima se tkun qasira ħafna.
Iftaħ il-fajl Dockerfileli jinsab fil-folder tal-proġett sa-webapp. Jekk taqra t-test ta 'dan il-fajl, se tara biss żewġ kostruzzjonijiet ġodda fih, li jibdew bil-kliem kjavi ENV и EXPOSE:
Kelma ewlenija ENV Jippermettilek tiddikjara varjabbli ambjentali ġewwa kontenituri Docker. B'mod partikolari, fil-każ tagħna, jippermettilek li tispeċifika URL biex taċċessa l-API tal-applikazzjoni li twettaq analiżi tat-test.
Kelma ewlenija EXPOSE jippermettilek tgħid lil Docker biex tiftaħ port. Aħna se nużaw dan il-port waqt li nħaddmu l-applikazzjoni. Hawnhekk tista’ tinnota li fi Dockerfile għall-applikazzjoni SA-Frontend m'hemm l-ebda kmand bħal dan. Dan huwa biss għal skopijiet ta 'dokumentazzjoni, fi kliem ieħor, din il-kostruzzjoni hija maħsuba għal dak li se jaqra Dockerfile.
Il-bini tal-immaġni u l-imbuttar tagħha lejn ir-repożitorju jidher eżattament l-istess bħal fl-eżempju preċedenti. Jekk għadek m'intix kunfidenti ħafna fil-kapaċitajiet tiegħek, il-kmandi korrispondenti jistgħu jinstabu fil-fajl README.md fil-folder sa-webapp.
▍Bini ta' immaġni ta' kontenitur għal applikazzjoni Python
Jekk tħares lejn il-kontenut tal-fajl Dockerfile fil-folder sa-logic, allura ma ssib xejn ġdid għalik innifsek hemmhekk. Il-kmandi biex tinbena l-immaġni u tintbagħatha lir-repożitorju għandhom ukoll ikunu diġà familjari għalik, iżda, bħal fl-applikazzjonijiet l-oħra tagħna, jistgħu jinstabu fil-fajl README.md fil-folder sa-logic.
▍Ittestjar ta' applikazzjonijiet f'kontejners
Tista' tafda xi ħaġa li ma ttestjajtx? Jien ma nistax ukoll. Ejja nittestjaw il-kontenituri tagħna.
Ejja nniedu l-kontenitur tal-applikazzjoni sa-logic u kkonfiguraha biex tisma 'fuq il-port 5050:
docker run -d -p 5050:5000 $DOCKER_USER_ID/sentiment-analysis-logic
Ejja nniedu l-kontenitur tal-applikazzjoni sa-webapp u kkonfiguraha biex tisma 'fuq il-port 8080. Barra minn hekk, irridu nikkonfiguraw il-port li fuqu l-applikazzjoni Python se tisma’ għal talbiet mill-applikazzjoni Java billi nassenjaw mill-ġdid il-varjabbli ambjentali 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
Biex titgħallem kif issir taf l-indirizz IP ta’ kontenitur Docker jew magna virtwali, irreferi għall-fajl README.
docker run -d -p 80:80 $DOCKER_USER_ID/sentiment-analysis-frontend
Issa kollox lest biex imur fl-indirizz fil-browser localhost:80 u ipprova l-applikazzjoni.
Jekk jogħġbok innota li jekk bdilt il-port għal sa-webapp, jew jekk qed tħaddem magna virtwali Docker, ikollok bżonn teditja l-fajl App.js mill-folder sa-frontendbilli tbiddel l-indirizz IP jew in-numru tal-port fil-metodu analyzeSentence(), li tissostitwixxi informazzjoni kurrenti minflok data skaduta. Wara dan, għandek bżonn terġa 'tiġbor l-immaġni u tużaha.
Hekk tidher id-dijagramma tal-applikazzjoni tagħna issa.
Il-mikroservizzi jaħdmu f'kontenituri
Sommarju: għaliex għandna bżonn cluster Kubernetes?
Għadna kemm eżaminajna l-fajls Dockerfile, tkellem dwar kif tibni immaġini u timbottahom għal repożitorju Docker. Barra minn hekk, tgħallimna kif tħaffef l-assemblaġġ tal-immaġni billi tuża l-fajl .dockerignore. Bħala riżultat, il-mikroservizzi tagħna issa jaħdmu f'kontenituri Docker. Hawnhekk jista 'jkollok mistoqsija kompletament ġustifikata dwar għaliex għandna bżonn Kubernetes. It-tieni parti ta 'dan il-materjal se tkun iddedikata biex twieġeb din il-mistoqsija. Sadanittant, ikkunsidra l-mistoqsija li ġejja:
Ejja nassumu li l-applikazzjoni tal-web tagħna għall-analiżi tat-test saret popolari mad-dinja kollha. Miljuni ta’ talbiet jaslu lilu kull minuta. Dan ifisser li mikroservizzi sa-webapp и sa-logic se jkun taħt tagħbija enormi. Kif tiskala kontenituri li jħaddmu mikroservizzi?