Kubernetes kennsla hluti 1: Forrit, örþjónustur og gámar

Að beiðni okkar bjó Habr til miðstöð Kubernetes og við erum ánægð með að setja fyrsta ritið í það. Gerast áskrifandi!

Kubernetes er auðvelt. Hvers vegna borga bankar mér mikla peninga fyrir að vinna á þessu sviði á meðan hver sem er getur náð tökum á þessari tækni á örfáum klukkustundum?

Kubernetes kennsla hluti 1: Forrit, örþjónustur og gámar

Ef þú efast um að hægt sé að læra Kubernetes svo fljótt, mæli ég með að þú prófir það sjálfur. Þegar þú hefur náð tökum á þessu efni muntu nefnilega geta keyrt forrit sem byggir á örþjónustu í Kubernetes klasa. Ég get ábyrgst þetta, þar sem það er nákvæmlega sama aðferðafræðin og notuð hér sem ég kenni viðskiptavinum okkar að vinna með Kubernetes. Hvað gerir þessa handbók frábrugðna öðrum? Í raun er ýmislegt. Svo, flest þessara efna byrja á útskýringum á einföldum hlutum - hugmyndum Kubernetes og eiginleikum kubectl skipunarinnar. Höfundar þessara efna gera ráð fyrir að lesendur þeirra þekki forritaþróun, örþjónustur og Docker gáma. Við munum fara aðra leið. Í fyrsta lagi munum við tala um hvernig á að keyra forrit byggt á örþjónustu á tölvu. Síðan skoðum við að byggja gámamyndir fyrir hverja örþjónustu. Og eftir það kynnumst við Kubernetes og skoðum hvernig forrit byggist á örþjónustum í þyrpingu sem er stjórnað af Kubernetes.

Þessi nálgun, með hægfara nálgun á Kubernetes, mun gefa dýpt skilning á því sem er að gerast sem er nauðsynlegt fyrir meðalmanninn til að skilja hvernig einfaldlega allt virkar í Kubernetes. Kubernetes er vissulega einföld tækni, að því gefnu að þeir sem vilja læra hana viti hvar og hvernig hún er notuð.

Nú skulum við byrja og tala um forritið sem við munum vinna með.

Tilraunaumsókn

Forritið okkar mun aðeins framkvæma eina aðgerð. Það tekur eina setningu sem inntak, eftir það, með því að nota textagreiningartæki, framkvæmir það tilfinningagreiningu á þessari setningu og fær mat á tilfinningalegri afstöðu höfundar setningarinnar til ákveðins hlutar.

Svona lítur aðalgluggi þessa forrits út.

Kubernetes kennsla hluti 1: Forrit, örþjónustur og gámar
Vefforrit fyrir tilfinningagreiningu á texta

Frá tæknilegu sjónarhorni samanstendur forritið af þremur örþjónustum, sem hver um sig leysir ákveðin vandamál:

  • SA-Frontend er Nginx vefþjónn sem þjónar kyrrstæðum React skrám.
  • SA-WebApp er vefforrit skrifað í Java sem vinnur úr beiðnum frá framendanum.
  • SA-Logic er Python forrit sem framkvæmir tilfinningagreiningu á texta.

Það er mikilvægt að hafa í huga að örþjónustur eru ekki til í einangrun. Þeir innleiða hugmyndina um „aðskilnað ábyrgðar“ en á sama tíma þurfa þeir að hafa samskipti sín á milli.

Kubernetes kennsla hluti 1: Forrit, örþjónustur og gámar
Gagnaflæði í forritinu

Í skýringarmyndinni hér að ofan geturðu séð númeruð stig kerfisins sem sýnir gagnaflæðið í forritinu. Við skulum skoða þau:

  1. Vafrinn biður um skrá frá þjóninum index.html (sem aftur á móti hleður niður React forritapakkanum).
  2. Notandinn hefur samskipti við forritið, þetta veldur símtali í Spring-undirstaða vefforritið.
  3. Vefforritið sendir beiðnina um að framkvæma textagreiningu áfram til Python forritsins.
  4. Python forritið framkvæmir tilfinningagreiningu á textanum og skilar niðurstöðunni sem svar við beiðninni.
  5. Spring forritið sendir svar til React forritsins (sem aftur á móti sýnir niðurstöðu textagreiningarinnar til notanda).

Kóðann fyrir öll þessi forrit er að finna hér. Ég mæli með því að þú afritar þessa geymslu fyrir sjálfan þig núna, þar sem það eru margar áhugaverðar tilraunir með hana framundan.

Að keyra forrit sem byggir á örþjónustu á staðnum þinni

Til þess að forritið virki þurfum við að ræsa allar þrjár örþjónusturnar. Byrjum á því krúttlegasta af þeim öllum - framendaforritinu.

▍ Settu upp React fyrir staðbundna þróun

Til að keyra React forrit þarftu að setja upp Node.js pallinn og NPM á tölvunni þinni. Þegar þú hefur allt þetta sett upp skaltu nota flugstöðina til að fara í verkefnamöppuna þína sa-frontend og keyrðu eftirfarandi skipun:

npm install

Með því að keyra þessa skipun í möppunni node_modules ósjálfstæðir React forritsins verða hlaðnir, skrár um það eru í skránni package.json. Þegar ósjálfstæðin hafa verið hlaðið niður í sömu möppu skaltu keyra eftirfarandi skipun:

npm start

Það er allt og sumt. Nú er React forritið í gangi, þú getur nálgast það með því að fara á eftirfarandi heimilisfang í vafranum þínum: localhost:3000. Þú getur breytt einhverju í kóðanum þess. Þú munt strax sjá áhrif þessara breytinga í vafranum. Þetta er mögulegt þökk sé svokölluðu „heitu“ skipti á einingum. Þetta gerir framhliðarþróun að einfaldri og skemmtilegri upplifun.

▍Undirbúa React umsókn fyrir framleiðslu

Í þeim tilgangi að nota React forrit í raun og veru þurfum við að umbreyta því í sett af kyrrstæðum skrám og þjóna þeim til viðskiptavina sem nota vefþjón.

Til að byggja upp React forritið, aftur með því að nota flugstöðina, farðu í möppuna sa-frontend og keyrðu eftirfarandi skipun:

npm run build

Þetta mun búa til möppu í verkefnamöppunni build. Það mun innihalda allar kyrrstæður skrár sem nauðsynlegar eru til að React forritið virki.

▍ Að þjóna kyrrstæðum skrám með Nginx

Fyrst þarftu að setja upp og keyra Nginx vefþjóninn. Hér þú getur halað því niður og fundið leiðbeiningar um hvernig á að setja það upp og keyra það. Þá þarftu að afrita innihald möppunnar sa-frontend/build í möppu [your_nginx_installation_dir]/html.

Með þessari nálgun er skráin sem myndast við smíðaferli React forritsins index.html verður í boði kl [your_nginx_installation_dir]/html/index.html. Þetta er skráin sem Nginx þjónninn framleiðir sjálfgefið þegar hann opnar hana. Miðlarinn er stilltur til að hlusta á portinu 80, en það er hægt að aðlaga hana eins og þú þarft með því að breyta skránni [your_nginx_installation_dir]/conf/nginx.conf.

Opnaðu nú vafrann þinn og farðu í localhost:80. Þú munt sjá React umsóknarsíðuna.

Kubernetes kennsla hluti 1: Forrit, örþjónustur og gámar
React forrit þjónað af Nginx netþjóni

Ef þú slærð nú eitthvað inn í reitinn Type your sentence og ýttu á hnappinn Send — það mun ekkert gerast. En ef þú skoðar stjórnborðið geturðu séð villuboð þar. Til að skilja hvar nákvæmlega þessar villur eiga sér stað, skulum við greina forritskóðann.

▍ Greining á framhlið forritskóða

Að kíkja á skráarkóðann App.js, við getum séð það með því að ýta á hnappinn Send kallar aðferð analyzeSentence(). Kóðinn fyrir þessa aðferð er gefinn hér að neðan. Vinsamlegast athugaðu að fyrir hverja línu sem hefur athugasemd við eyðublaðið # Номер, það er útskýring fyrir neðan kóðann. Við munum greina önnur kóðabrot á sama hátt.

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. Slóðin sem POST beiðnin er send á. Gert er ráð fyrir að á þessu heimilisfangi sé umsókn sem geri ráð fyrir slíkum beiðnum.

2.Beiðni aðili send umsókninni. Hér er dæmi um beiðnir:

{
    sentence: "I like yogobella!"
}

3.Þegar svar við beiðni berst er ástand íhlutans uppfært. Þetta veldur því að íhluturinn er endurgerður. Ef við fáum gögn (þ.e. JSON hlut sem inniheldur inntaksgögnin og útreiknað textastig) munum við gefa út íhlutinn Polarityþar sem viðeigandi skilyrði verða uppfyllt. Svona lýsum við íhlutnum:

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

Kóðinn virðist virka nokkuð vel. Hvað er eiginlega að þessu? Ef þú gerir ráð fyrir að á heimilisfanginu sem forritið er að reyna að senda POST beiðni til sé ekkert ennþá sem getur samþykkt og afgreitt þessa beiðni, þá hefurðu alveg rétt fyrir þér. Nefnilega að afgreiða beiðnir sem berast kl http://localhost:8080/sentiment, við þurfum að keyra vefforrit byggt á Spring.

Kubernetes kennsla hluti 1: Forrit, örþjónustur og gámar
Okkur vantar vorumsókn sem getur samþykkt POST beiðni

▍Setja upp Spring byggt vefforrit

Til að dreifa Spring forriti þarftu JDK8 og Maven og rétt stilltar umhverfisbreytur. Þegar þú hefur allt þetta sett upp geturðu haldið áfram að vinna að verkefninu okkar.

▍ Að pakka forriti í jar skrá

Farðu með flugstöðinni í möppuna sa-webapp og sláðu inn eftirfarandi skipun:

mvn install

Eftir að hafa keyrt þessa skipun í möppunni sa-webapp möppu verður búin til target. Þetta er þar sem Java forritið verður staðsett, pakkað í jar skrá, táknað með skránni sentiment-analysis-web-0.0.1-SNAPSHOT.jar.

▍ Að keyra Java forrit

Farðu í möppu target og keyrðu forritið með eftirfarandi skipun:

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

Villa kemur upp þegar þessi skipun er keyrð. Til að byrja að laga það getum við greint undantekningarupplýsingarnar í stafla rekja gögnunum:

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}"

Fyrir okkur er mikilvægast hér að minnast á ómögulegt að skýra merkinguna sa.logic.api.url. Við skulum greina kóðann sem villan á sér stað í.

▍Java forritakóðagreining

Hér er kóðabúturinn þar sem villan á sér stað.

@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. Í SentimentController þar er akur saLogicApiUrl. Verðmæti þess er tilgreint af eigninni sa.logic.api.url.
  2. Lína saLogicApiUrl tengist gildinu /analyse/sentiment. Saman mynda þeir heimilisfangið til að hringja í örþjónustuna sem framkvæmir textagreiningu.

▍Stilltu eignargildi

Á vorin er staðaluppspretta eignagilda skrá application.properties, sem finna má á sa-webapp/src/main/resources. En notkun þess er ekki eina leiðin til að setja eignargildi. Þetta er einnig hægt að gera með því að nota eftirfarandi skipun:

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

Verðmæti þessarar eignar ætti að benda á heimilisfang Python forritsins okkar.

Með því að stilla það segjum við Spring vefforritinu hvert það þarf að fara til að framkvæma textagreiningarbeiðnir.

Til þess að flækja ekki líf okkar munum við ákveða að Python forritið verði fáanlegt á localhost:5000 og við skulum reyna að gleyma því ekki. Fyrir vikið mun skipunin til að ræsa Spring forritið líta svona út:

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

Kubernetes kennsla hluti 1: Forrit, örþjónustur og gámar
Kerfið okkar vantar Python forrit

Nú er allt sem við þurfum að gera er að keyra Python forritið og kerfið mun virka eins og búist var við.

▍Setja upp Python forrit

Til að keyra Python forrit verður þú að hafa Python 3 og Pip uppsett og viðeigandi umhverfisbreytur verða að vera rétt stilltar.

▍ Að setja upp ósjálfstæði

Farðu í verkefnamöppuna þína sa-logic/sa og keyrðu eftirfarandi skipanir:

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

▍ Ræstu forritið

Eftir að ósjálfstæðin hafa verið sett upp erum við tilbúin til að keyra forritið:

python sentiment_analysis.py

Eftir að hafa keyrt þessa skipun verður okkur sagt eftirfarandi:

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

Þetta þýðir að forritið er í gangi og bíður eftir beiðnum kl localhost:5000/

▍Kóðarannsóknir

Við skulum skoða Python forritskóðann til að skilja hvernig hann bregst við beiðnum:

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. Frumstilla hlut Flask.
  2. Að tilgreina heimilisfang til að framkvæma POST beiðnir til þess.
  3. Að sækja eign sentence frá beiðninni.
  4. Frumstilling á nafnlausum hlut TextBlob og fá verðmæti polarity fyrir fyrstu setninguna sem barst í meginmáli beiðninnar (í okkar tilviki er þetta eina setningin sem send er til greiningar).
  5. Skilar svari þar sem meginmálið inniheldur texta setningarinnar og útreiknaðan vísi fyrir hana polarity.
  6. Ræstu Flask forrit sem verður fáanlegt kl 0.0.0.0:5000 (þú getur líka nálgast það með því að nota eyðublaðið localhost:5000).

Örþjónusturnar sem mynda forritið eru nú í gangi. Þeir eru stilltir til að hafa samskipti sín á milli. Svona lítur umsóknarmyndin út á þessu stigi vinnunnar.

Kubernetes kennsla hluti 1: Forrit, örþjónustur og gámar
Allar örþjónustur sem mynda forritið eru settar í gang

Nú, áður en þú heldur áfram, opnaðu React forritið þitt í vafra og reyndu að flokka einhverja setningu með því. Ef allt er gert rétt - eftir að hafa ýtt á hnappinn Send þú munt sjá niðurstöður greiningar fyrir neðan textareitinn.

Í næsta kafla munum við tala um hvernig á að keyra örþjónustur okkar í Docker gámum. Þetta er nauðsynlegt til að undirbúa forritið til að keyra á Kubernetes þyrping.

Docker gámar

Kubernetes er kerfi til að gera sjálfvirkan dreifingu, mælikvarða og stjórnun gámaforrita. Það er einnig kallað „gámasveitarstjóri“. Ef Kubernetes vinnur með gáma, þá verðum við fyrst að eignast þessa gáma áður en þetta kerfi er notað. En fyrst skulum við tala um hvað ílát eru. Kannski er besta svarið við spurningunni um hvað það er að finna í skjöl til Docker:

Gámamynd er léttur, sjálfstæður, keyranlegur pakki sem inniheldur forrit, sem inniheldur allt sem þarf til að keyra það: forritakóða, framkvæmdaumhverfi, kerfisverkfæri og bókasöfn, stillingar. Hægt er að nota gámaforrit í Linux og Windows umhverfi og þau munu alltaf virka eins óháð innviðum.

Þetta þýðir að hægt er að keyra gáma á hvaða tölvu sem er, þar á meðal framleiðsluþjónum, og forritin sem eru í þeim munu virka eins í hvaða umhverfi sem er.

Til að kanna eiginleika gáma og bera þá saman við aðrar leiðir til að keyra forrit skulum við skoða dæmi um að þjóna React forriti með sýndarvél og ílát.

▍ Að þjóna kyrrstæðum skrám React forrits með sýndarvél

Þegar við erum að reyna að skipuleggja þjónustu kyrrstæðra skráa með sýndarvélum munum við lenda í eftirfarandi ókostum:

  1. Óhagkvæm nýting auðlinda, þar sem hver sýndarvél er fullbúið stýrikerfi.
  2. Platform háð. Það sem virkar á staðbundinni tölvu virkar kannski ekki á framleiðslumiðlara.
  3. Hæg og auðlindafrekur mælikvarði á lausn sem byggir á sýndarvél.

Kubernetes kennsla hluti 1: Forrit, örþjónustur og gámar
Nginx vefþjónn sem þjónar kyrrstæðum skrám sem keyra á sýndarvél

Ef gámar eru notaðir til að leysa svipað vandamál, þá má benda á eftirfarandi styrkleika í samanburði við sýndarvélar:

  1. Skilvirk notkun auðlinda: vinna með stýrikerfið með Docker.
  2. Pall óháður. Gámur sem þróunaraðili getur keyrt á tölvunni sinni virkar hvar sem er.
  3. Létt dreifing með notkun myndlaga.

Kubernetes kennsla hluti 1: Forrit, örþjónustur og gámar
Nginx vefþjónn sem þjónar kyrrstæðum skrám sem keyra í gámi

Við bárum aðeins saman sýndarvélar og gáma á nokkrum atriðum, en jafnvel þetta er nóg til að fá tilfinningu fyrir styrkleikum gáma. Hér Þú getur fundið upplýsingar um Docker gáma.

▍ Að byggja upp gámamynd fyrir React forrit

Grunnbyggingin í Docker ílát er skráin Dockerfile. Í upphafi þessarar skráar er skrá yfir grunnmynd gámsins, síðan er röð leiðbeininga sem gefur til kynna hvernig eigi að búa til gám sem uppfyllir þarfir tiltekins forrits.

Áður en við byrjum að vinna með skrána Dockerfile, við skulum muna hvað við gerðum til að undirbúa React forritaskrárnar fyrir upphleðslu á Nginx netþjóninn:

  1. Að byggja upp React umsóknarpakka (npm run build).
  2. Ræsir Nginx netþjóninn.
  3. Afritar innihald möppu build úr verkefnamöppu sa-frontend í netþjónamöppuna nginx/html.

Hér að neðan geturðu séð hliðstæður á milli þess að búa til gám og ofangreindum skrefum sem eru framkvæmd á tölvunni þinni.

▍Undirbúningur Dockerfile fyrir SA-Frontend forritið

Leiðbeiningarnar sem verða að finna í Dockerfile til umsóknar SA-Frontend, samanstanda af aðeins tveimur liðum. Staðreyndin er sú að Nginx þróunarteymið hefur undirbúið grunnatriði mynd fyrir Nginx, sem við munum nota til að búa til myndina okkar. Þetta eru tvö skref sem við þurfum að lýsa:

  1. Grunnur myndarinnar ætti að vera Nginx myndin.
  2. Innihald möppu sa-frontend/build þarf að afrita í myndamöppuna nginx/html.

Ef þú ferð úr þessari lýsingu yfir í skrána Dockerfile, þá mun það líta svona út:

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

Eins og þú sérð er allt hér mjög einfalt og innihald skrárinnar reynist jafnvel frekar læsilegt og skiljanlegt. Þessi skrá segir kerfinu að taka myndina nginx með öllu sem er þegar í henni og afritaðu innihald möppunnar build í möppuna nginx/html.

Hér gætirðu haft spurningu um hvernig ég veit hvar nákvæmlega þú þarft að afrita skrár úr möppunni build, það er hvaðan leiðin lá /usr/share/nginx/html. Í raun er ekkert flókið hér heldur. Staðreyndin er sú að viðeigandi upplýsingar er að finna í lýsingu mynd.

▍ Að byggja myndina og hlaða henni upp í geymsluna

Áður en við getum unnið með fullunna myndina þurfum við að ýta henni í myndageymsluna. Til að gera þetta munum við nota ókeypis skýjamyndhýsingarvettvang Docker Hub. Á þessu stigi vinnunnar þarftu að gera eftirfarandi:

  1. Settu upp Docker.
  2. Skráðu þig á vefsíðu Docker Hub.
  3. Skráðu þig inn á reikninginn þinn með því að keyra eftirfarandi skipun í flugstöðinni:
    docker login -u="$DOCKER_USERNAME" -p="$DOCKER_PASSWORD"

Nú þarftu að nota flugstöðina til að fara í möppuna sa-frontend og keyrðu eftirfarandi skipun þar:

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

Hingað og lengra í svipuðum skipunum $DOCKER_USER_ID ætti að skipta út fyrir Docker Hub notendanafnið þitt. Til dæmis gæti þessi hluti skipunarinnar litið svona út: rinormaloku/sentiment-analysis-frontend.

Í þessu tilviki er hægt að stytta þessa skipun með því að fjarlægja hana -f Dockerfile, þar sem þessi skrá er þegar til í möppunni þar sem við erum að keyra þessa skipun.

Til þess að senda fullunna myndina í geymsluna þurfum við eftirfarandi skipun:

docker push $DOCKER_USER_ID/sentiment-analysis-frontend

Eftir að hafa lokið því skaltu athuga listann yfir geymslurnar þínar á Docker Hub til að skilja hvort upphleðsla myndarinnar í skýjageymsluna tókst.

▍ Að keyra gám

Nú getur hver sem er halað niður og keyrt myndina, þekkt sem $DOCKER_USER_ID/sentiment-analysis-frontend. Til að gera þetta þarftu að keyra eftirfarandi röð skipana:

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

Nú er gámurinn í gangi, við getum haldið áfram að vinna með því að búa til aðrar myndir sem við þurfum. En áður en við höldum áfram skulum við skilja hönnunina 80:80, sem birtist í myndræsingarskipuninni og gæti virst ruglingslegt.

  • Fyrsta númer 80 — þetta er hýsilgáttarnúmerið (þ.e. staðbundin tölva).
  • Annað númer 80 er höfn gámsins sem beiðnina á að senda til.

Lítum á eftirfarandi mynd.

Kubernetes kennsla hluti 1: Forrit, örþjónustur og gámar
Port Forwarding

Kerfið vísar beiðnum frá höfninni <hostPort> til hafnar <containerPort>. Það er að segja aðgangur að höfninni 80 tölva er vísað á höfnina 80 ílát.

Frá höfn 80 opnað á staðbundinni tölvu, þá geturðu nálgast forritið frá þessari tölvu á localhost:80. Ef kerfið þitt styður ekki Docker er hægt að keyra forritið á Docker sýndarvél, heimilisfangið á henni mun líta út eins og <docker-machine ip>:80. Til að finna út IP tölu Docker sýndarvélarinnar geturðu notað skipunina docker-machine ip.

Á þessum tímapunkti, eftir að hafa ræst framendaforritaílátið, ættirðu að geta opnað síðu þess í vafranum.

▍ .dockerignore skráin

Að safna forritsmynd SA-Frontend, gætum við tekið eftir því að þetta ferli reynist mjög hægt. Þetta gerist vegna þess að myndasamhengið verður að senda til Docker púkans. Skráin sem táknar byggingarsamhengið er tilgreind sem síðasta rök skipunarinnar docker build. Í okkar tilviki er punktur í lok þessarar skipunar. Þetta veldur því að eftirfarandi uppbygging er tekin með í byggingarsamhenginu:

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

En af öllum möppum sem eru til staðar hér, þurfum við aðeins möppuna build. Að hlaða einhverju öðru er tímasóun. Þú getur flýtt fyrir byggingu með því að segja Docker hvaða möppur á að hunsa. Það er til þess að gera þetta sem við þurfum skrána .dockerignore. Þú, ef þú þekkir skrána .gitignore, uppbygging þessarar skráar mun líklega virðast kunnugleg. Það listar möppur sem myndbyggingarkerfið getur hunsað. Í okkar tilviki lítur innihald þessarar skráar svona út:

node_modules
src
public

skrá .dockerignore verður að vera í sömu möppu og skráin Dockerfile. Nú mun það taka nokkrar sekúndur að byggja myndina.

Við skulum nú vinna í myndinni fyrir Java forritið.

▍Búa til gámamynd fyrir Java forrit

Þú veist hvað, þú hefur nú þegar lært allt sem þú þarft að vita til að búa til gámamyndir. Þess vegna verður þessi kafli mjög stuttur.

Opnaðu skrána Dockerfilesem er í verkefnamöppunni sa-webapp. Ef þú lest texta þessarar skráar muntu sjá aðeins tvær nýbyggingar í henni, byrjað á lykilorðunum ENV и EXPOSE:

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

Lykilorð ENV Gerir þér kleift að lýsa yfir umhverfisbreytum inni í Docker gámum. Sérstaklega, í okkar tilviki, gerir það þér kleift að tilgreina vefslóð til að fá aðgang að API forritsins sem framkvæmir textagreiningu.

Lykilorð EXPOSE gerir þér kleift að segja Docker að opna höfn. Við ætlum að nota þessa höfn á meðan forritið er keyrt. Hér getur þú tekið eftir því í Dockerfile til umsóknar SA-Frontend það er engin slík skipun. Þetta er aðeins til skjala, með öðrum orðum, þessi smíði er ætluð þeim sem á að lesa Dockerfile.

Að byggja myndina og ýta henni í geymsluna lítur nákvæmlega eins út og í fyrra dæminu. Ef þú ert ekki enn öruggur um hæfileika þína, er hægt að finna samsvarandi skipanir í skránni README.md í möppu sa-webapp.

▍ Að byggja upp gámamynd fyrir Python forrit

Ef þú skoðar innihald skrárinnar Dockerfile í möppu sa-logic, þá finnurðu ekkert nýtt fyrir sjálfan þig þar. Skipanirnar til að búa til myndina og senda hana í geymsluna ættu líka að vera þér kunnuglegar, en eins og með önnur forrit okkar er hægt að finna þær í skránni README.md í möppu sa-logic.

▍Prófa gámaforrit

Geturðu treyst einhverju sem þú hefur ekki prófað? Ég get það ekki líka. Prófum gámana okkar.

  1. Við skulum ræsa forritagáminn sa-logic og stilla það til að hlusta á portinu 5050:
    docker run -d -p 5050:5000 $DOCKER_USER_ID/sentiment-analysis-logic
  2. Við skulum ræsa forritagáminn sa-webapp og stilla það til að hlusta á portinu 8080. Að auki þurfum við að stilla tengið sem Python forritið mun hlusta á beiðnir frá Java forritinu með því að endurúthluta umhverfisbreytunni 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

Til að læra hvernig á að finna út IP-tölu Docker gáms eða sýndarvélar skaltu skoða skrána README.

Við skulum ræsa forritagáminn sa-frontend:

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

Nú er allt tilbúið til að fara á heimilisfangið í vafranum localhost:80 og prófaðu forritið.

Vinsamlegast athugaðu að ef þú breyttir höfninni fyrir sa-webapp, eða ef þú ert að keyra Docker sýndarvél þarftu að breyta skránni App.js úr möppu sa-frontendmeð því að breyta IP tölu eða gáttarnúmeri í aðferðinni analyzeSentence(), í stað núverandi upplýsinga í stað gamaldags gagna. Eftir þetta þarftu að setja myndina saman aftur og nota hana.

Svona lítur umsóknarmyndin okkar út núna.

Kubernetes kennsla hluti 1: Forrit, örþjónustur og gámar
Örþjónustur keyrðar í gámum

Samantekt: hvers vegna þurfum við Kubernetes þyrping?

Við erum nýbúin að skoða skrárnar Dockerfile, talaði um hvernig á að búa til myndir og ýta þeim í Docker geymslu. Að auki lærðum við hvernig á að flýta fyrir myndasamsetningu með því að nota skrána .dockerignore. Fyrir vikið keyrir örþjónusta okkar nú í Docker gámum. Hér gætirðu haft fullkomlega réttmæta spurningu um hvers vegna við þurfum Kubernetes. Seinni hluti þessa efnis verður varið til að svara þessari spurningu. Í millitíðinni skaltu íhuga eftirfarandi spurningu:
Gerum ráð fyrir að vefforritið okkar til textagreiningar hafi orðið vinsælt um allan heim. Milljónir beiðna koma til hans á hverri mínútu. Þetta þýðir að örþjónustur sa-webapp и sa-logic verður undir miklu álagi. Hvernig á að skala gáma sem keyra örþjónustur?

Kubernetes kennsla hluti 1: Forrit, örþjónustur og gámar

Heimild: www.habr.com

Bæta við athugasemd