Meie palvel lÔi Habr keskuse ja meil on hea meel sellesse avaldada esimene vÀljaanne. Telli!
Kubernetes on lihtne. Miks maksavad pangad mulle selles valdkonnas töötamise eest palju raha, samas kui igaĂŒks saab selle tehnoloogia omaks saada vaid mĂ”ne tunniga?
Kui kahtlete, et Kubernetes saab nii kiiresti selgeks Ă”ppida, soovitan teil proovida seda ise teha. Nimelt, olles selle materjali selgeks Ă”ppinud, saad Kubernetese klastris kĂ€ivitada mikroteenustel pĂ”hineva rakenduse. VĂ”in seda garanteerida, sest sama metoodika jĂ€rgi, mida siin kasutan, Ă”petan ka meie klientidele Kubernetesega töötamist. Mille poolest see juhend teistest erineb? Tegelikult palju asju. Seega algab enamik neist materjalidest lihtsate asjade - Kubernetese kontseptsioonide ja kĂ€su kubectl funktsioonide - selgitamisega. Nende artiklite autorid eeldavad, et nende lugeja tunneb rakenduste arendamist, mikroteenuseid ja Dockeri konteinereid. Me lĂ€heme teist teed. KĂ”igepealt rÀÀgime sellest, kuidas arvutis mikroteenustel pĂ”hinevat rakendust kĂ€ivitada. SeejĂ€rel vaatame iga mikroteenuse jaoks konteinerikujutisi. Ja pĂ€rast seda tutvume Kubernetesega ja analĂŒĂŒsime mikroteenustel pĂ”hineva rakenduse juurutamist Kubernetese hallatavas klastris.
Selline lĂ€henemine koos Kubernetesele jĂ€rkjĂ€rgulise lĂ€henemisega annab toimuvast arusaamise sĂŒgavuse, mida keskmine inimene vajab, et mĂ”ista, kui lihtsalt kĂ”ik Kubernetesis korraldatud on. Kubernetes on kindlasti lihtne tehnoloogia, eeldusel, et kes tahab, teab, kus ja kuidas seda kasutatakse.
NĂŒĂŒd, ilma pikema jututa, asume tööle ja rÀÀgime rakendusest, millega töötame.
Eksperimentaalne rakendus
Meie rakendus tĂ€idab ainult ĂŒhte funktsiooni. See vĂ”tab sisendiks ĂŒhe lause, misjĂ€rel teostab tekstianalĂŒĂŒsi vahendeid kasutades selle lause sentimentanalĂŒĂŒsi, saades hinnangu lause autori emotsionaalsele suhtumisele teatud objekti suhtes.
Selline nÀeb vÀlja selle rakenduse peaaken.

Sentiment AnalĂŒĂŒsi veebirakendus
Tehnilisest vaatenurgast koosneb rakendus kolmest mikroteenusest, millest igaĂŒks lahendab teatud ĂŒlesandeid:
- SA-Frontend on Nginxi veebiserver, mis teenindab Reacti staatilisi faile.
- SA-WebApp on Java keeles kirjutatud veebirakendus, mis kÀsitleb kasutajaliidese pÀringuid.
- SA-Logic on Pythoni rakendus, mis teostab teksti sentimentide analĂŒĂŒsi.
Oluline on mĂ€rkida, et mikroteenused ei eksisteeri isoleeritult. Nad rakendavad "ĂŒlesannete lahususe" ideed, kuid samal ajal peavad nad ĂŒksteisega suhtlema.

Andmevood rakenduses
Ălaltoodud diagrammil nĂ€ete sĂŒsteemi nummerdatud etappe, illustreerides andmevooge rakenduses. Jagame need lahti:
- Brauser kĂŒsib serverilt faili
index.html(mis omakorda laadib rakenduse React paketi). - Kasutaja suhtleb rakendusega, see kutsub esile Springil pÔhineva veebirakenduse.
- Veebirakendus edastab teksti sÔelumise taotluse Pythoni rakendusele.
- Pythoni rakendus analĂŒĂŒsib teksti sentimenti ja tagastab tulemuse vastusena pĂ€ringule.
- Spring rakendus saadab vastuse rakendusele React (mis omakorda nÀitab kasutajale sÔelutud teksti tulemust).
KÔigi nende rakenduste koodid leiate . Soovitan teil see hoidla kohe endale kopeerida, kuna meid ootab ees palju huvitavaid katseid sellega.
Mikroteenustel pÔhineva rakenduse kÀitamine kohalikus masinas
Selleks, et rakendus töötaks, peame kĂ€ivitama kĂ”ik kolm mikroteenust. Alustame neist ilusaimast â esiotsa rakendusest.
âReacti seadistamine kohalikuks arenguks
Reacti rakenduse kÀitamiseks peate oma arvutisse installima Node.js raamistiku ja NPM. PÀrast selle kÔige installimist minge terminali abil projekti kausta sa-frontend ja kÀivitage jÀrgmine kÀsk:
npm install Selle kÀsu kÀivitamisel kaustas node_modules laaditakse Reacti rakenduse sÔltuvused, mille kirjed on failis package.json. PÀrast sÔltuvuste allalaadimist samas kaustas kÀivitage jÀrgmine kÀsk:
npm start See on kĂ”ik. Rakendus React töötab nĂŒĂŒd ja sellele pÀÀseb juurde brauseri aadressile navigeerides localhost:3000. Saate tema koodis midagi muuta. Nende muudatuste mĂ”ju nĂ€ete brauseris kohe. See on vĂ”imalik tĂ€nu moodulite niinimetatud "kuumale" asendamisele. TĂ€nu sellele muutub esiotsa arendamine lihtsaks ja nauditavaks kogemuseks.
âReacti rakenduse ettevalmistamine tootmiseks
Reacti rakenduse tegelikuks kasutamiseks peame selle teisendama staatiliste failide komplektiks ja serveerima neid veebiserveri abil klientidele.
Rakenduse React loomiseks navigeerige uuesti terminali kasutades kausta sa-frontend ja kÀivitage jÀrgmine kÀsk:
npm run build See loob projekti kausta kataloogi build. See sisaldab kÔiki staatilisi faile, mis on vajalikud rakenduse React töötamiseks.
â Staatiliste failide teenindamine Nginxiga
KÔigepealt peate installima ja kÀivitama Nginxi veebiserveri. saate selle alla laadida ja leida juhiseid selle installimiseks ja kÀitamiseks. SeejÀrel peate kausta sisu kopeerima sa-frontend/build kausta [your_nginx_installation_dir]/html.
Selle lÀhenemisviisi korral luuakse Reacti rakenduse kokkupanemise kÀigus loodud fail index.html on saadaval aadressil [your_nginx_installation_dir]/html/index.html. See on fail, mille Nginxi server sellele juurdepÀÀsul vaikimisi vÀljastab. Server on konfigureeritud kuulama pordi kaudu 80, kuid saate faili redigeerides seda soovitud viisil kohandada [your_nginx_installation_dir]/conf/nginx.conf.
NĂŒĂŒd avage brauser ja minge aadressile localhost:80. NĂ€ete Reacti rakenduse lehte.

Reaktsioonirakendust teenindab Nginxi server
Kui nĂŒĂŒd midagi vĂ€ljale sisestada Type your sentence ja vajutage nuppu Send - midagi ei juhtu. Kuid kui vaatate konsooli, nĂ€ete seal veateateid. Et mĂ”ista, kus need vead tĂ€pselt ilmnevad, analĂŒĂŒsime rakenduse koodi.
âEsirakenduse koodi analĂŒĂŒs
Faili koodi vaatamine App.js, nĂ€eme seda nupul klĂ”psates Send kutsub meetodit analyzeSentence(). Selle meetodi kood on nĂ€idatud allpool. Samal ajal pöörake tĂ€helepanu asjaolule, et iga rea ââkohta, mille kohta on vormi kommentaar # ĐĐŸĐŒĐ”Ń, on koodi all antud selgitus. Samamoodi sĂ”elume ka teisi koodifragmente.
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. URL, millele POST-i pÀring tehakse. Eeldatakse, et see aadress on rakendus, mis ootab selliseid pÀringuid.
2.Taotlusele saadetud pÀringu asutus. Siin on pÀringu keha nÀide:
{
sentence: "I like yogobella!"
} 3.Kui pÀringule saabub vastus, vÀrskendatakse komponendi olekut. See pÔhjustab komponendi uuesti renderdamise. Kui saame andmeid (st JSON-objekti, mis sisaldab sisestatud andmeid ja arvutatud tekstiskoori), vÀljastame komponendi Polarityseni, kuni tingimused on tÀidetud. Siin kirjeldame komponenti:
const polarityComponent = this.state.polarity !== undefined ?
<Polarity sentence={this.state.sentence}
polarity={this.state.polarity}/> :
null; Tundub, et kood töötab ĂŒsna hĂ€sti. Mis siin ikkagi viga on? Kui eeldate, et aadressil, millele rakendus ĂŒritab POST-pĂ€ringut saata, pole veel midagi, mis saaks seda pĂ€ringut vastu vĂ”tta ja töödelda, siis on teil tĂ€iesti Ă”igus. Nimelt aadressile tulevate pĂ€ringute menetlemiseks http://localhost:8080/sentiment, peame kĂ€ivitama Springil pĂ”hineva veebirakenduse.

Vajame kevadist rakendust, mis suudab vastu vÔtta POST-pÀringu
âKevadel pĂ”hineva veebirakenduse seadistamine
Spring-rakenduse juurutamiseks vajate JDK8 ja Mavenit ning Ôigesti konfigureeritud keskkonnamuutujaid. PÀrast selle kÔige installimist saate meie projektiga edasi töötada.
âRakenduse pakkimine jar-faili
Navigeerige terminali kasutades kausta sa-webapp ja sisestage jÀrgmine kÀsk:
mvn install PÀrast selle kÀsu tÀitmist kaustas sa-webapp kataloog luuakse target. Siin asub Java-rakendus, mis on pakitud jar-faili, mida fail esindab sentiment-analysis-web-0.0.1-SNAPSHOT.jar.
âJava rakenduse kĂ€ivitamine
Minge kausta target ja kÀivitage rakendus jÀrgmise kÀsuga:
java -jar sentiment-analysis-web-0.0.1-SNAPSHOT.jarSelle kĂ€su tĂ€itmisel ilmneb tĂ”rge. Selle parandamise alustamiseks saame virna jĂ€lgimise andmetes erandi ĂŒksikasju sĂ”eluda:
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}" Meie jaoks on siinkohal kĂ”ige olulisem tĂ€henduse selgitamise vĂ”imatuse mainimine sa.logic.api.url. AnalĂŒĂŒsime koodi, kus viga ilmneb.
âJava rakenduse koodi analĂŒĂŒs
Siin on koodilÔik, kus viga ilmneb.
@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();
}
}- In S
entimentControllerseal on pÔldsaLogicApiUrl. Selle vÀÀrtuse mÀÀrab kinnisvarasa.logic.api.url. - Rida
saLogicApiUrlhaakub vÀÀrtusega/analyse/sentiment. Ăheskoos moodustavad need aadressi tekstianalĂŒĂŒsi teostavale mikroteenusele helistamiseks.
âAtribuudi vÀÀrtuse mÀÀramine
Kevadel on atribuutide vÀÀrtuste vaikeallikaks fail application.properties, mille leiate aadressilt sa-webapp/src/main/resources. Kuid selle kasutamine ei ole ainus viis vara vÀÀrtuste mÀÀramiseks. Seda saate teha ka jÀrgmise kÀsuga:
java -jar sentiment-analysis-web-0.0.1-SNAPSHOT.jar --sa.logic.api.url=WHAT.IS.THE.SA.LOGIC.API.URLSelle atribuudi vÀÀrtus peaks osutama meie Pythoni rakenduse aadressile.
Seda konfigureerides anname Spring veebirakendusele teada, kuhu see teksti sÔelumistaotluste tÀitmiseks minema peab.
Et mitte oma elu keeruliseks teha, otsustame, et Pythoni rakendus on saadaval aadressil localhost:5000 ja proovige seda mitte unustada. Selle tulemusel nÀeb kevadrakenduse kÀivitamise kÀsk vÀlja jÀrgmine:
java -jar sentiment-analysis-web-0.0.1-SNAPSHOT.jar --sa.logic.api.url=http://localhost:5000 
Meie sĂŒsteemis puudub Pythoni rakendus
NĂŒĂŒd peame lihtsalt Pythoni rakenduse kĂ€ivitama ja sĂŒsteem töötab ootuspĂ€raselt.
âPythoni rakenduse seadistamine
Pythoni rakenduse kÀivitamiseks peavad teil olema installitud Python 3 ja Pip ning vastavad keskkonnamuutujad peavad olema Ôigesti seadistatud.
â Installige sĂ”ltuvused
Minge projekti kausta sa-logic/sa ja kÀivitage jÀrgmised kÀsud:
python -m pip install -r requirements.txt
python -m textblob.download_corporaâRakenduse kĂ€ivitamine
Kui sÔltuvused on installitud, oleme rakenduse kÀivitamiseks valmis:
python sentiment_analysis.pyPÀrast selle kÀsu tÀitmist öeldakse meile jÀrgmist:
* Running on http://0.0.0.0:5000/ (Press CTRL+C to quit) See tÀhendab, et rakendus töötab ja ootab pÀringuid aadressil localhost:5000/
âKoodiuuring
Vaatame Pythoni rakenduse koodi, et mÔista, kuidas see pÀringutele vastab:
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- Objekti lÀhtestamine
Flask. - Aadressi mÀÀramine sellele POST-pÀringute tegemiseks.
- Kinnisvara kÀttesaamine
sentencetaotluse esitanud organilt. - AnonĂŒĂŒmse objekti lĂ€htestamine
TextBlobja vÀÀrtuse saaminepolaritypĂ€ringu pĂ”hitekstis laekunud esimese ettepaneku puhul (meie puhul on see ainus analĂŒĂŒsimiseks esitatud ettepanek). - Vastuse tagastamine, mille sisuks on pakkumise tekst ja sellele arvutatud nĂ€itaja
polarity. - Rakenduse Flask kÀivitamine, mis on saadaval aadressil
0.0.0.0:5000(sellele pÀÀsete juurde ka vormi konstruktsiooni abillocalhost:5000).
NĂŒĂŒd töötavad rakenduse moodustavad mikroteenused. Nad on seatud ĂŒksteisega suhtlema. Siin nĂ€eb rakenduse diagramm selles tööetapis vĂ€lja.

KÔik rakenduse moodustavad mikroteenused viiakse normaalsesse olekusse
NĂŒĂŒd, enne kui jĂ€tkame, avage brauseris rakendus React ja proovige sellega mĂ”nda lauset sĂ”eluda. Kui kĂ”ik on Ă”igesti tehtud - pĂ€rast nupu vajutamist Send analĂŒĂŒsitulemusi nĂ€ete tekstikasti all.
JÀrgmises jaotises rÀÀgime sellest, kuidas oma mikroteenuseid Dockeri konteinerites kÀitada. See on vajalik rakenduse ettevalmistamiseks Kubernetese klastris kÀitamiseks.
Dockeri konteinerid
on sĂŒsteem konteinerite rakenduste juurutamise, skaleerimise ja haldamise automatiseerimiseks. Seda nimetatakse ka "konteineri orkestraatoriks". Kui Kubernetes töötab konteineritega, siis enne selle sĂŒsteemi kasutamist peame esmalt need konteinerid hankima. Kuid kĂ”igepealt rÀÀgime sellest, mis on konteinerid. VĂ”ib-olla leiate parima vastuse kĂŒsimusele, mis see on Dockerile:
Konteineri kujutis on kerge, iseseisev ja kĂ€ivitatav pakett, mis sisaldab rakendust koos kĂ”ige selle kĂ€ivitamiseks vajalikuga: rakenduse koodi, kĂ€ituskeskkonda, sĂŒsteemi tööriistu ja teeke ning sĂ€tteid. Konteineritesse paigutatud programme saab kasutada keskkondades Linux Đž Windowsja need töötavad alati samamoodi, olenemata infrastruktuurist.
See tÀhendab, et konteinereid saab kÀivitada igas arvutis, sealhulgas tootmisserverites, ja igas keskkonnas töötavad neisse suletud rakendused samamoodi.
Konteinerite funktsioonide uurimiseks ja nende vÔrdlemiseks muude rakenduste kÀitamise viisidega vaatame nÀidet Reacti rakenduse teenindamisest virtuaalmasina ja konteineri abil.
âReacti rakenduse staatiliste failide teenindamine virtuaalmasina abil
PĂŒĂŒdes korraldada staatiliste failide hooldust virtuaalmasinate abil, puutume kokku jĂ€rgmiste puudustega:
- Ebaefektiivne ressursside kasutamine, kuna iga virtuaalmasin on terviklik operatsioonisĂŒsteem.
- Platvormi sÔltuvus. Mis töötab mÔnes kohalikus arvutis, ei pruugi tootmisserveris töötada.
- Virtuaalse masina lahenduse aeglane ja ressursimahukas skaleerimine.

Nginxi veebiserver, mis teenindab virtuaalmasinas töötavaid staatilisi faile
Kui sarnase probleemi lahendamiseks kasutatakse konteinereid, vÔib vÔrreldes virtuaalsete masinatega mÀrkida jÀrgmisi tugevusi:
- TĂ”hus ressursside kasutamine: töötage operatsioonisĂŒsteemiga Dockeri abil.
- Platvormi sÔltumatus. Konteiner, mida arendaja saab oma arvutis kÀivitada, töötab kÔikjal.
- Kerge juurutus pildikihtide kasutamise kaudu.

Nginxi veebiserver, mis teenindab konteineris töötavaid staatilisi faile
Oleme virtuaalmasinaid ja konteinereid vĂ”rrelnud vaid mĂ”nes punktis, kuid sellestki piisab, et mĂ”ista konteinerite tugevaid kĂŒlgi. Leiate ĂŒksikasju Dockeri konteinerite kohta.
âReacti rakenduse jaoks konteineri kujutise loomine
Dockeri konteineri pÔhiline ehitusplokk on fail Dockerfile. Selle faili alguses salvestatakse konteineri pÔhipilt, seejÀrel on lisatud juhiste jada, mis nÀitab, kuidas luua rakenduse vajadustele vastav konteiner.
Enne kui hakkame failiga töötama Dockerfile, pidage meeles, mida tegime rakenduse React failide ettevalmistamiseks Nginxi serverisse ĂŒleslaadimiseks:
- Reacti rakenduse paketi loomine (
npm run build). - Nginxi serveri kÀivitamine.
- Kataloogi sisu kopeerimine
buildprojekti kaustastsa-frontendserveri kaustanginx/html.
Allpool nĂ€ete paralleele konteineri loomise ja ĂŒlaltoodud toimingute vahel kohalikus arvutis.
âSa-Frontendi rakenduse jaoks Dockeri faili ettevalmistamine
Juhised, mis tuleb lisada Dockerfile rakenduseks SA-Frontend, koosneb ainult kahest meeskonnast. Fakt on see, et Nginxi arendusmeeskond on ette valmistanud pÔhi Nginxi jaoks, mida kasutame oma kuvandi loomiseks. Siin on kaks sammu, mida peame kirjeldama.
- Pildi aluseks peate tegema Nginxi kujutise.
- Kausta sisu
sa-frontend/buildtuleb kopeerida piltide kaustanginx/html.
Kui lÀheme selle kirjelduse juurest faili Dockerfile, siis nÀeb see vÀlja selline:
FROM nginx
COPY build /usr/share/nginx/html Nagu nĂ€ete, on siin kĂ”ik vĂ€ga lihtne, samas kui faili sisu osutub isegi ĂŒsna loetavaks ja arusaadavaks. See fail kĂ€sib sĂŒsteemil pildi teha nginx koos kĂ”igega, mis tal juba on, ja kopeerige kataloogi sisu build kataloogi nginx/html.
Siin vĂ”ib teil tekkida kĂŒsimus, kuidas ma tean, kuhu failid kaustast tĂ€pselt kopeerida buildst kust see tee tuli /usr/share/nginx/html. Tegelikult pole siin ka midagi keerulist. Fakt on see, et asjakohase teabe leiate aadressilt pilt.
âPildi kokkupanek ja hoidlasse ĂŒleslaadimine
Enne kui saame valmis pildiga töötada, peame selle pildihoidlasse esitama. Selleks kasutame tasuta pilvepÔhist pildimajutusplatvormi Docker Hub. Selles tööetapis peate tegema jÀrgmist.
- Installi .
- Registreeruge Docker Hubi saidil.
- Logige oma kontole sisse, kÀivitades terminalis jÀrgmise kÀsu:
docker login -u="$DOCKER_USERNAME" -p="$DOCKER_PASSWORD"
NĂŒĂŒd peate terminali kasutades minema kataloogi sa-frontend ja kĂ€ivitage seal jĂ€rgmine kĂ€sk:
docker build -f Dockerfile -t $DOCKER_USER_ID/sentiment-analysis-frontend . Siin ja allpool sarnastes kÀskudes $DOCKER_USER_ID tuleks Docker Hubis teie kasutajanimega asendada. NÀiteks vÔib see kÀsu osa vÀlja nÀha jÀrgmine: rinormaloku/sentiment-analysis-frontend.
Sel juhul saab seda kĂ€sku lĂŒhendada, eemaldades sellest -f Dockerfile, kuna kaustas, kus me seda kĂ€sku tĂ€idame, on see fail juba olemas.
Valmis pildi hoidlasse saatmiseks vajame jÀrgmist kÀsku:
docker push $DOCKER_USER_ID/sentiment-analysis-frontendPĂ€rast selle lĂ”petamist kontrollige oma hoidlate loendit Docker Hubis, et nĂ€ha, kas pilt Ă”nnestus pilvesalvestusse lĂŒkata.
âKonteineri kĂ€ivitamine
NĂŒĂŒd saab igaĂŒks alla laadida ja kĂ€ivitada pildi, mida tuntakse kui $DOCKER_USER_ID/sentiment-analysis-frontend. Selleks peate kĂ€ivitama jĂ€rgmise kĂ€skude jada:
docker pull $DOCKER_USER_ID/sentiment-analysis-frontend
docker run -d -p 80:80 $DOCKER_USER_ID/sentiment-analysis-frontend NĂŒĂŒd konteiner töötab ja saame jĂ€tkata tööd, luues muid vajalikke pilte. Aga enne kui jĂ€tkame, mĂ”istame disaini 80:80, mis asub pildi kĂ€ivitamise kĂ€sus ja vĂ”ib tunduda segane.
- Esimene number
80on hosti (st kohaliku arvuti) pordi number. - Teine number
80on konteineri sadam, kuhu pĂ€ring tuleks ĂŒmber suunata.
MÔelge jÀrgmisele illustratsioonile.

Pordi edastamine
SĂŒsteem edastab pĂ€ringud pordist <hostPort> sadamasse <containerPort>. See tĂ€hendab, et pÀÀseb sadamasse 80 arvuti suunatakse porti 80 konteiner.
Alates sadamast 80 avatud kohalikus arvutis, pÀÀsete rakendusele sellest arvutist juurde aadressil localhost:80. Kui teie sĂŒsteem Dockerit ei toeta, saate rakenduse kĂ€ivitada Dockeri virtuaalmasinas, mille aadress nĂ€eb vĂ€lja selline <docker-machine ip>:80. Dockeri virtuaalmasina IP-aadressi vĂ€ljaselgitamiseks vĂ”ite kasutada kĂ€sku docker-machine ip.
Sel hetkel, kui esiotsa rakenduse konteiner on edukalt kÀivitatud, peaksite saama selle lehe brauseris avada.
â.dockerignore fail
Rakenduse pildi loomine SA-Frontend, vĂ”isime mĂ€rgata, et see protsess on ÀÀrmiselt aeglane. Seda seetĂ”ttu, et pildi koostamise kontekst tuleb saata Dockeri deemonile. Ehitamise konteksti esindav kataloog antakse kĂ€su viimase argumendina docker build. Meie puhul on selle kĂ€su lĂ”pus punkt. Selle tulemusel kaasatakse montaaĆŸi konteksti jĂ€rgmine struktuur:
sa-frontend:
| .dockerignore
| Dockerfile
| package.json
| README.md
+---build
+---node_modules
+---public
---src Kuid kĂ”igist siin olevatest kaustadest vajame ainult kausta build. Millegi muu allalaadimine on ajaraiskamine. Ehitamist saate kiirendada, öeldes Dockerile, milliseid katalooge ignoreerida. Selleks vajame faili .dockerignore. Teie, kui olete failiga tuttav .gitignore, tundub selle faili struktuur ilmselt tuttav. See loetleb kataloogid, mida pildiehitussĂŒsteem vĂ”ib ignoreerida. Meie puhul nĂ€eb selle faili sisu vĂ€lja jĂ€rgmine:
node_modules
src
public fail .dockerignore peab olema failiga samas kaustas Dockerfile. NĂŒĂŒd vĂ”tab pildi kokkupanek mĂ”ne sekundi.
NĂŒĂŒd kĂ€sitleme Java-rakenduse pilti.
âJava rakenduse jaoks konteineri kujutise loomine
Teate kĂŒll, ja olete juba Ă”ppinud kĂ”ike, mida konteinerpiltide loomiseks vajate. SeetĂ”ttu jÀÀb see osa vĂ€ga lĂŒhikeseks.
Avage fail Dockerfile, mis asub projekti kaustas sa-webapp. Kui lugeda selle faili teksti, siis kohtab selles vaid kahte uut konstruktsiooni, mis algavad mÀrksÔnadega ENV О EXPOSE:
ENV SA_LOGIC_API_URL http://localhost:5000
âŠ
EXPOSE 8080 MĂ€rksĂ”na ENV vĂ”imaldab deklareerida keskkonnamuutujaid Dockeri konteinerites. EelkĂ”ige vĂ”imaldab see meie puhul mÀÀrata URL-i, et pÀÀseda juurde tekstianalĂŒĂŒsi teostava rakenduse API-le.
MÀrksÔna EXPOSE vÔimaldab teil kÀskida Dockeril port avada. Kasutame seda porti rakendusega töötamisel. Siin nÀete seda sisse Dockerfile rakenduseks SA-Frontend sellist kÀsku pole. See on mÔeldud ainult dokumenteerimiseks, teisisÔnu, see konstruktsioon on lugeja jaoks Dockerfile.
Kujutise ehitamine ja hoidlasse lĂŒkkamine nĂ€eb vĂ€lja tĂ€pselt nagu eelmine nĂ€ide. Kui sa pole oma vĂ”imetes veel vĂ€ga kindel, siis vastavad kĂ€sud leiab failist README.md kaustas sa-webapp.
âPythoni rakenduse jaoks konteineri kujutise loomine
Kui vaatate faili sisu Dockerfile kaustas sa-logicsa ei leia sealt midagi uut. Pildi koostamise ja hoidlasse lĂŒkkamise kĂ€sud peaksid olema teile juba tuttavad, kuid nagu ka meie teiste rakenduste puhul, leiate need failist README.md kaustas sa-logic.
âKonteinerite rakenduste testimine
Kas saate usaldada midagi, mida te pole testinud? ma ei saa ka. Testime oma konteinereid.
- KĂ€ivitame rakenduste konteineri
sa-logicja seadistage see pordis kuulama5050:docker run -d -p 5050:5000 $DOCKER_USER_ID/sentiment-analysis-logic - KĂ€ivitame rakenduste konteineri
sa-webappja seadistage see pordis kuulama8080. Lisaks peame mÀÀrama pordi, millel Pythoni rakendus kuulab Java rakenduse pĂ€ringuid, mÀÀrates ĂŒmber keskkonnamuutujaSA_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
Konteineri vÔi Dockeri VM-i IP-aadressi teadasaamiseks vaadake faili .
KĂ€ivitame rakenduste konteineri sa-frontend:
docker run -d -p 80:80 $DOCKER_USER_ID/sentiment-analysis-frontend NĂŒĂŒd on kĂ”ik valmis brauseris aadressile navigeerimiseks localhost:80 ja testige rakendust.
Pange tÀhele, et kui muudate porti sa-webapp, vÔi kui kasutate Dockeri VM-i, peate faili redigeerima App.js kaustast sa-frontendmuutes meetodis IP-aadressi vÔi pordi numbrit analyzeSentence()asendades vananenud andmete asemel praeguse teabe. PÀrast seda peate pildi uuesti kokku panema ja seda kasutama.
Selline nÀeb meie rakendusskeem praegu vÀlja.

Mikroteenused töötavad konteinerites
KokkuvÔte: miks me vajame Kubernetese klastrit?
Vaatasime just failid ĂŒle Dockerfile, rÀÀkis, kuidas luua pilte ja lĂŒkata need Dockeri hoidlasse. Lisaks Ă”ppisime, kuidas faili abil piltide kokkupanemist kiirendada .dockerignore. Selle tulemusena töötavad meie mikroteenused nĂŒĂŒd Dockeri konteinerites. Siin vĂ”ib teil tekkida tĂ€iesti Ă”igustatud kĂŒsimus selle kohta, miks me Kubernetest vajame. Vastus sellele kĂŒsimusele on pĂŒhendatud selle materjali teisele osale. Vahepeal kaaluge jĂ€rgmist kĂŒsimust:
Oletame, et meie tekstianalĂŒĂŒsi veebirakendus on kogu maailmas populaarseks saanud. Iga minut saabub talle miljoneid taotlusi. See tĂ€hendab, et mikroteenused sa-webapp Đž sa-logic saab olema tohutu stressi all. Kuidas skaleerida mikroteenuseid pakkuvaid konteinereid?
Allikas: www.habr.com
