Tutorial sa Kubernetes Bahin 1: Mga Aplikasyon, Microservices, ug mga Container

Sa among hangyo, naghimo si Habr og hub Kubernetes ug kami nalipay nga ibutang ang unang publikasyon niini. Subscribe!

Ang Kubernetes sayon. Ngano nga ang mga bangko nagbayad kanako og daghang salapi aron magtrabaho niining dapita, samtang bisan kinsa nga makamao niini nga teknolohiya sa pipila lang ka oras?

Tutorial sa Kubernetes Bahin 1: Mga Aplikasyon, Microservices, ug mga Container

Kung nagduhaduha ka nga ang Kubernetes dali nga mahibal-an, gisugyot ko nga sulayan nimo kini sa imong kaugalingon. Nga mao, sa pagkahanas niini nga materyal, makahimo ka sa pagpadagan sa usa ka aplikasyon base sa mga microservice sa usa ka Kubernetes cluster. Makagarantiya ko niini, tungod kay sa parehas nga pamaagi nga akong gigamit dinhi nga gitudloan nako ang among mga kliyente kung giunsa ang pagtrabaho kauban ang Kubernetes. Unsay nakapalahi niini nga giya sa uban? Sa tinuud, daghang mga butang. Busa, kadaghanan niini nga mga materyal nagsugod sa pagpatin-aw sa yano nga mga butang - ang mga konsepto sa Kubernetes ug ang mga bahin sa kubectl command. Ang mga tagsulat niini nga mga artikulo nagtuo nga ang ilang magbabasa pamilyar sa pagpalambo sa aplikasyon, microservices, ug mga sudlanan sa Docker. Kita moadto sa laing dalan. Una, hisgotan nato kung unsaon pagpadagan ang usa ka aplikasyon base sa mga microservice sa kompyuter. Dayon atong tan-awon ang paghimo og mga hulagway sa sudlanan alang sa matag microservice. Ug pagkahuman niana, makaila kami sa Kubernetes ug analisahon ang pag-deploy sa usa ka aplikasyon nga gibase sa mga microservice sa usa ka cluster nga gidumala sa Kubernetes.

Kini nga pamaagi, uban ang anam-anam nga pamaagi sa Kubernetes, maghatag sa giladmon sa pagsabot sa mga nanghitabo nga gikinahanglan sa kasagaran nga tawo aron masabtan kung unsa ka yano ang tanan nga gihan-ay sa Kubernetes. Ang Kubernetes siguradong usa ka yano nga teknolohiya, basta kung kinsa ang gusto nga mag-master niini nahibal-an kung diin ug giunsa kini gigamit.

Karon, sa wala’y dugang nga pagduha-duha, magsugod kita sa pagtrabaho ug hisgutan ang bahin sa aplikasyon nga among pagtrabaho.

Eksperimental nga app

Ang among aplikasyon maghimo lamang sa usa ka function. Nagkinahanglan kini, isip input, usa ka tudling-pulong, pagkahuman, gamit ang mga himan sa pag-analisar sa teksto, naghimo kini usa ka pagtuki sa sentimento sa kini nga tudling, pagkuha usa ka pagsusi sa emosyonal nga kinaiya sa tagsulat sa tudling sa usa ka butang.

Kini ang hitsura sa panguna nga bintana sa kini nga aplikasyon.

Tutorial sa Kubernetes Bahin 1: Mga Aplikasyon, Microservices, ug mga Container
Aplikasyon sa Web sa Pag-analisar sa Sentimento

Gikan sa usa ka teknikal nga punto sa pagtan-aw, ang aplikasyon naglangkob sa tulo ka mga microservice, nga ang matag usa nagsulbad sa usa ka piho nga hugpong sa mga buluhaton:

  • Ang SA-Frontend usa ka Nginx web server nga nagsilbi sa React static nga mga file.
  • Ang SA-WebApp usa ka web application nga gisulat sa Java nga nagdumala sa mga hangyo gikan sa frontend.
  • Ang SA-Logic usa ka aplikasyon sa Python nga nagpahigayon sa pagtuki sa sentimento sa teksto.

Mahinungdanon nga timan-an nga ang mga microservice wala mag-inusara. Gipatuman nila ang ideya sa "pagbulag sa mga katungdanan", apan sila, sa samang higayon, kinahanglan nga makig-uban sa usag usa.

Tutorial sa Kubernetes Bahin 1: Mga Aplikasyon, Microservices, ug mga Container
Ang datos nag-agay sa aplikasyon

Sa dayagram sa ibabaw, imong makita ang gi-numero nga mga yugto sa sistema, nga naghulagway sa mga pagdagayday sa datos sa aplikasyon. Atong bungkagon sila:

  1. Ang browser nangayo og file gikan sa server index.html (nga sa baylo nagkarga sa React app package).
  2. Ang tiggamit nakig-uban sa aplikasyon, kini hinungdan sa usa ka tawag sa usa ka web application nga gibase sa Spring.
  3. Gipasa sa web application ang hangyo nga i-parse ang teksto sa aplikasyon sa Python.
  4. Gi-analisar sa aplikasyon sa Python ang sentimento sa teksto ug gibalik ang resulta isip tubag sa hangyo.
  5. Ang Spring application nagpadala ug tubag sa React application (nga, sa baylo, nagpakita sa resulta sa parsed text ngadto sa user).

Ang code alang sa tanan niini nga mga aplikasyon makita dinhi. Girekomenda ko nga kopyahon nimo kini nga repository sa imong kaugalingon karon, tungod kay adunay daghang makapaikag nga mga eksperimento nga nag-una kanamo.

Pagpadagan sa usa ka aplikasyon nga gibase sa mga microservice sa lokal nga makina

Aron molihok ang aplikasyon, kinahanglan naton sugdan ang tanan nga tulo nga mga microservice. Magsugod ta sa pinakagwapa sa ila - ang front-end nga aplikasyon.

▍Pag-set up sa React para sa lokal nga kalamboan

Aron makadagan ug React application, kinahanglan nimo nga i-install ang Node.js framework ug NPM sa imong computer. Human nimo ma-install kining tanan, gamita ang terminal sa folder sa proyekto sa-frontend ug pagdagan ang mosunod nga sugo:

npm install

Pinaagi sa pagpatuman niini nga sugo sa folder node_modules ang mga dependency sa React nga aplikasyon ikarga, ang mga rekord niini anaa sa file package.json. Human ma-download ang mga dependency sa samang folder, padagana ang mosunod nga sugo:

npm start

Mao ra. Ang React app nagdagan na ug mahimong ma-access pinaagi sa pag-navigate sa adres sa browser localhost:3000. Mahimo nimong usbon ang usa ka butang sa iyang code. Makita dayon nimo ang epekto sa kini nga mga pagbag-o sa browser. Posible kini salamat sa gitawag nga "init" nga pag-ilis sa mga module. Salamat niini, ang pag-uswag sa unahan nahimo nga usa ka yano ug makalingaw nga kasinatian.

▍Pag-andam ug React app para sa produksiyon

Alang sa katuyoan sa aktuwal nga paggamit sa usa ka React app, kinahanglan namon nga i-convert kini sa usa ka set sa mga static nga file ug i-serve kini sa mga kliyente gamit ang usa ka web server.

Aron matukod ang React app, gamit ang terminal, pag-navigate sa folder sa-frontend ug pagdagan ang mosunod nga sugo:

npm run build

Maghimo kini usa ka direktoryo sa folder sa proyekto build. Kini naglangkob sa tanan nga mga static nga mga file nga gikinahanglan alang sa React nga aplikasyon nga molihok.

▍ Pag-alagad sa mga static nga file gamit ang Nginx

Una kinahanglan nimo nga i-install ug ipadagan ang Nginx web server. kini mao ang mahimo nimo kini i-download ug pangitaa ang mga panudlo alang sa pag-install ug pagpadagan niini. Unya kinahanglan nimo nga kopyahon ang sulud sa folder sa-frontend/build sa folder [your_nginx_installation_dir]/html.

Uban niini nga pamaagi, ang file nga namugna sa panahon sa asembliya sa React nga aplikasyon index.html magamit sa [your_nginx_installation_dir]/html/index.html. Kini ang file nga, sa default, ang mga isyu sa Nginx server kung gi-access kini. Ang server gi-configure aron maminaw sa usa ka pantalan 80, apan mahimo nimo kini ipasibo sa paagi nga imong gusto pinaagi sa pag-edit sa file [your_nginx_installation_dir]/conf/nginx.conf.

Karon ablihi ang imong browser ug adto sa localhost:80. Imong makita ang React app page.

Tutorial sa Kubernetes Bahin 1: Mga Aplikasyon, Microservices, ug mga Container
React app nga gisilbi sa Nginx server

Kung ikaw karon mosulod sa usa ka butang sa uma Type your sentence ug pindota ang buton Send - walay mahitabo. Apan, kung imong tan-awon ang console, makita nimo ang mga mensahe sa sayup didto. Aron masabtan kung diin mahitabo kini nga mga sayup, atong analisahon ang code sa aplikasyon.

▍Pagtuki sa code sa front-end nga aplikasyon

Pagtan-aw sa code sa file App.js, atong makita nga ang pag-klik sa buton Send nagtawag ug pamaagi analyzeSentence(). Ang code alang niini nga pamaagi gipakita sa ubos. Sa samang higayon, pagtagad sa kamatuoran nga alang sa matag linya diin adunay usa ka komento sa porma # Номер, adunay katin-awan nga gihatag sa ubos sa code. Sa samang paagi, atong i-parse ang ubang mga tipik sa code.

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. Ang URL diin gihimo ang hangyo sa POST. Kini nga adres gituohan nga usa ka aplikasyon nga naghulat alang sa ingon nga mga hangyo.

2.Ang lawas sa hangyo gipadala sa aplikasyon. Ania ang usa ka pananglitan sa hangyo nga lawas:

{
    sentence: "I like yogobella!"
}

3.Kung ang tubag sa usa ka hangyo nadawat, ang kahimtang sa sangkap gi-update. Kini ang hinungdan nga ang component mag-re-render. Kung makadawat kami mga datos (nga mao, usa ka butang nga JSON nga adunay sulud nga gisulod nga datos ug ang kalkulado nga marka sa teksto), among ipagawas ang sangkap Polaritybasta matuman ang mga kondisyon. Ania kung giunsa namon paghulagway ang sangkap:

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

Ang code ingon og maayo kaayo. Unsa man ang sayup dinhi? Kung imong hunahunaon nga sa adres nga gisulayan sa aplikasyon nga magpadala usa ka hangyo sa POST, wala pa'y bisan unsa nga makadawat ug makaproseso niini nga hangyo, nan hingpit ka nga husto. Sa ato pa, aron maproseso ang mga hangyo nga moabut sa adres http://localhost:8080/sentiment, kinahanglan namong magpadagan ug web application base sa Spring.

Tutorial sa Kubernetes Bahin 1: Mga Aplikasyon, Microservices, ug mga Container
Nagkinahanglan kami og Spring application nga makadawat og POST request

▍Pag-set up ug web application base sa Spring

Aron ma-deploy ang aplikasyon sa Spring, kinahanglan nimo ang JDK8 ug Maven ug husto nga gi-configure ang mga variable sa palibot. Human nimo ma-install kining tanan, makapadayon ka sa pagtrabaho sa among proyekto.

▍Pagputos sa aplikasyon sa usa ka jar file

Pag-navigate, gamit ang terminal, ngadto sa folder sa-webapp ug isulod ang mosunod nga sugo:

mvn install

Human sa pagpatuman niini nga sugo sa folder sa-webapp ang direktoryo pagabuhaton target. Dinhi mahimutang ang aplikasyon sa Java, nga giputos sa usa ka jar file, nga girepresentahan sa file sentiment-analysis-web-0.0.1-SNAPSHOT.jar.

▍Paglunsad og Java Application

Adto sa folder target ug pagdagan ang aplikasyon gamit ang mosunud nga mando:

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

Adunay usa ka sayup nga mahitabo samtang gipatuman kini nga mando. Aron masugdan ang pag-ayo niini, mahimo natong ma-parse ang mga detalye sa eksepsiyon sa 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}"

Alang kanamo, ang labing importante nga butang dinhi mao ang paghisgot sa imposible sa pagpatin-aw sa kahulogan sa.logic.api.url. Atong analisahon ang code diin nahitabo ang sayup.

▍Pagsusi sa code sa aplikasyon sa Java

Ania ang code snippet kung diin nahitabo ang sayup.

@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. Sa SentimentController naay uma saLogicApiUrl. Ang bili niini gitakda sa kabtangan sa.logic.api.url.
  2. Linya saLogicApiUrl nagdugtong sa bili /analyse/sentiment. Mag-uban sila paghimo usa ka adres alang sa pagtawag sa microservice nga naghimo sa pag-analisar sa teksto.

▍Pagbutang ug bili sa kabtangan

Sa Spring, ang default nga gigikanan sa mga kantidad sa kabtangan usa ka file application.properties, nga makita sa sa-webapp/src/main/resources. Apan ang paggamit niini dili lamang ang paagi sa pagtakda sa mga kantidad sa kabtangan. Mahimo usab nimo kini gamit ang mosunod nga sugo:

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

Ang bili sa kini nga kabtangan kinahanglan nga magpunting sa adres sa among aplikasyon sa Python.

Pinaagi sa pag-configure niini, gisultihan namon ang Spring web application kung diin kinahanglan nga moadto aron ipatuman ang mga hangyo sa pag-parse sa teksto.

Aron dili makomplikado ang among kinabuhi, kami magdesisyon nga ang aplikasyon sa Python magamit sa localhost:5000 ug paningkamuti nga dili makalimtan kini. Ingon usa ka sangputanan, ang mando sa pagsugod sa aplikasyon sa Spring mahimong ingon niini:

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

Tutorial sa Kubernetes Bahin 1: Mga Aplikasyon, Microservices, ug mga Container
Ang among sistema kulang sa aplikasyon sa Python

Karon kinahanglan na lang namon nga modagan ang aplikasyon sa Python ug ang sistema molihok sama sa gipaabut.

▍Pag-set up ug Python application

Aron makadagan ang usa ka aplikasyon sa Python, kinahanglan nimo nga na-install ang Python 3 ug Pip, ug kinahanglan nimo nga adunay tukma nga mga variable sa palibot nga gitakda sa husto.

▍ I-install ang mga dependency

Lakaw ngadto sa folder sa proyekto sa-logic/sa ug ipadagan ang mosunod nga mga sugo:

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

▍Paglusad sa app

Uban sa mga dependency nga na-install, andam kami sa pagdagan sa aplikasyon:

python sentiment_analysis.py

Human sa pagpatuman niini nga sugo, kita sultihan sa mosunod:

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

Kini nagpasabot nga ang aplikasyon nagdagan ug naghulat alang sa mga hangyo sa localhost:5000/

▍Pagpanukiduki sa code

Atong tan-awon ang Python application code aron masabtan kung giunsa kini pagtubag sa mga hangyo:

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. Pag-initialize sa butang Flask.
  2. Pagtino sa adres alang sa paghimo sa mga hangyo sa POST niini.
  3. Pagbawi sa usa ka kabtangan sentence gikan sa request body.
  4. Anonymous nga butang initialization TextBlob ug pagkuha sa bili polarity alang sa unang proposal nga nadawat sa lawas sa hangyo (sa among kaso, kini mao lamang ang proposal nga gisumite alang sa pagtuki).
  5. Pagbalik sa usa ka tubag, ang lawas nga adunay sulud nga teksto sa tanyag ug ang timailhan nga gikalkula alang niini polarity.
  6. Paglansad sa Flask nga aplikasyon, nga magamit sa 0.0.0.0:5000 (mahimo usab nimo nga ma-access kini gamit ang usa ka pagtukod sa porma localhost:5000).

Karon ang mga microservice nga naglangkob sa aplikasyon nagdagan. Gitakda sila nga makig-uban sa usag usa. Ania kung unsa ang hitsura sa diagram sa aplikasyon sa kini nga yugto sa trabaho.

Tutorial sa Kubernetes Bahin 1: Mga Aplikasyon, Microservices, ug mga Container
Ang tanan nga mga microservice nga naglangkob sa aplikasyon gidala sa usa ka himsog nga kahimtang

Karon, sa dili pa kita magpadayon, ablihi ang React app sa usa ka browser ug sulayi ang pag-parse sa pipila ka sentence niini. Kung ang tanan nahimo sa husto - pagkahuman sa pagpindot sa buton Send imong makita ang mga resulta sa pagtuki sa ubos sa text box.

Sa sunod nga seksyon, maghisgot kami kung giunsa ang pagpadagan sa among mga microservice sa mga sudlanan sa Docker. Kini gikinahanglan aron maandam ang aplikasyon nga modagan sa Kubernetes cluster.

Mga sudlanan sa docker

Kubernetes mao ang usa ka sistema alang sa automating sa deployment, scaling ug pagdumala sa containerized aplikasyon. Gitawag usab kini nga "container orchestrator". Kung nagtrabaho ang Kubernetes sa mga sudlanan, unya sa wala pa gamiton kini nga sistema, kinahanglan una namon nga makuha kini nga mga sudlanan. Apan una, atong hisgutan kung unsa ang mga sudlanan. Tingali ang labing kaayo nga tubag sa pangutana kung unsa kini makit-an dokumentasyon sa Docker:

Ang usa ka sulud nga imahen usa ka gaan nga timbang, adunay kaugalingon, ma-executable nga pakete nga adunay sulud nga aplikasyon, nga naglakip sa tanan nga kinahanglan aron mapadagan kini: code sa aplikasyon, palibot sa runtime, mga himan sa sistema ug mga librarya, mga setting. Ang mga programa nga gisudlan mahimong magamit sa mga palibot sa Linux ug Windows ug kanunay nga molihok nga parehas bisan unsa pa ang imprastraktura.

Nagpasabot kini nga ang mga sudlanan mahimong ipadagan sa bisan unsang kompyuter, lakip ang mga server sa produksiyon, ug sa bisan unsang palibot, ang mga aplikasyon nga naa niini molihok sa parehas nga paagi.

Aron masusi ang mga bahin sa mga sudlanan ug itandi kini sa ubang mga paagi sa pagpadagan sa mga aplikasyon, atong tan-awon ang pananglitan sa pag-alagad sa usa ka React nga aplikasyon gamit ang usa ka virtual machine ug usa ka sudlanan.

▍Pag-alagad sa mga static nga file sa usa ka React nga aplikasyon gamit ang usa ka virtual machine

Ang pagsulay sa pag-organisar sa pagmentinar sa mga static nga file gamit ang mga virtual machine, atong masugatan ang mosunod nga mga disbentaha:

  1. Dili maayo nga paggamit sa mga kapanguhaan, tungod kay ang matag virtual nga makina usa ka kompleto nga operating system.
  2. Pagsalig sa plataporma. Unsa ang nagtrabaho sa pipila ka lokal nga kompyuter mahimo’g dili molihok sa usa ka server sa produksiyon.
  3. Mahinay ug kusog nga pag-scale sa usa ka solusyon sa virtual machine.

Tutorial sa Kubernetes Bahin 1: Mga Aplikasyon, Microservices, ug mga Container
Ang Nginx web server nga nagserbisyo sa mga static nga file nga nagdagan sa usa ka virtual nga makina

Kung ang mga sudlanan gigamit aron masulbad ang parehas nga problema, nan, kung itandi sa mga virtual nga makina, ang mga mosunud nga kalig-on mahimong mamatikdan:

  1. Epektibo nga paggamit sa mga kapanguhaan: pagtrabaho kauban ang operating system gamit ang Docker.
  2. Kagawasan sa plataporma. Ang usa ka sudlanan nga mahimo’g ipadagan sa usa ka developer sa ilang kaugalingon nga kompyuter modagan bisan diin.
  3. Ang gaan nga pag-deploy pinaagi sa paggamit sa mga layer sa imahe.

Tutorial sa Kubernetes Bahin 1: Mga Aplikasyon, Microservices, ug mga Container
Ang Nginx web server nga nag-alagad sa mga static nga file nga nagdagan sa usa ka sudlanan

Gikumpara ra namo ang mga virtual nga makina ug mga sudlanan sa pipila ka mga punto, apan bisan kini igo na aron mabati ang kalig-on sa mga sudlanan. kini mao ang Makita nimo ang mga detalye bahin sa mga sudlanan sa Docker.

▍Pagtukod og imahen sa sudlanan para sa React app

Ang sukaranan nga bloke sa pagtukod sa usa ka sudlanan sa Docker mao ang file Dockerfile. Sa sinugdanan sa kini nga file, usa ka base nga imahe sa sudlanan ang natala, unya usa ka han-ay sa mga panudlo gilakip nga nagpakita kung giunsa paghimo ang usa ka sulud nga makatubag sa mga panginahanglanon sa usa ka aplikasyon.

Sa wala pa kami magsugod sa pagtrabaho sa file Dockerfile, hinumdumi kung unsa ang among gibuhat aron maandam ang mga file sa React nga aplikasyon alang sa pag-upload sa Nginx server:

  1. Paghimo ug React app package (npm run build).
  2. Pagsugod sa Nginx server.
  3. Pagkopya sa mga sulod sa usa ka direktoryo build gikan sa folder sa proyekto sa-frontend sa folder sa server nginx/html.

Sa ubos makita nimo ang mga kaparehas tali sa paghimo og sudlanan ug ang mga lakang sa ibabaw nga gihimo sa lokal nga kompyuter.

▍Pag-andam og Dockerfile alang sa SA-Frontend nga Aplikasyon

Mga instruksyon nga iapil sa Dockerfile alang sa aplikasyon SA-Frontend, gilangkuban sa duha lang ka team. Ang kamatuoran mao nga ang Nginx development team nag-andam usa ka sukaranan larawan alang sa Nginx, nga among gamiton sa paghimo sa among imahe. Ania ang duha ka mga lakang nga kinahanglan natong ihulagway:

  1. Kinahanglan nimo nga himuon ang Nginx nga imahe nga sukaranan sa imahe.
  2. Sulod sa folder sa-frontend/build kinahanglan nga kopyahon sa folder sa imahe nginx/html.

Kon kita moadto gikan niini nga paghulagway ngadto sa file Dockerfile, unya kini tan-awon sama niini:

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

Sama sa imong nakita, ang tanan dinhi yano ra, samtang ang sulud sa file bisan pa nga mahimong mabasa ug masabtan. Kini nga file nagsulti sa sistema sa pagkuha sa imahe nginx uban ang tanan nga naa na niini, ug kopyaha ang sulud sa direktoryo build ngadto sa direktoryo nginx/html.

Dinhi mahimo ka adunay pangutana bahin sa kung giunsa nako nahibal-an kung diin eksakto nga kopyahon ang mga file gikan sa folder build, i.e. diin gikan ang dalan /usr/share/nginx/html. Sa pagkatinuod, walay bisan unsa nga komplikado dinhi. Ang kamatuoran mao nga ang may kalabutan nga impormasyon makita sa paghulagway hulagway.

▍ Pag-assemble sa imahe ug pag-upload niini sa repository

Sa dili pa kami makatrabaho sa usa ka kompleto nga imahe, kinahanglan namon nga isumite kini sa repository sa imahe. Aron mahimo kini, gamiton namon ang libre nga cloud-based image hosting platform nga Docker Hub. Niini nga yugto sa trabaho, kinahanglan nimo nga buhaton ang mosunod:

  1. Pag-instalar Docker.
  2. Pagrehistro sa Docker Hub site.
  3. Log in sa imong account pinaagi sa pagpadagan sa mosunod nga command sa terminal:
    docker login -u="$DOCKER_USERNAME" -p="$DOCKER_PASSWORD"

Karon kinahanglan nimo, gamit ang terminal, adto sa direktoryo sa-frontend ug pagdagan ang mosunod nga sugo didto:

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

Dinhi ug sa ubos sa parehas nga mga mando $DOCKER_USER_ID kinahanglan ilisan sa imong username sa Docker Hub. Pananglitan, kini nga bahin sa sugo mahimong ingon niini: rinormaloku/sentiment-analysis-frontend.

Niini nga kaso, kini nga sugo mahimong mub-an pinaagi sa pagtangtang niini -f Dockerfile, tungod kay ang folder diin atong gipatuman kini nga sugo aduna na niini nga file.

Aron ipadala ang nahuman nga imahe sa repository, kinahanglan namon ang mosunud nga mando:

docker push $DOCKER_USER_ID/sentiment-analysis-frontend

Pagkahuman niini, susiha ang imong lista sa mga repositoryo sa Docker Hub aron makita kung ang imahe malampuson nga giduso sa pagtipig sa panganod.

▍Pagsugod sa usa ka sudlanan

Karon ang bisan kinsa maka-download ug makadagan sa imahe nga nailhan nga $DOCKER_USER_ID/sentiment-analysis-frontend. Aron mahimo kini, kinahanglan nimo nga ipadagan ang mosunud nga han-ay sa mga mando:

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

Karon ang sudlanan nagdagan, ug kami makapadayon sa pagtrabaho pinaagi sa paghimo sa ubang mga imahe nga among gikinahanglan. Apan sa dili pa kita magpadayon, atong masabtan ang disenyo 80:80, nga makita diha sa sugo sa pagpadagan sa larawan ug daw makalibog.

  • Unang numero 80 mao ang numero sa pantalan sa host (nga mao, ang lokal nga kompyuter).
  • Ikaduha nga numero 80 mao ang pantalan sa sudlanan diin ang hangyo kinahanglan nga i-redirect.

Tagda ang mosunod nga ilustrasyon.

Tutorial sa Kubernetes Bahin 1: Mga Aplikasyon, Microservices, ug mga Container
Pagpasa sa Port

Ang sistema nagpasa sa mga hangyo gikan sa pantalan <hostPort> ngadto sa pantalan <containerPort>. Sa ato pa, pag-access sa pantalan 80 Ang kompyuter gi-redirect sa usa ka pantalan 80 sudlanan.

Sukad sa pantalan 80 giablihan sa lokal nga kompyuter, mahimo nimong ma-access ang aplikasyon gikan niini nga kompyuter sa localhost:80. Kung ang imong sistema dili mosuporta sa Docker, mahimo nimong ipadagan ang aplikasyon sa usa ka Docker virtual machine, ang adres niini sama sa <docker-machine ip>:80. Aron mahibal-an ang IP address sa Docker virtual machine, mahimo nimong gamiton ang command docker-machine ip.

Niini nga punto, sa higayon nga malampuson nga gilunsad ang sudlanan sa atubangan-end app, kinahanglan nimo nga maablihan ang panid niini sa usa ka browser.

▍.dockerignore nga payl

Pagtukod sa imahe sa aplikasyon SA-Frontend, atong mamatikdan nga kini nga proseso hilabihan ka hinay. Kini tungod kay ang konteksto sa pagtukod sa imahe kinahanglan ipadala sa Docker daemon. Ang direktoryo nga nagrepresentar sa konteksto sa pagtukod gihatag isip katapusang argumento sa sugo docker build. Sa among kaso, adunay usa ka tulbok sa katapusan niini nga sugo. Nagresulta kini sa mosunod nga istruktura nga gilakip sa konteksto sa asembliya:

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

Apan sa tanan nga mga folder nga naa dinhi, kinahanglan ra namon ang usa ka folder build. Ang pag-download sa bisan unsa nga butang usa ka pag-usik sa oras. Mahimo nimong mapadali ang pagtukod pinaagi sa pagsulti sa Docker kung unsang mga direktoryo ang dili ibalewala. Aron mahimo kini, kinahanglan namon ang usa ka file .dockerignore. Ikaw, kung pamilyar ka sa file .gitignore, ang gambalay niini nga payl tingali pamilyar tan-awon. Naglista kini sa mga direktoryo nga dili ibalewala sa sistema sa pagtukod sa imahe. Sa among kaso, ang mga sulud sa kini nga file ingon niini:

node_modules
src
public

file .dockerignore kinahanglan nga naa sa parehas nga folder sa file Dockerfile. Karon ang asembliya sa imahe molungtad sa pipila ka segundo.

Atong atubangon karon ang hulagway alang sa aplikasyon sa Java.

▍Pagtukod og imahen sa sudlanan alang sa aplikasyon sa Java

Nahibal-an nimo kung unsa, ug nahibal-an na nimo ang tanan nga kinahanglan nimo aron makahimo mga imahe sa sulud. Mao nga kini nga seksyon mubo ra kaayo.

Ablihi ang file Dockerfile, nga nahimutang sa folder sa proyekto sa-webapp. Kung gibasa nimo ang teksto sa kini nga file, nan sa sulod niini makit-an nimo ang duha lamang ka bag-ong mga konstruksyon nga nagsugod sa mga keyword ENV и EXPOSE:

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

Keyword ENV nagtugot kanimo sa pagpahayag sa mga variable sa palibot sulod sa mga sudlanan sa Docker. Sa partikular, sa among kaso, gitugotan ka nga magbutang usa ka URL aron ma-access ang API sa aplikasyon nga nagpahigayon pag-analisar sa teksto.

Keyword EXPOSE nagtugot kanimo sa pagsulti sa Docker sa pag-abli sa usa ka pantalan. Gamiton namo kini nga pantalan samtang nagtrabaho kami sa aplikasyon. Dinhi nimo makita kana sa Dockerfile alang sa aplikasyon SA-Frontend walay ingon niana nga sugo. Kini alang sa mga katuyoan sa dokumentasyon lamang, sa laing pagkasulti, kini nga pagtukod alang sa magbabasa Dockerfile.

Ang pagtukod sa imahe ug pagduso niini sa repositoryo parehas sa miaging pananglitan. Kung dili ka pa kaayo masaligon sa imong mga abilidad, ang katugbang nga mga mando makit-an sa file README.md sa folder sa-webapp.

▍Pagtukod og imahen sa sudlanan alang sa aplikasyon sa Python

Kung imong tan-awon ang sulod sa file Dockerfile sa folder sa-logicdili ka makakitag bag-o didto. Ang mga mando alang sa pagtukod sa imahe ug pagduso niini sa repository kinahanglan nga pamilyar kanimo, apan, sama sa kaso sa among uban nga mga aplikasyon, kini makita sa file. README.md sa folder sa-logic.

▍Pagsulay sa mga containerized nga aplikasyon

Makasalig ka ba sa usa ka butang nga wala nimo masulayan? Dili sab ko mahimo. Atong sulayan ang atong mga sudlanan.

  1. Atong sugdan ang sudlanan sa aplikasyon sa-logic ug i-configure kini aron maminaw sa usa ka port 5050:
    docker run -d -p 5050:5000 $DOCKER_USER_ID/sentiment-analysis-logic
  2. Atong sugdan ang sudlanan sa aplikasyon sa-webapp ug i-configure kini aron maminaw sa usa ka port 8080. Dugang pa, kinahanglan namon nga itakda ang pantalan diin ang aplikasyon sa Python maminaw sa mga hangyo gikan sa aplikasyon sa Java pinaagi sa pag-reassign sa variable sa palibot. 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

Aron mahibal-an kung giunsa mahibal-an ang IP address sa usa ka sudlanan o Docker VM, tan-awa ang file README.

Atong sugdan ang sudlanan sa aplikasyon sa-frontend:

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

Karon ang tanan andam na sa pag-navigate sa browser sa adres localhost:80 ug sulayi ang app.

Palihug timan-i nga kung imong usbon ang pantalan alang sa sa-webapp, o kung nagdagan ka usa ka Docker VM, kinahanglan nimo nga usbon ang file App.js gikan sa folder sa-frontendpinaagi sa pagbag-o sa IP address o numero sa port sa pamaagi analyzeSentence()pinaagi sa pag-ilis sa kasamtangang impormasyon imbes sa karaan nga datos. Human niana, kinahanglan nimo nga i-reassemble ang imahe ug gamiton kini.

Kini ang hitsura sa among diagram sa aplikasyon karon.

Tutorial sa Kubernetes Bahin 1: Mga Aplikasyon, Microservices, ug mga Container
Ang mga microservice nagdagan sa mga sudlanan

Summary: nganong kinahanglan man nato ang Kubernetes cluster?

Gisusi ra namo ang mga file Dockerfile, naghisgot kon unsaon paghimo og mga hulagway ug iduso kini ngadto sa usa ka Docker repository. Dugang pa, nahibal-an namon kung giunsa pagpadali ang pagpundok sa mga imahe gamit ang file .dockerignore. Ingon usa ka sangputanan, ang among mga microservice karon nagdagan sa mga sudlanan sa Docker. Dinhi mahimo ka adunay usa ka hingpit nga makatarunganon nga pangutana kung ngano nga kinahanglan namon ang Kubernetes. Ang tubag niini nga pangutana igahin sa ikaduhang bahin niini nga materyal. Sa kasamtangan, tagda ang mosunod nga pangutana:
Ibutang nato nga ang atong text analysis web application nahimong popular sa tibuok kalibutan. Minilyon nga mga hangyo ang moabut kaniya matag minuto. Kini nagpasabot nga ang microservices sa-webapp и sa-logic mahimong ubos sa grabeng kapit-os. Giunsa ang pag-scale sa mga sudlanan nga nagpadagan sa mga microservice?

Tutorial sa Kubernetes Bahin 1: Mga Aplikasyon, Microservices, ug mga Container

Source: www.habr.com

Idugang sa usa ka comment