Kubernetes Guide Chikamu 1: Zvishandiso, Microservices, uye Containers

Nekukumbira kwedu, Habr akagadzira hub Kubernetes uye tinofara kugovera chinyorwa chokutanga mariri. Bhalisa!

Kubernetes iri nyore. Sei mabhangi achindibhadhara mari yakawanda kuti ndishande munzvimbo iyi, nepo chero munhu achigona kugona tekinoroji iyi mumaawa mashoma?

Kubernetes Guide Chikamu 1: Zvishandiso, Microservices, uye Containers

Kana iwe uchikahadzika kuti Kubernetes inogona kudzidzwa nekukurumidza, ini ndinokurudzira kuti uedze iwe pachako. Sezvineiwo, wagona ichi chinyorwa, iwe unozogona kumhanyisa application yakavakirwa pamicroservices muKubernetes cluster. Ndinogona kuvimbisa izvi, sezvo iri chaiyo nzira imwe chete inoshandiswa pano yandinodzidzisa vatengi vedu kushanda neKubernetes. Chii chinoita kuti gwaro iri risiyane nemamwe? Chokwadi, pane zvinhu zvakawanda. Saka, zvizhinji zvezvinhu izvi zvinotanga nekutsanangurwa kwezvinhu zviri nyore - pfungwa dzeKubernetes uye maficha eiyo kubectl yekuraira. Vanyori vezvinhu izvi vanofungidzira kuti vaverengi vavo vanoziva nezvekuvandudza kwekushandisa, microservices, uye Docker midziyo. Tichaenda neimwe nzira. Kutanga, isu tichataura nezve maitiro ekushandisa application yakavakirwa microservices pakombuta. Ipapo isu tichatarisa kuvaka mifananidzo yemidziyo kune yega yega microservice. Uye mushure meizvozvo, isu tichajairana naKubernetes uye totarisa kuendesa application yakavakirwa pamicroservices muboka rinotungamirirwa naKubernetes.

Iyi nzira, ine zvishoma nezvishoma nzira yeKubernetes, ichapa kudzika kwekunzwisisa kwezviri kuitika izvo zvinodiwa kune munhuwo zvake kuti anzwisise kuti zvese zvinoshanda sei muKubernetes. Kubernetes zvirokwazvo tekinoroji yakapusa, chero avo vanoda kuidzidza vanoziva kupi uye sei inoshandiswa.

Zvino, pasina imwe ado, ngatitangei uye titaure nezve application yatichashanda nayo.

Kuedza kushandisa

Yedu application ichaita basa rimwe chete. Zvinotora mutsara mumwechete sekupinza, mushure mezvo, kushandisa zvinyorwa zvekuongorora zvinyorwa, inoita manzwiro ekuongorora mutsara uyu, kuwana kuongororwa kwemafungiro emanzwiro emunyori wemutsara kune chimwe chinhu.

Izvi ndizvo zvinoita hwindo guru reiyi application.

Kubernetes Guide Chikamu 1: Zvishandiso, Microservices, uye Containers
Webhu application yekuongorora manzwiro ezvinyorwa

Kubva pane tekinoroji yekuona, iyo application ine matatu microservices, imwe neimwe inogadzirisa yakatarwa seti yemabasa:

  • SA-Frontend ndeye Nginx webhu server inoshandira static React mafaera.
  • SA-WebApp iwebhu application yakanyorwa muJava iyo inogadzirisa zvikumbiro kubva kumberi.
  • SA-Logic ndeyePython application inoita ongororo yemanzwiro pane zvinyorwa.

Izvo zvakakosha kuti uzive kuti ma microservices haapo ari ega. Ivo vanoita pfungwa ye "kuparadzaniswa kwemabasa", asi panguva imwechete ivo vanofanirwa kutaurirana.

Kubernetes Guide Chikamu 1: Zvishandiso, Microservices, uye Containers
Data inoyerera mukushandisa

Mumufananidzo uri pamusoro, unogona kuona matanho akaverengerwa ehurongwa, achiratidza kuyerera kwe data mukushandisa. Ngativatarise:

  1. Bhurawuza inokumbira faira kubva kuseva index.html (iyo, zvakare, inorodha iyo React application package).
  2. Mushandisi anodyidzana nechishandiso, izvi zvinokonzeresa kufona kune Spring-based web application.
  3. Iyo webhu application inoendesa mberi chikumbiro chekuita ongororo yezvinyorwa kune iyo Python application.
  4. Iyo Python application inoita ongororo yemanzwiro echinyorwa uye inodzosera mhedzisiro semhinduro kuchikumbiro.
  5. Iyo Chitubu application inotumira mhinduro kuReact application (iyo, inoratidzawo mhedzisiro yekuongorora kwemavara kumushandisi).

Kodhi yezvikumbiro zvese izvi inogona kuwanikwa pano. Ini ndinokurudzira kuti iwe ukope iyi repository iwe pachako izvozvi, sezvo kune zvakawanda zvinonakidza kuedza nazvo pamberi pedu.

Kumhanyisa microservices-yakavakirwa application pamushini wako wemuno

Kuti application ishande, isu tinofanirwa kutanga ese matatu mamicroservices. Ngatitangei neakacheka kupfuura ese - iyo yekumberi-yekupedzisira application.

▍Gadzirisa React yekuvandudza munharaunda

Kuti umhanye React application, unofanirwa kuisa iyo Node.js chikuva uye NPM pakombuta yako. Kana uchinge waisa zvese izvi, shandisa iyo terminal kuenda kune yako purojekiti folda sa-frontend uye shandisa murairo unotevera:

npm install

Nekushandisa murairo uyu muforodha node_modules iyo inotsamira yeReact application ichatakurwa, marekodhi ayo ari mufaira package.json. Kana zvinotsamira zvatorwa muforodha imwechete, mhanyisa unotevera kuraira:

npm start

Ndizvo zvose. Ikozvino iyo React application iri kushanda, unogona kuiwana nekuenda kune inotevera kero mubrowser yako: localhost:3000. Iwe unogona kuchinja chimwe chinhu mukodhi yayo. Iwe uchaona pakarepo maitiro ekuchinja uku mubrowser. Izvi zvinogoneka nekuda kweiyo inonzi "inopisa" kutsiva ma module. Izvi zvinoita kuti kumberi-kumagumo kuve chiitiko chakareruka uye chinonakidza.

▍Kugadzirira React application yekugadzira

Nechinangwa chekushandisa chaizvo React application, isu tinofanirwa kuishandura kuita seti yemafaira uye tovashandira kune vatengi vachishandisa webhu server.

Kuvaka iyo React application, zvakare uchishandisa iyo terminal, famba uchienda kune folda sa-frontend uye shandisa murairo unotevera:

npm run build

Izvi zvinogadzira dhairekitori mufolda yeprojekiti build. Ichange iine ese static mafaera anodiwa kuti React application ishande.

▍ Kushandira static mafaera uchishandisa Nginx

Kutanga iwe unofanirwa kuisa uye kumhanya iyo Nginx web server. zviri unogona kudhawunirodha uye kuwana mirairo pamusoro pekuisa nekuimhanyisa. Ipapo iwe unofanirwa kukopa zviri mukati mefolda sa-frontend/build kufolder [your_nginx_installation_dir]/html.

Neiyi nzira, iyo faira inogadzirwa panguva yekuvaka maitiro eReact application index.html ichawanikwa pa [your_nginx_installation_dir]/html/index.html. Iri ndiro faira iro, nekukasira, iyo Nginx server inoburitsa kana uchiiwana. Sevha yakagadziridzwa kuti iteerere pachiteshi 80, asi inogona kugadzirwa nenzira yaunoda nekugadzirisa faira [your_nginx_installation_dir]/conf/nginx.conf.

Zvino vhura browser yako uye enda ku localhost:80. Iwe uchaona iyo React application peji.

Kubernetes Guide Chikamu 1: Zvishandiso, Microservices, uye Containers
React application inoshandirwa neNginx server

Kana iwe zvino pinda chimwe chinhu mumunda Type your sentence wobva wadzvanya bhatani Send - hapana chichaitika. Asi, kana iwe ukatarisa iyo console, iwe unogona kuona kukanganisa mameseji ipapo. Kuti tinzwisise kuti zvikanganiso izvi zvinoitika kupi chaizvo, ngationgororei kodhi yekushandisa.

▍Kumberi-kumagumo application kodhi yekuongorora

Kutarisa iyo faira kodhi App.js, tinogona kuona kuti kudzvanya bhatani Send inodana nzira analyzeSentence(). Kodhi yeiyi nzira inopiwa pazasi. Ndokumbira utarise kuti pamutsetse wega wega une mhinduro yefomu # Номер, pane tsananguro yakapihwa pazasi kodhi. Tichaongorora zvimwe zvimedu zvekodhi nenzira imwecheteyo.

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. Iyo URL inoitirwa chikumbiro chePOST. Zvinofungidzirwa kuti pane application pane ino kero inotarisira zvikumbiro zvakadaro.

2.Boka rekukumbira rakatumirwa kuchikumbiro. Heino muenzaniso wekukumbira muviri:

{
    sentence: "I like yogobella!"
}

3.Kana mhinduro yechikumbiro ichigamuchirwa, mamiriro echikamu anovandudzwa. Izvi zvinoita kuti chikamu chidzokezve. Kana tikagamuchira data (kureva, chinhu cheJSON chine data yekupinza uye yakaverengerwa mameseji mamakisi), isu tinoburitsa chikamu. Polarity, sezvo mamiriro akakodzera achasangana. Aya ndiwo matsananguriro atinoita chikamu:

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

Kodhi inoita seinoshanda chaizvo. Chii chakashata neizvi, zvakadaro? Kana iwe uchifungidzira kuti kukero iyo chikumbiro chiri kuyedza kutumira chikumbiro chePOST, hapachisina chimwe chinogona kugamuchira uye kugadzirisa chikumbiro ichi, ipapo unenge wanyatsogona. Zvinoreva, kugadzirisa zvikumbiro zvakagamuchirwa pa http://localhost:8080/sentiment, isu tinofanirwa kumhanyisa webhu application zvinoenderana neChitubu.

Kubernetes Guide Chikamu 1: Zvishandiso, Microservices, uye Containers
Tinoda Chitubu application iyo inogona kugamuchira POST chikumbiro

▍Kumisikidza Spring based web application

Kuti utumire Chitubu application, iwe unozoda JDK8 neMaven uye yakanyatso gadziridzwa nharaunda dzakasiyana. Kana wangoisa zvese izvi, unogona kuenderera mberi nekushanda pane yedu purojekiti.

▍Kurongedza application muhari faira

Famba, uchishandisa terminal, kune iyo folda sa-webapp uye isa murairo unotevera:

mvn install

Mushure mekuita murairo uyu mufolda sa-webapp dhairekitori richagadzirwa target. Apa ndipo pachava neJava application, yakarongedzwa muhari faira, inomiririrwa nefaira sentiment-analysis-web-0.0.1-SNAPSHOT.jar.

▍Kumhanyisa Java application

Enda kufolda target uye mhanyisa application nemurairo unotevera:

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

Pane kukanganisa kuchaitika paunenge uchiita murairo uyu. Kuti titange kuigadzirisa, isu tinokwanisa kuongorora iyo yakasarudzika ruzivo mune stack trace data:

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

Kwatiri, chinhu chinonyanya kukosha pano kutaurwa kwekusakwanisa kujekesa zvinoreva sa.logic.api.url. Ngationgororei kodhi iyo kukanganisa kunoitika.

▍Java application kodhi yekuongorora

Heino kodhi snippet uko kukanganisa kunoitika.

@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. Mune SentimentController kune munda saLogicApiUrl. Kukosha kwayo kunotsanangurwa nepfuma sa.logic.api.url.
  2. Mutsara saLogicApiUrl inopindirana neukoshi /analyse/sentiment. Pamwe chete vanogadzira kero yekufona kune iyo microservice inoongorora zvinyorwa.

▍Seta kukosha kwenzvimbo

MuChirimo, iyo yakajairwa sosi yemitengo yezvivakwa ifaira application.properties, iyo inogona kuwanikwa pa sa-webapp/src/main/resources. Asi kushandiswa kwayo haisi iyo chete nzira yekuisa pfuma yemitengo. Izvi zvinogona zvakare kuitwa uchishandisa murairo unotevera:

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

Kukosha kwechinhu ichi kunofanirwa kunongedza kukero yePython application yedu.

Nekuzvigadzirisa, tinoudza iyo Spring web application kwainoda kuenda kunoitisa zvinyorwa zvekuongorora zvikumbiro.

Kuti tisaomese hupenyu hwedu, isu tichasarudza kuti iyo Python application ichave iripo localhost:5000 uye ngatiedze kusakanganwa nezvazvo. Nekuda kweizvozvo, iwo murairo wekuvhura iyo Spring application ichaita seizvi:

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

Kubernetes Guide Chikamu 1: Zvishandiso, Microservices, uye Containers
Sisitimu yedu irikushaikwa nePython application

Iye zvino zvese zvatinofanira kuita kumhanyisa Python application uye sisitimu ichashanda sezvaitarisirwa.

▍Kumisikidza a Python application

Kuti umhanye application yePython, unofanirwa kuve uine Python 3 uye Pip yakaiswa, uye iyo yakakodzera nharaunda inosiyana inofanira kuiswa nemazvo.

▍Kuisa zvinoenderana

Enda kune yako purojekiti folda sa-logic/sa uye shandisa mirairo inotevera:

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

▍Tangisa application

Mushure mekuisa zvinotsamira, isu takagadzirira kumhanyisa application:

python sentiment_analysis.py

Mushure mekuita murairo uyu tichaudzwa zvinotevera:

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

Izvi zvinoreva kuti application iri kushanda uye yakamirira zvikumbiro pa localhost:5000/

▍Code Research

Ngatitarisei iyo Python application kodhi kuti tinzwisise kuti inopindura sei kune zvikumbiro:

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. Kutanga chinhu Flask.
  2. Kutsanangura kero yekuita zvikumbiro zvePOST kwairi.
  3. Kutora Nzvimbo sentence kubva kuboka rekukumbira.
  4. Kutanga Chinhu Chisingazivikanwe TextBlob uye kuwana kukosha polarity nokuda kwemutsara wekutanga wakagamuchirwa mumuviri wechikumbiro (munyaya yedu, iyi ndiyo chete mutsara unotumirwa kuongororwa).
  5. Kudzosa mhinduro iyo muviri wayo une chinyorwa chemutsara uye chiratidzo chakaverengerwa chayo polarity.
  6. Tangisa Flask application, ichave iripo pa 0.0.0.0:5000 (iwe unogona zvakare kuiwana uchishandisa chivakwa chefomu localhost:5000).

Iwo mamicroservices anoumba application ave kushanda. Vanorongedzerwa kuti vadyidzane. Izvi ndizvo zvinoita dhizaini rekushandisa panguva ino yebasa.

Kubernetes Guide Chikamu 1: Zvishandiso, Microservices, uye Containers
Ese mamicroservices anoumba application anounzwa mukurongeka kwekushanda

Zvino, usati waenderera mberi, vhura yako React application mubrowser uye edza kupfuudza mumwe mutsara nayo. Kana zvinhu zvose zvikaitwa nemazvo - mushure mekudzvanya bhatani Send iwe uchaona mhinduro dzekuongorora pazasi pechinyorwa ndima.

Muchikamu chinotevera, isu tichataura nezve maitiro ekumhanyisa mamicroservices edu muDocker midziyo. Izvi zvinodikanwa kuti ugadzirire application yekumhanya pane Kubernetes cluster.

Docker midziyo

Kubernetes ihurongwa hwekugadzirisa otomatiki kutumira, kuyera uye manejimendi ezvishandiso zvakaiswa mumidziyo. Inonziwo "container orchestrator". Kana Kubernetes ichishanda nemidziyo, saka tisati tashandisa iyi system, tinofanira kutanga tawana midziyo iyi. Asi kutanga, ngatitaure pamusoro pezvipi zvigubhu. Zvichida mhinduro yakanaka kumubvunzo wekuti chii inogona kuwanikwa mukati zvinyorwa kuDocker:

Mufananidzo wemudziyo uremu, unozvimiririra, unoshanda pasuru ine application, inosanganisira zvese zvinodiwa kuti uishandise: kodhi yekushandisa, nharaunda yekuuraya, maturusi ehurongwa uye maraibhurari, marongero. Zvirongwa zvemuContainerized zvinogona kushandiswa muLinux neWindows nharaunda, uye ivo vanozogara vachishanda zvakafanana zvisinei nezvivakwa.

Izvi zvinoreva kuti midziyo inogona kumhanyisa pane chero komputa, kusanganisira maseva ekugadzira, uye maapplication arimo achashanda zvakafanana mune chero nharaunda.

Kuongorora maficha emidziyo uye nekuaenzanisa nedzimwe nzira dzekumhanyisa maapplication, ngatitarisei muenzaniso wekushandira React application uchishandisa chaiwo muchina uye mudziyo.

▍Kushandira static mafaera eReact application uchishandisa muchina chaiwo

Kuedza kurongedza sevhisi yemafaira akamira uchishandisa chaiwo mashini, isu tichasangana neanotevera kukanganisa:

  1. Kusashandisa zviwanikwa kwezviwanikwa, sezvo yega yega muchina izere-yakazara inoshanda sisitimu.
  2. Platform dependency. Izvo zvinoshanda pakombuta yemunharaunda zvinogona kusashanda pane sevha yekugadzira.
  3. Kunonoka uye zviwanikwa-zvakasimba kuyera kweiyo chaiyo muchina-yakavakirwa mhinduro.

Kubernetes Guide Chikamu 1: Zvishandiso, Microservices, uye Containers
Nginx web server inoshumira static mafaira ari kushanda pamushini chaiwo

Kana midziyo yakashandiswa kugadzirisa dambudziko rakafanana, saka, mukuenzanisa nemashini chaiwo, masimba anotevera anogona kucherechedzwa:

  1. Kushandisa zvakanaka zviwanikwa: kushanda neiyo inoshanda sisitimu uchishandisa Docker.
  2. Platform yakazvimirira. Chigaba chinogona kushandiswa nemugadziri pakombiyuta yake chinoshanda chero kupi zvako.
  3. Kuendesa kureruka kuburikidza nekushandiswa kwemifananidzo layer.

Kubernetes Guide Chikamu 1: Zvishandiso, Microservices, uye Containers
Nginx web server inoshandira static mafaera anomhanya mumudziyo

Isu takangofananidza chaiwo michina uye midziyo pamapoinzi mashoma, asi kunyangwe izvi zvakakwana kuti uwane kunzwa kwekusimba kwemidziyo. zviri Unogona kuwana ruzivo nezve Docker midziyo.

▍Kuvaka mufananidzo wemudziyo weReact application

Iyo yekutanga chivakwa chemudziyo weDocker ndiro faira Dockerfile. Pakutanga kweiyi faira, rekodhi inogadzirwa yeiyo base mufananidzo wemudziyo, ipapo pane kutevedzana kwemirairo inoratidza maitiro ekugadzira mudziyo unozosangana nezvinodiwa zveimwe application.

Tisati tatanga kushanda nefaira Dockerfile, ngatirangarirei zvatakaita kugadzirira React application mafaira ekurodha kune Nginx server:

  1. Kuvaka React application package (npm run build).
  2. Kutanga iyo Nginx server.
  3. Kukopa zvinyorwa zvedhairekitori build kubva kufolda yeprojekiti sa-frontend kune server folda nginx/html.

Pazasi iwe unogona kuona kufanana pakati pekugadzira mudziyo uye matanho ari pamusoro akaitwa pakombuta yako.

▍Kugadzirira iyo Dockerfile yeSA-Frontend application

Mirayiridzo ichange irimo Dockerfile zvekushandisa SA-Frontend, inoumbwa nezvikwata zviviri chete. Icho chokwadi ndechekuti timu yekuvandudza Nginx yakagadzirira yakakosha mufananidzo yeNginx, yatichashandisa kugadzira mufananidzo wedu. Aya ndiwo matanho maviri atinofanira kutsanangura:

  1. Nheyo yemufananidzo inofanira kuva iyo Nginx mufananidzo.
  2. Folder Zviri mukati sa-frontend/build inoda kukopwa kune mufananidzo folda nginx/html.

Kana iwe ukaenda kubva kurondedzero iyi kuenda kufaira Dockerfile, zvino zvicharatidzika seizvi:

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

Sezvauri kuona, zvese pano zviri nyore kwazvo, uye zviri mukati mefaira zvinotoita kuti zvive nyore kuverenga uye zvinonzwisisika. Iyi faira inoudza sisitimu kuti itore mufananidzo nginx nezvese zvatovamo, uye tevedzera zviri mukati medhairekitori build kudhairekitori nginx/html.

Pano iwe unogona kunge uine mubvunzo maererano nekuziva kwandinoziva kwaunoda kukopa mafaera kubva kufolda build, kureva kwakabva nzira /usr/share/nginx/html. Muchokwadi, hapana chakaoma apa kana. Icho chokwadi ndechekuti ruzivo rwakakodzera runogona kuwanikwa mukati tsananguro mufananidzo.

▍Kuvaka mufananidzo uye kuuisa kunzvimbo inochengeterwa

Tisati tashanda nemufananidzo wapedzwa, tinoda kuusundidzira kunzvimbo inochengeterwa mifananidzo. Kuti tiite izvi, isu tichashandisa yemahara yegore mufananidzo wekubata chikuva Docker Hub. Panguva ino yebasa iwe unofanirwa kuita zvinotevera:

  1. Isa Docker.
  2. Nyoresa paDocker Hub webhusaiti.
  3. Pinda muakaunti yako nekumhanyisa unotevera kuraira mune terminal:
    docker login -u="$DOCKER_USERNAME" -p="$DOCKER_PASSWORD"

Iye zvino iwe unofanirwa kushandisa iyo terminal kuenda kune dhairekitori sa-frontend uye mhanya unotevera kuraira ipapo:

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

Pano uye mberi mumirairo yakafanana $DOCKER_USER_ID inofanirwa kutsiviwa neyako Docker Hub username. Semuenzaniso, chikamu ichi chemurairo chinogona kutaridzika seizvi: rinormaloku/sentiment-analysis-frontend.

Muchiitiko ichi, murairo uyu unogona kupfupiswa nekubvisa kubva pauri -f Dockerfile, sezvo faira iyi yatovepo mufolda yatiri kuita uyu murairo.

Kuti titumire mufananidzo wapera kune repository, tinoda murairo unotevera:

docker push $DOCKER_USER_ID/sentiment-analysis-frontend

Mushure mekupedza, tarisa rondedzero yezvinyorwa zvako paDocker Hub kuitira kuti unzwisise kana kurodha kwechifananidzo kuchengetedzo yegore kwakabudirira.

▍Kumhanyisa mudziyo

Iye zvino chero munhu anogona kudhawunirodha nekumhanyisa mufananidzo, unozivikanwa se $DOCKER_USER_ID/sentiment-analysis-frontend. Kuti uite izvi, unofanirwa kumhanyisa inotevera kutevedzana kwemirairo:

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

Iye zvino mudziyo uri kushanda, tinogona kuramba tichishanda nekugadzira mimwe mifananidzo yatinoda. Asi tisati taenderera mberi, ngatinzwisise magadzirirwo acho 80:80, iyo inoonekwa mukuraira kwechifananidzo uye inogona kuita seyakavhiringidza.

  • First number 80 - iyi ndiyo nhamba yechiteshi chekugamuchira (kureva, komputa yemuno).
  • Nhamba yechipiri 80 ndiyo chiteshi chemudziyo icho chikumbiro chinofanira kutumirwa.

Funga nezvomuenzaniso unotevera.

Kubernetes Guide Chikamu 1: Zvishandiso, Microservices, uye Containers
Port Forwarding

Iyo sisitimu inotungamira zvikumbiro kubva pachiteshi <hostPort> kuchiteshi <containerPort>. Kureva, kupinda pachiteshi 80 komputa inotungamirwa kuchiteshi 80 mudziyo.

Kubva pachiteshi 80 yakavhurwa pakombuta yemuno, wobva wagona kuwana application kubva komputa iyi localhost:80. Kana yako system isingatsigire Docker, application yacho inogona kumhanyiswa paDocker virtual muchina, iyo kero ichaita senge. <docker-machine ip>:80. Kuti uwane iyo IP kero yeDocker chaiyo muchina, unogona kushandisa iwo murairo docker-machine ip.

Panguva ino, mushure mekubudirira kuvhura yekumberi-yekupedzisira application mudziyo, iwe unofanirwa kukwanisa kuvhura peji rayo mubrowser.

▍The .dockerignore file

Kuunganidza mufananidzo wekushandisa SA-Frontend, tinogona kuona kuti maitiro aya anozononoka. Izvi zvinoitika nekuti mufananidzo wekuvaka mamiriro unofanirwa kutumirwa kuDocker daemon. Dhairekitori inomiririra mamiriro ekuvaka inotsanangurwa seyekupedzisira nharo yemurairo docker build. Kwatiri, pane kadonhwe kumagumo emurairo uyu. Izvi zvinokonzeresa iyo inotevera dhizaini kuti ibatanidzwe mune yekuvaka mamiriro:

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

Asi pamaforodha ese aripo pano, isu tinongoda iyo folda build. Kurodha chero chinhu kutambisa nguva. Iwe unogona kukurumidzira kuvaka nekuudza Docker kuti ndeapi madhairekitori ekufuratira. Kuti tiite izvi tinoda faira .dockerignore. Iwe, kana iwe uchiziva nefaira .gitignore, magadzirirwo efaira iri angangoita seanojaira. Inonyora madhairekitori ayo iyo mufananidzo kuvaka system inogona kufuratira. Kwatiri, zviri mufaira iri zvinotaridzika seizvi:

node_modules
src
public

faira .dockerignore inofanira kunge iri mune imwechete folda nefaira Dockerfile. Iye zvino kuvaka chifananidzo kunotora nyaya yemasekondi.

Ngatishandei pamufananidzo weJava application.

▍Kuvaka mufananidzo wemudziyo wekushandisa Java

Iwe unoziva chii, iwe wakatodzidza zvese zvaunoda kuti uzive kugadzira mifananidzo yemidziyo. Ndicho chikonzero chikamu ichi chichava chipfupi zvikuru.

Vhura faira Dockerfileiyo iri mufolda yeprojekiti sa-webapp. Kana iwe ukaverenga zvinyorwa zveiyi faira, iwe uchaona maviri chete zvivakwa zvitsva mairi, kutanga neakakosha mazwi ENV и EXPOSE:

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

Keyword ENV Inokutendera kuti utaure nharaunda dzakasiyana mukati meDocker midziyo. Kunyanya, mune yedu kesi, zvinokutendera kuti utaure URL kuti uwane iyo API yechishandiso chinoongorora zvinyorwa.

Keyword EXPOSE inokutendera kuti uudze Docker kuti ivhure chiteshi. Isu tichashandisa chiteshi ichi tichimhanyisa application. Pano unogona kuona kuti in Dockerfile zvekushandisa SA-Frontend hakuna murairo wakadaro. Izvi ndezvezvinangwa zvekunyora chete, nemamwe mazwi, kuvaka uku kunoitirwa uyo anoverenga Dockerfile.

Kuvaka chifananidzo uye kuchisundira kune repository chinotaridzika chaizvo senge mumuenzaniso wapfuura. Kana iwe usati wanyatsovimba nekugona kwako, mirairo inoenderana inogona kuwanikwa mufaira README.md mufaira sa-webapp.

▍Kuvaka mufananidzo wemudziyo wePython application

Kana iwe ukatarisa zviri mukati mefaira Dockerfile mufaira sa-logic, ipapo hauzowani chinhu chitsva chako ipapo. Iyo mirairo yekuvaka mufananidzo uye kutumira kune repository inofanirawo kunge yatove yakajairika kwauri, asi, semamwe maapplication edu, anogona kuwanikwa mufaira. README.md mufaira sa-logic.

▍Kuyedza zvikumbiro zvakaiswa mumidziyo

Unogona kuvimba nechimwe chinhu chausina kuyedza here? Ini handikwanisewo. Ngatiyedze midziyo yedu.

  1. Ngatitangei mudziyo wekushandisa sa-logic uye gadzirisa kuti iteerere pachiteshi 5050:
    docker run -d -p 5050:5000 $DOCKER_USER_ID/sentiment-analysis-logic
  2. Ngatitangei mudziyo wekushandisa sa-webapp uye gadzirisa kuti iteerere pachiteshi 8080. Uye zvakare, isu tinofanirwa kugadzirisa chiteshi icho iyo Python application inoteerera kune zvikumbiro kubva kuJava application nekupazve nharaunda shanduko. 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

Kuti udzidze maitiro ekutsvaga iyo IP kero yeDocker mudziyo kana chaiwo muchina, tarisa kune iyo faira README.

Ngatitangei mudziyo wekushandisa sa-frontend:

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

Iye zvino zvese zvagadzirira kuenda kukero mubrowser localhost:80 uye edza kushandisa.

Ndapota cherechedza kuti kana iwe wakashandura chiteshi che sa-webapp, kana kana iwe uchimhanyisa Docker virtual muchina, unozofanirwa kugadzirisa iyo faira App.js kubva pafolda sa-frontendnekushandura IP kero kana nhamba yechiteshi munzira analyzeSentence(), kutsiva ruzivo rwazvino pane data rekare. Mushure meizvi, iwe unofanirwa kuunganidza zvakare mufananidzo uye kuishandisa.

Izvi ndizvo zvinoita dhiyagiramu yedu yekushandisa zvino.

Kubernetes Guide Chikamu 1: Zvishandiso, Microservices, uye Containers
Microservices inomhanya mumidziyo

Pfupiso: nei tichida Kubernetes cluster?

Tichangobva kuongorora mafaira Dockerfile, yakataura nezve magadzirirwo emifananidzo uye nekuisundira kuDocker repository. Mukuwedzera, takadzidza nzira yekukurumidzira kusangana kwemufananidzo uchishandisa faira .dockerignore. Nekuda kweizvozvo, mamicroservices edu zvino anomhanya mumidziyo yeDocker. Pano iwe unogona kunge uine mubvunzo wakakwana wekuti nei tichida Kubernetes. Chikamu chechipiri chenyaya ino chichapihwa kupindura mubvunzo uyu. Panguva ino, funga nezvemubvunzo unotevera:
Ngatifungei kuti webhusaiti yedu yekuongorora zvinyorwa yave nemukurumbira pasi rose. Mamiriyoni ezvikumbiro anouya kwaari miniti iri yose. Izvi zvinoreva kuti microservices sa-webapp и sa-logic vacharemerwa nemutoro mukuru. Nzira yekuyera sei midziyo inomhanya microservices?

Kubernetes Guide Chikamu 1: Zvishandiso, Microservices, uye Containers

Source: www.habr.com

Voeg