Tiwtorial Kubernetes Rhan 1: Cymwysiadau, Microwasanaethau a Chynhwyswyr

Ar ein cais ni, creodd Habr ganolbwynt Kubernetes ac y mae yn dda genym osod y cyhoeddiad cyntaf ynddo. Tanysgrifiwch!

Mae Kubernetes yn hawdd. Pam mae banciau yn talu llawer o arian i mi weithio yn y maes hwn, tra gall unrhyw un feistroli'r dechnoleg hon mewn ychydig oriau yn unig?

Tiwtorial Kubernetes Rhan 1: Cymwysiadau, Microwasanaethau a Chynhwyswyr

Os ydych chi'n amau ​​​​y gellir dysgu Kubernetes mor gyflym, rwy'n awgrymu eich bod chi'n rhoi cynnig arni eich hun. Sef, ar ôl meistroli'r deunydd hwn, byddwch yn gallu rhedeg cymhwysiad yn seiliedig ar ficrowasanaethau mewn clwstwr Kubernetes. Gallaf warantu hyn, gan mai'r un fethodoleg yn union a ddefnyddir yma yr wyf yn dysgu ein cleientiaid i weithio gyda Kubernetes. Beth sy'n gwneud y canllaw hwn yn wahanol i rai eraill? Mewn gwirionedd, mae yna lawer o bethau. Felly, mae'r rhan fwyaf o'r deunyddiau hyn yn dechrau gydag esboniad o bethau syml - cysyniadau Kubernetes a nodweddion y gorchymyn kubectl. Mae awduron y deunyddiau hyn yn tybio bod eu darllenwyr yn gyfarwydd â datblygu cymwysiadau, microservices, a chynwysyddion Docker. Byddwn yn mynd y ffordd arall. Yn gyntaf, byddwn yn siarad am sut i redeg cymhwysiad yn seiliedig ar ficrowasanaethau ar gyfrifiadur. Yna byddwn yn edrych ar adeiladu delweddau cynhwysydd ar gyfer pob microwasanaeth. Ac ar ôl hynny, byddwn yn dod yn gyfarwydd â Kubernetes ac yn edrych ar ddefnyddio cymhwysiad yn seiliedig ar ficrowasanaethau mewn clwstwr a reolir gan Kubernetes.

Bydd y dull hwn, gydag ymagwedd raddol at Kubernetes, yn rhoi dyfnder y ddealltwriaeth o'r hyn sy'n digwydd sy'n angenrheidiol i'r person cyffredin er mwyn deall pa mor syml y mae popeth yn gweithio yn Kubernetes. Mae Kubernetes yn sicr yn dechnoleg syml, ar yr amod bod y rhai sydd am ei ddysgu yn gwybod ble a sut y caiff ei ddefnyddio.

Nawr, heb ragor o wybodaeth, gadewch i ni ddechrau a siarad am y cais y byddwn yn gweithio gydag ef.

Cais arbrofol

Bydd ein cais yn cyflawni un swyddogaeth yn unig. Mae'n cymryd un frawddeg fel mewnbwn, ac ar ôl hynny, gan ddefnyddio offer dadansoddi testun, mae'n perfformio dadansoddiad teimlad o'r frawddeg hon, gan gael asesiad o agwedd emosiynol awdur y frawddeg at wrthrych penodol.

Dyma sut olwg sydd ar brif ffenestr y cais hwn.

Tiwtorial Kubernetes Rhan 1: Cymwysiadau, Microwasanaethau a Chynhwyswyr
Cais gwe ar gyfer dadansoddi teimladau o destunau

O safbwynt technegol, mae'r cais yn cynnwys tri microwasanaeth, ac mae pob un ohonynt yn datrys set benodol o dasgau:

  • Mae SA-Frontend yn weinydd gwe Nginx sy'n gwasanaethu ffeiliau React statig.
  • Mae SA-WebApp yn gymhwysiad gwe a ysgrifennwyd yn Java sy'n prosesu ceisiadau o'r blaen.
  • Mae SA-Logic yn gymhwysiad Python sy'n dadansoddi teimladau ar destun.

Mae'n bwysig nodi nad yw microwasanaethau yn bodoli ar eu pen eu hunain. Maent yn gweithredu'r syniad o "wahanu cyfrifoldebau", ond ar yr un pryd mae angen iddynt ryngweithio â'i gilydd.

Tiwtorial Kubernetes Rhan 1: Cymwysiadau, Microwasanaethau a Chynhwyswyr
Llif data yn y cais

Yn y diagram uchod, gallwch weld y camau wedi'u rhifo yn y system, gan ddangos y llif data yn y cymhwysiad. Gadewch i ni edrych arnyn nhw:

  1. Mae'r porwr yn gofyn am ffeil gan y gweinydd index.html (sydd, yn ei dro, yn llwytho i lawr y pecyn cais React).
  2. Mae'r defnyddiwr yn rhyngweithio â'r rhaglen, mae hyn yn achosi galwad i'r cymhwysiad gwe sy'n seiliedig ar y Gwanwyn.
  3. Mae'r cymhwysiad gwe yn anfon y cais i berfformio dadansoddiad testun ymlaen i raglen Python.
  4. Mae'r rhaglen Python yn cynnal dadansoddiad teimlad o'r testun ac yn dychwelyd y canlyniad fel ymateb i'r cais.
  5. Mae cymhwysiad y Gwanwyn yn anfon ymateb i raglen React (sydd, yn ei dro, yn dangos canlyniad y dadansoddiad testun i'r defnyddiwr).

Gellir dod o hyd i'r cod ar gyfer yr holl gymwysiadau hyn yma. Rwy'n argymell eich bod yn copïo'r ystorfa hon i chi'ch hun ar hyn o bryd, gan fod llawer o arbrofion diddorol ag ef o'n blaenau.

Rhedeg rhaglen sy'n seiliedig ar ficrowasanaethau ar eich peiriant lleol

Er mwyn i'r cais weithio, mae angen i ni ddechrau pob un o'r tri microwasanaeth. Gadewch i ni ddechrau gyda'r mwyaf ciwt ohonyn nhw i gyd - y cais pen blaen.

▍Sefydlu React ar gyfer datblygiad lleol

Er mwyn rhedeg cymhwysiad React, mae angen i chi osod platfform Node.js ac NPM ar eich cyfrifiadur. Unwaith y byddwch wedi gosod hyn i gyd, defnyddiwch y derfynell i lywio i'ch ffolder prosiect sa-frontend a rhedeg y gorchymyn canlynol:

npm install

Trwy redeg y gorchymyn hwn yn y ffolder node_modules bydd dibyniaethau cymhwysiad React yn cael eu llwytho, y mae cofnodion ohonynt yn y ffeil package.json. Unwaith y bydd y dibyniaethau wedi'u llwytho i lawr yn yr un ffolder, rhedeg y gorchymyn canlynol:

npm start

Dyna i gyd. Nawr bod y rhaglen React yn rhedeg, gallwch gael mynediad iddo trwy fynd i'r cyfeiriad canlynol yn eich porwr: localhost:3000. Gallwch chi newid rhywbeth yn ei god. Byddwch yn gweld effaith y newidiadau hyn ar unwaith yn y porwr. Mae hyn yn bosibl diolch i'r hyn a elwir yn amnewid modiwlau yn “boeth”. Mae hyn yn gwneud datblygiad pen blaen yn brofiad syml a phleserus.

▍ Paratoi cais React ar gyfer cynhyrchu

Er mwyn defnyddio cymhwysiad React mewn gwirionedd, mae angen i ni ei drawsnewid yn set o ffeiliau statig a'u gwasanaethu i gleientiaid gan ddefnyddio gweinydd gwe.

I adeiladu'r cymhwysiad React, gan ddefnyddio'r derfynell eto, llywiwch i'r ffolder sa-frontend a rhedeg y gorchymyn canlynol:

npm run build

Bydd hyn yn creu cyfeiriadur yn y ffolder prosiect build. Bydd yn cynnwys yr holl ffeiliau statig sy'n angenrheidiol er mwyn i raglen React weithio.

▍ Gwasanaethu ffeiliau statig gan ddefnyddio Nginx

Yn gyntaf mae angen i chi osod a rhedeg gweinydd gwe Nginx. Yma gallwch ei lawrlwytho a dod o hyd i gyfarwyddiadau ar sut i'w osod a'i redeg. Yna mae angen i chi gopïo cynnwys y ffolder sa-frontend/build i ffolder [your_nginx_installation_dir]/html.

Gyda'r dull hwn, y ffeil a gynhyrchir yn ystod y broses adeiladu y cais React index.html bydd ar gael yn [your_nginx_installation_dir]/html/index.html. Dyma'r ffeil y mae gweinydd Nginx, yn ddiofyn, yn ei chynhyrchu wrth ei chyrchu. Mae'r gweinydd wedi'i ffurfweddu i wrando ar y porth 80, ond gellir ei addasu yn y ffordd sydd ei angen arnoch trwy olygu'r ffeil [your_nginx_installation_dir]/conf/nginx.conf.

Nawr agorwch eich porwr ac ewch i localhost:80. Fe welwch dudalen cais React.

Tiwtorial Kubernetes Rhan 1: Cymwysiadau, Microwasanaethau a Chynhwyswyr
Cais React a wasanaethir gan weinydd Nginx

Os rhowch rywbeth i'r cae nawr Type your sentence a gwasgwch y botwm Send - fydd dim byd yn digwydd. Ond, os edrychwch ar y consol, gallwch weld negeseuon gwall yno. Er mwyn deall yn union ble mae'r gwallau hyn yn digwydd, gadewch i ni ddadansoddi cod y cais.

▍ Dadansoddiad cod cais pen blaen

Edrych ar god y ffeil App.js, gallwn weld bod pwyso'r botwm Send yn galw dull analyzeSentence(). Rhoddir y cod ar gyfer y dull hwn isod. Sylwch, ar gyfer pob llinell sydd â sylw o'r ffurflen # Номер, mae esboniad o dan y cod. Byddwn yn dadansoddi darnau eraill o god yn yr un modd.

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. Yr URL y gwneir y cais POST iddo. Tybir bod cais yn y cyfeiriad hwn sy'n disgwyl ceisiadau o'r fath.

2.Anfonodd y corff cais at y cais. Dyma enghraifft o gorff ceisiadau:

{
    sentence: "I like yogobella!"
}

3.Pan dderbynnir ymateb i gais, caiff cyflwr y gydran ei ddiweddaru. Mae hyn yn achosi i'r gydran gael ei hail-rendro. Os byddwn yn derbyn data (hynny yw, gwrthrych JSON sy'n cynnwys y data mewnbwn a'r sgôr testun wedi'i gyfrifo), byddwn yn allbynnu'r gydran Polarity, gan y bydd yr amodau priodol yn cael eu bodloni. Dyma sut rydyn ni'n disgrifio'r gydran:

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

Mae'n ymddangos bod y cod yn gweithio'n eithaf da. Beth sy'n bod ar hyn, beth bynnag? Os cymerwch yn ganiataol yn y cyfeiriad y mae’r cais yn ceisio anfon cais POST iddo, nad oes dim eto a all dderbyn a phrosesu’r cais hwn, yna byddwch yn llygad eich lle. Sef, i brosesu ceisiadau a dderbyniwyd yn http://localhost:8080/sentiment, mae angen i ni redeg cais gwe yn seiliedig ar y Gwanwyn.

Tiwtorial Kubernetes Rhan 1: Cymwysiadau, Microwasanaethau a Chynhwyswyr
Mae angen cais Gwanwyn arnom a all dderbyn cais POST

▍ Sefydlu cymhwysiad gwe sy'n seiliedig ar y Gwanwyn

Er mwyn defnyddio cymhwysiad Gwanwyn, bydd angen JDK8 a Maven a newidynnau amgylchedd wedi'u ffurfweddu'n gywir arnoch. Unwaith y byddwch wedi gosod hyn i gyd, gallwch barhau i weithio ar ein prosiect.

▍ Pecynnu cymhwysiad i ffeil jar

Llywiwch, gan ddefnyddio terfynell, i'r ffolder sa-webapp a nodwch y gorchymyn canlynol:

mvn install

Ar ôl rhedeg y gorchymyn hwn yn y ffolder sa-webapp bydd cyfeiriadur yn cael ei greu target. Dyma lle bydd y cymhwysiad Java wedi'i leoli, wedi'i becynnu mewn ffeil jar, a gynrychiolir gan y ffeil sentiment-analysis-web-0.0.1-SNAPSHOT.jar.

▍ Rhedeg cymhwysiad Java

Ewch i'r ffolder target a rhedeg y cais gyda'r gorchymyn canlynol:

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

Bydd gwall yn digwydd wrth weithredu'r gorchymyn hwn. I ddechrau ei drwsio, gallwn ddadansoddi'r manylion eithriad yn y data olrhain pentwr:

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

I ni, y peth pwysicaf yma yw y crybwylliad am yr anmhosiblrwydd o egluro yr ystyr sa.logic.api.url. Gadewch i ni ddadansoddi'r cod y mae'r gwall yn digwydd ynddo.

▍ Dadansoddiad cod cais Java

Dyma'r pyt cod lle mae'r gwall yn digwydd.

@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. Yn SentimentController mae maes saLogicApiUrl. Pennir ei werth gan yr eiddo sa.logic.api.url.
  2. Llinyn saLogicApiUrl yn cyd-fynd â'r gwerth /analyse/sentiment. Gyda'i gilydd maent yn ffurfio'r cyfeiriad ar gyfer gwneud galwad i'r microwasanaeth sy'n cynnal dadansoddiad testun.

▍Pennu gwerth eiddo

Yn y Gwanwyn, ffeil safonol yw ffynhonnell safonol gwerthoedd eiddo application.properties, sydd i'w gael yn sa-webapp/src/main/resources. Ond nid ei ddefnydd yw'r unig ffordd i osod gwerthoedd eiddo. Gellir gwneud hyn hefyd gan ddefnyddio'r gorchymyn canlynol:

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

Dylai gwerth yr eiddo hwn dynnu sylw at gyfeiriad ein cais Python.

Trwy ei ffurfweddu, rydyn ni'n dweud wrth raglen we Spring i ble mae angen iddo fynd i gyflawni ceisiadau dadansoddi testun.

Er mwyn peidio â chymhlethu ein bywyd, byddwn yn penderfynu y bydd y rhaglen Python ar gael yn localhost:5000 a gadewch i ni geisio peidio ag anghofio amdano. O ganlyniad, bydd y gorchymyn i lansio cymhwysiad y Gwanwyn yn edrych fel hyn:

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

Tiwtorial Kubernetes Rhan 1: Cymwysiadau, Microwasanaethau a Chynhwyswyr
Mae rhaglen Python ar goll o'n system

Nawr y cyfan sy'n rhaid i ni ei wneud yw rhedeg y rhaglen Python a bydd y system yn gweithio yn ôl y disgwyl.

▍ Sefydlu cymhwysiad Python

I redeg rhaglen Python, rhaid bod Python 3 a Pip wedi'u gosod, a rhaid gosod y newidynnau amgylchedd priodol yn gywir.

▍Gosod dibyniaethau

Ewch i'ch ffolder prosiect sa-logic/sa a rhedeg y gorchmynion canlynol:

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

▍ Lansio'r cais

Ar ôl gosod y dibyniaethau, rydym yn barod i redeg y cais:

python sentiment_analysis.py

Ar ôl rhedeg y gorchymyn hwn byddwn yn cael gwybod y canlynol:

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

Mae hyn yn golygu bod y cais yn rhedeg ac yn aros am geisiadau yn localhost:5000/

▍ Ymchwil Cod

Gadewch i ni edrych ar god cais Python i ddeall sut mae'n ymateb i geisiadau:

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. Cychwyn gwrthrych Flask.
  2. Pennu cyfeiriad ar gyfer perfformio ceisiadau POST iddo.
  3. Adalw Eiddo sentence oddi wrth y corff cais.
  4. Cychwyn Gwrthrych Anhysbys TextBlob a chael y gwerth polarity am y frawddeg gyntaf a dderbyniwyd yng nghorff y cais (yn ein hachos ni, dyma'r unig ddedfryd a anfonwyd i'w dadansoddi).
  5. Dychwelyd ymateb y mae ei gorff yn cynnwys testun y frawddeg a'r dangosydd wedi'i gyfrifo ar ei gyfer polarity.
  6. Lansio cais Fflasg, a fydd ar gael yn 0.0.0.0:5000 (gallwch hefyd gael mynediad iddo gan ddefnyddio lluniad o'r ffurflen localhost:5000).

Mae'r microwasanaethau sy'n rhan o'r cais bellach yn rhedeg. Maent yn cael eu tiwnio i ryngweithio â'i gilydd. Dyma sut olwg sydd ar y diagram cymhwyso ar y cam hwn o'r gwaith.

Tiwtorial Kubernetes Rhan 1: Cymwysiadau, Microwasanaethau a Chynhwyswyr
Mae'r holl ficrowasanaethau sy'n rhan o'r cais yn dod i gyflwr gweithio

Nawr, cyn i chi barhau, agorwch eich cais React mewn porwr a cheisiwch ddosrannu rhyw frawddeg ag ef. Os gwneir popeth yn gywir - ar ôl pwyso'r botwm Send fe welwch y canlyniadau dadansoddi o dan y maes testun.

Yn yr adran nesaf, byddwn yn siarad am sut i redeg ein microwasanaethau mewn cynwysyddion Docker. Mae hyn yn angenrheidiol er mwyn paratoi'r cais i redeg ar glwstwr Kubernetes.

Cynwysyddion docwyr

Kubernetes yn system ar gyfer awtomeiddio'r broses o leoli, graddio a rheoli cymwysiadau cynhwysydd. Fe'i gelwir hefyd yn “gerddorfawr cynhwysydd”. Os yw Kubernetes yn gweithio gyda chynwysyddion, yna cyn defnyddio'r system hon mae'n rhaid i ni gaffael y cynwysyddion hyn yn gyntaf. Ond yn gyntaf, gadewch i ni siarad am beth yw cynwysyddion. Efallai mai'r ateb gorau i'r cwestiwn o beth ydyw i'w gael ynddo dogfennaeth i Docker:

Mae delwedd cynhwysydd yn becyn ysgafn, hunangynhwysol, gweithredadwy sy'n cynnwys cymhwysiad, sy'n cynnwys popeth sy'n angenrheidiol i'w redeg: cod cais, amgylchedd gweithredu, offer system a llyfrgelloedd, gosodiadau. Gellir defnyddio rhaglenni mewn cynhwysydd mewn amgylcheddau Linux a Windows, a byddant bob amser yn gweithio yr un peth waeth beth fo'r seilwaith.

Mae hyn yn golygu y gellir rhedeg cynwysyddion ar unrhyw gyfrifiadur, gan gynnwys gweinyddwyr cynhyrchu, a bydd y cymwysiadau sydd ynddynt yn gweithio yr un peth mewn unrhyw amgylchedd.

Er mwyn archwilio nodweddion cynwysyddion a'u cymharu â ffyrdd eraill o redeg cymwysiadau, gadewch i ni edrych ar enghraifft o wasanaethu cymhwysiad React gan ddefnyddio peiriant rhithwir a chynhwysydd.

▍Gwasanaethu ffeiliau statig o raglen React gan ddefnyddio peiriant rhithwir

Wrth geisio trefnu gwasanaeth ffeiliau statig gan ddefnyddio peiriannau rhithwir, byddwn yn dod ar draws yr anfanteision canlynol:

  1. Defnydd aneffeithlon o adnoddau, gan fod pob peiriant rhithwir yn system weithredu lawn.
  2. Dibyniaeth llwyfan. Efallai na fydd yr hyn sy'n gweithio ar gyfrifiadur lleol yn gweithio ar weinydd cynhyrchu.
  3. Graddio datrysiad sy'n seiliedig ar beiriant rhithwir yn araf ac yn defnyddio llawer o adnoddau.

Tiwtorial Kubernetes Rhan 1: Cymwysiadau, Microwasanaethau a Chynhwyswyr
Gweinydd gwe Nginx yn gwasanaethu ffeiliau statig yn rhedeg ar beiriant rhithwir

Os defnyddir cynwysyddion i ddatrys problem debyg, yna, o gymharu â pheiriannau rhithwir, gellir nodi'r cryfderau canlynol:

  1. Defnydd effeithlon o adnoddau: gweithio gyda'r system weithredu gan ddefnyddio Docker.
  2. Llwyfan yn annibynnol. Bydd cynhwysydd y gall datblygwr ei redeg ar ei gyfrifiadur yn gweithio yn unrhyw le.
  3. Defnydd ysgafn trwy ddefnyddio haenau delwedd.

Tiwtorial Kubernetes Rhan 1: Cymwysiadau, Microwasanaethau a Chynhwyswyr
Gweinydd gwe Nginx yn gwasanaethu ffeiliau statig yn rhedeg mewn cynhwysydd

Dim ond ar ychydig o bwyntiau y gwnaethom gymharu peiriannau rhithwir a chynwysyddion, ond mae hyn hyd yn oed yn ddigon i gael teimlad o gryfderau cynwysyddion. Yma Gallwch ddod o hyd i fanylion am gynwysyddion Docker.

▍ Adeiladu delwedd cynhwysydd ar gyfer cymhwysiad React

Bloc adeiladu sylfaenol cynhwysydd Docker yw'r ffeil Dockerfile. Ar ddechrau'r ffeil hon, gwneir cofnod o ddelwedd sylfaenol y cynhwysydd, yna mae dilyniant o gyfarwyddiadau sy'n nodi sut i greu cynhwysydd a fydd yn diwallu anghenion cais penodol.

Cyn i ni ddechrau gweithio gyda'r ffeil Dockerfile, gadewch i ni gofio'r hyn a wnaethom i baratoi'r ffeiliau cais React i'w huwchlwytho i weinydd Nginx:

  1. Adeiladu pecyn cais React (npm run build).
  2. Cychwyn y gweinydd Nginx.
  3. Copïo cynnwys y cyfeiriadur build o ffolder prosiect sa-frontend i ffolder y gweinydd nginx/html.

Isod gallwch weld y tebygrwydd rhwng creu cynhwysydd a'r camau uchod a gyflawnir ar eich cyfrifiadur lleol.

▍ Paratoi'r Dockerfile ar gyfer y cais SA-Frontend

Y cyfarwyddiadau a fydd yn gynwysedig yn Dockerfile i'w gyflwyno SA-Frontend, yn cynnwys dim ond dau dîm. Y ffaith yw bod tîm datblygu Nginx wedi paratoi sylfaenol delwedd ar gyfer Nginx, y byddwn yn ei ddefnyddio i greu ein delwedd. Dyma’r ddau gam y mae angen i ni eu disgrifio:

  1. Dylai sail y ddelwedd fod yn ddelwedd Nginx.
  2. Cynnwys Ffolder sa-frontend/build angen eu copïo i'r ffolder delwedd nginx/html.

Os ewch chi o'r disgrifiad hwn i'r ffeil Dockerfile, yna bydd yn edrych fel hyn:

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

Fel y gallwch weld, mae popeth yma yn syml iawn, ac mae cynnwys y ffeil hyd yn oed yn troi allan i fod yn eithaf darllenadwy a dealladwy. Mae'r ffeil hon yn dweud wrth y system i dynnu'r ddelwedd nginx gyda phopeth sydd ynddo eisoes, a chopïwch gynnwys y cyfeiriadur build i'r cyfeiriadur nginx/html.

Yma efallai y bydd gennych gwestiwn ynglŷn â sut rwy'n gwybod ble yn union y mae angen i chi gopïo ffeiliau o'r ffolder build, hynny yw, o ble y daeth y llwybr /usr/share/nginx/html. Mewn gwirionedd, nid oes unrhyw beth cymhleth yma ychwaith. Y ffaith yw y gellir dod o hyd i'r wybodaeth berthnasol yn disgrifiad delwedd.

▍Adeiladu'r ddelwedd a'i huwchlwytho i'r gadwrfa

Cyn y gallwn weithio gyda'r ddelwedd orffenedig, mae angen inni ei gwthio i'r storfa ddelwedd. I wneud hyn, byddwn yn defnyddio'r platfform cynnal delwedd cwmwl rhad ac am ddim Docker Hub. Ar y cam hwn o’r gwaith mae angen i chi wneud y canlynol:

  1. I osod Docker.
  2. Cofrestrwch ar wefan Docker Hub.
  3. Mewngofnodwch i'ch cyfrif trwy redeg y gorchymyn canlynol yn y derfynell:
    docker login -u="$DOCKER_USERNAME" -p="$DOCKER_PASSWORD"

Nawr mae angen i chi ddefnyddio'r derfynell i fynd i'r cyfeiriadur sa-frontend a rhedeg y gorchymyn canlynol yno:

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

Yma ac ymhellach mewn gorchmynion tebyg $DOCKER_USER_ID dylid ei ddisodli gan eich enw defnyddiwr Docker Hub. Er enghraifft, gallai'r rhan hon o'r gorchymyn edrych fel hyn: rinormaloku/sentiment-analysis-frontend.

Yn yr achos hwn, gellir byrhau'r gorchymyn hwn trwy dynnu ohono -f Dockerfile, gan fod y ffeil hon eisoes yn bodoli yn y ffolder yr ydym yn gweithredu'r gorchymyn hwn ynddo.

Er mwyn anfon y ddelwedd orffenedig i'r ystorfa, mae angen y gorchymyn canlynol arnom:

docker push $DOCKER_USER_ID/sentiment-analysis-frontend

Ar ôl ei gwblhau, gwiriwch y rhestr o'ch ystorfeydd ar Docker Hub er mwyn deall a oedd uwchlwytho'r ddelwedd i'r storfa cwmwl yn llwyddiannus.

▍ Rhedeg cynhwysydd

Nawr gall unrhyw un lawrlwytho a rhedeg y ddelwedd, a elwir yn $DOCKER_USER_ID/sentiment-analysis-frontend. Er mwyn gwneud hyn, mae angen i chi redeg y dilyniant canlynol o orchmynion:

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

Nawr bod y cynhwysydd yn rhedeg, gallwn barhau i weithio trwy greu delweddau eraill sydd eu hangen arnom. Ond cyn i ni barhau, gadewch i ni ddeall y dyluniad 80:80, sy'n ymddangos yn y gorchymyn lansio delwedd a gall ymddangos yn ddryslyd.

  • Rhif cyntaf 80 — dyma rif y porth gwesteiwr (hynny yw, y cyfrifiadur lleol).
  • Ail rif 80 yw porthladd y cynhwysydd y dylid anfon y cais ato.

Ystyriwch yr enghraifft ganlynol.

Tiwtorial Kubernetes Rhan 1: Cymwysiadau, Microwasanaethau a Chynhwyswyr
Anfon Port

Mae'r system yn ailgyfeirio ceisiadau o'r porthladd <hostPort> i'r porthladd <containerPort>. Hynny yw, mynediad i'r porthladd 80 cyfrifiadur yn cael ei ailgyfeirio i'r porthladd 80 cynhwysydd.

Ers y porthladd 80 agor ar y cyfrifiadur lleol, yna gallwch gael mynediad at y cais o'r cyfrifiadur hwn yn localhost:80. Os nad yw'ch system yn cefnogi Docker, gellir rhedeg y rhaglen ar beiriant rhithwir Docker, y bydd ei gyfeiriad yn edrych fel <docker-machine ip>:80. I ddarganfod cyfeiriad IP peiriant rhithwir Docker, gallwch ddefnyddio'r gorchymyn docker-machine ip.

Ar y pwynt hwn, ar ôl lansio'r cynhwysydd cais pen blaen yn llwyddiannus, dylech allu agor ei dudalen yn y porwr.

▍ Y ffeil .dockerignore

Casglu delwedd cais SA-Frontend, gallem sylwi bod y broses hon yn troi allan i fod yn hynod o araf. Mae hyn yn digwydd oherwydd bod yn rhaid anfon y cyd-destun adeiladu delwedd i'r daemon Dociwr. Mae'r cyfeiriadur sy'n cynrychioli'r cyd-destun adeiladu wedi'i nodi fel dadl olaf y gorchymyn docker build. Yn ein hachos ni, mae dot ar ddiwedd y gorchymyn hwn. Mae hyn yn achosi i'r strwythur canlynol gael ei gynnwys yn y cyd-destun adeiladu:

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

Ond o'r holl ffolderi sy'n bresennol yma, dim ond y ffolder sydd ei angen arnom build. Mae llwytho unrhyw beth arall yn wastraff amser. Gallwch gyflymu'r gwaith adeiladu trwy ddweud wrth Docker pa gyfeiriaduron i'w hanwybyddu. Er mwyn gwneud hyn mae angen y ffeil arnom .dockerignore. Chi, os ydych chi'n gyfarwydd â'r ffeil .gitignore, mae'n debyg y bydd strwythur y ffeil hon yn ymddangos yn gyfarwydd. Mae'n rhestru cyfeiriaduron y gall y system adeiladu delweddau eu hanwybyddu. Yn ein hachos ni, mae cynnwys y ffeil hon yn edrych fel hyn:

node_modules
src
public

file .dockerignore rhaid iddo fod yn yr un ffolder â'r ffeil Dockerfile. Nawr bydd adeiladu'r ddelwedd yn cymryd ychydig eiliadau.

Gadewch i ni nawr weithio ar y ddelwedd ar gyfer y cymhwysiad Java.

▍ Adeiladu delwedd cynhwysydd ar gyfer cymhwysiad Java

Rydych chi'n gwybod beth, rydych chi eisoes wedi dysgu popeth sydd angen i chi ei wybod i greu delweddau cynhwysydd. Dyna pam y bydd yr adran hon yn fyr iawn.

Agorwch y ffeil Dockerfilesydd yn y ffolder prosiect sa-webapp. Os darllenwch destun y ffeil hon, dim ond dau luniad newydd a welwch ynddi, gan ddechrau gyda'r allweddeiriau ENV и EXPOSE:

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

Allweddair ENV Yn caniatáu ichi ddatgan newidynnau amgylchedd y tu mewn i gynwysyddion Docker. Yn benodol, yn ein hachos ni, mae'n caniatáu ichi nodi URL i gael mynediad at API y cais sy'n perfformio dadansoddiad testun.

Allweddair EXPOSE yn caniatáu ichi ddweud wrth Docker am agor porthladd. Rydyn ni'n mynd i ddefnyddio'r porthladd hwn wrth redeg y rhaglen. Yma gallwch chi sylwi bod yn Dockerfile i'w gyflwyno SA-Frontend nid oes gorchymyn o'r fath. Dim ond at ddibenion dogfennaeth y mae hyn, mewn geiriau eraill, mae'r lluniad hwn wedi'i fwriadu ar gyfer yr un a fydd yn darllen Dockerfile.

Mae adeiladu'r ddelwedd a'i gwthio i'r ystorfa yn edrych yn union yr un fath ag yn yr enghraifft flaenorol. Os nad ydych chi'n hyderus iawn yn eich galluoedd eto, mae'r gorchmynion cyfatebol i'w gweld yn y ffeil README.md mewn ffolder sa-webapp.

▍ Adeiladu delwedd cynhwysydd ar gyfer cymhwysiad Python

Os edrychwch ar gynnwys y ffeil Dockerfile mewn ffolder sa-logic, yna ni fyddwch yn dod o hyd i unrhyw beth newydd i chi'ch hun yno. Dylai'r gorchmynion ar gyfer adeiladu'r ddelwedd a'i hanfon i'r gadwrfa fod yn gyfarwydd i chi eisoes hefyd, ond, fel gyda'n cymwysiadau eraill, maent i'w cael yn y ffeil README.md mewn ffolder sa-logic.

▍ Profi cymwysiadau mewn cynhwysyddion

Allwch chi ymddiried yn rhywbeth nad ydych chi wedi'i brofi? Ni allaf hefyd. Gadewch i ni brofi ein cynwysyddion.

  1. Gadewch i ni lansio'r cynhwysydd cais sa-logic a'i ffurfweddu i wrando ar y porthladd 5050:
    docker run -d -p 5050:5000 $DOCKER_USER_ID/sentiment-analysis-logic
  2. Gadewch i ni lansio'r cynhwysydd cais sa-webapp a'i ffurfweddu i wrando ar y porthladd 8080. Yn ogystal, mae angen i ni ffurfweddu'r porthladd y bydd y rhaglen Python yn gwrando arno am geisiadau o'r cymhwysiad Java trwy ailbennu'r newidyn amgylchedd 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

I ddysgu sut i ddarganfod cyfeiriad IP cynhwysydd Docker neu beiriant rhithwir, cyfeiriwch at y ffeil README.

Gadewch i ni lansio'r cynhwysydd cais sa-frontend:

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

Nawr mae popeth yn barod i fynd i'r cyfeiriad yn y porwr localhost:80 a rhowch gynnig ar y cais.

Sylwch, os gwnaethoch newid y porthladd ar gyfer sa-webapp, neu os ydych chi'n rhedeg peiriant rhithwir Docker, bydd angen i chi olygu'r ffeil App.js o'r ffolder sa-frontendtrwy newid y cyfeiriad IP neu rif porthladd yn y dull analyzeSentence(), rhoi gwybodaeth gyfredol yn lle data sydd wedi dyddio. Ar ôl hyn, mae angen i chi ailosod y ddelwedd a'i defnyddio.

Dyma sut olwg sydd ar ein diagram cais nawr.

Tiwtorial Kubernetes Rhan 1: Cymwysiadau, Microwasanaethau a Chynhwyswyr
Mae microwasanaethau'n rhedeg mewn cynwysyddion

Crynodeb: pam mae angen clwstwr Kubernetes arnom?

Rydym newydd archwilio'r ffeiliau Dockerfile, siaradodd am sut i adeiladu delweddau a'u gwthio i gadwrfa Docker. Yn ogystal, dysgon ni sut i gyflymu cydosod delweddau gan ddefnyddio'r ffeil .dockerignore. O ganlyniad, mae ein microwasanaethau bellach yn rhedeg mewn cynwysyddion Docker. Yma efallai bod gennych gwestiwn cwbl gyfiawn ynghylch pam mae angen Kubernetes arnom. Bydd ail ran y deunydd hwn yn cael ei neilltuo i ateb y cwestiwn hwn. Yn y cyfamser, ystyriwch y cwestiwn canlynol:
Gadewch i ni dybio bod ein cymhwysiad gwe ar gyfer dadansoddi testun wedi dod yn boblogaidd ledled y byd. Daw miliynau o geisiadau ato bob munud. Mae hyn yn golygu bod microservices sa-webapp и sa-logic bydd o dan lwyth enfawr. Sut i raddfa cynwysyddion sy'n rhedeg microwasanaethau?

Tiwtorial Kubernetes Rhan 1: Cymwysiadau, Microwasanaethau a Chynhwyswyr

Ffynhonnell: hab.com

Ychwanegu sylw