Kubernetes Tutorial Parti 1: Applikazzjonijiet, Mikroservizzi, u Kontenituri

Fuq talba tagħna, Habr ħoloq hub Kubernetes u bi pjaċir inpoġġu l-ewwel pubblikazzjoni fiha. Abbona!

Kubernetes huwa faċli. Għaliex il-banek iħallsuni ħafna flus biex naħdem f’dan il-qasam, filwaqt li kulħadd jista’ jaħkem din it-teknoloġija fi ftit sigħat biss?

Kubernetes Tutorial Parti 1: Applikazzjonijiet, Mikroservizzi, u Kontenituri

Jekk tiddubita li Kubernetes jista' jitgħallem daqshekk malajr, nissuġġerixxi li tipprovaha lilek innifsek. Jiġifieri, wara li tkun ħakmu dan il-materjal, tkun tista' tħaddem applikazzjoni bbażata fuq mikroservizzi fi cluster Kubernetes. Nista' niggarantixxi dan, peress li hija preċiżament l-istess metodoloġija użata hawn li ngħallem lill-klijenti tagħna jaħdmu ma' Kubernetes. X'jagħmel din il-gwida differenti minn oħrajn? Fil-fatt, hemm ħafna affarijiet. Allura, ħafna minn dawn il-materjali jibdew bi spjegazzjoni ta 'affarijiet sempliċi - il-kunċetti ta' Kubernetes u l-karatteristiċi tal-kmand kubectl. L-awturi ta 'dawn il-materjali jassumu li l-qarrejja tagħhom huma familjari mal-iżvilupp tal-applikazzjonijiet, il-mikroservizzi, u l-kontenituri Docker. Se mmorru triq oħra. L-ewwel, ser nitkellmu dwar kif tħaddem applikazzjoni bbażata fuq mikroservizzi fuq kompjuter. Imbagħad inħarsu lejn il-bini ta' immaġini tal-kontejners għal kull mikroservizz. U wara dan, inkunu familjari ma’ Kubernetes u nħarsu lejn l-iskjerament ta’ applikazzjoni bbażata fuq mikroservizzi f’cluster immexxi minn Kubernetes.

Dan l-approċċ, b'approċċ gradwali għal Kubernetes, se jagħti l-profondità ta 'fehim ta' dak li qed jiġri li huwa meħtieġ għall-persuna medja sabiex tifhem kif sempliċement jaħdem kollox f'Kubernetes. Kubernetes ċertament hija teknoloġija sempliċi, sakemm dawk li jridu jitgħallmuha jkunu jafu fejn u kif tintuża.

Issa, mingħajr aktar dewmien, ejja nibdew u nitkellmu dwar l-applikazzjoni li se nkunu qed naħdmu magħha.

Applikazzjoni sperimentali

L-applikazzjoni tagħna se twettaq funzjoni waħda biss. Huwa jieħu sentenza waħda bħala input, u wara, bl-użu ta 'għodod ta' analiżi tat-test, iwettaq analiżi tas-sentiment ta 'din is-sentenza, u jikseb valutazzjoni tal-attitudni emozzjonali tal-awtur tas-sentenza għal ċertu oġġett.

Dan huwa kif tidher it-tieqa ewlenija ta 'din l-applikazzjoni.

Kubernetes Tutorial Parti 1: Applikazzjonijiet, Mikroservizzi, u Kontenituri
Applikazzjoni tal-web għall-analiżi tas-sentimenti tat-testi

Mil-lat tekniku, l-applikazzjoni tikkonsisti fi tliet mikroservizzi, li kull wieħed minnhom isolvi sett speċifiku ta 'problemi:

  • SA-Frontend huwa server tal-web Nginx li jservi fajls React statiċi.
  • SA-WebApp hija applikazzjoni tal-web miktuba bil-Java li tipproċessa talbiet mill-frontend.
  • SA-Logic hija applikazzjoni Python li twettaq analiżi tas-sentiment fuq it-test.

Huwa importanti li wieħed jinnota li l-mikroservizzi ma jeżistux waħedhom. Huma jimplimentaw l-idea ta '"separazzjoni tar-responsabbiltajiet", iżda fl-istess ħin jeħtieġ li jinteraġixxu ma' xulxin.

Kubernetes Tutorial Parti 1: Applikazzjonijiet, Mikroservizzi, u Kontenituri
Id-dejta tiċċirkola fl-applikazzjoni

Fid-dijagramma ta 'hawn fuq, tista' tara l-istadji numerati tas-sistema, li juru l-flussi tad-dejta fl-applikazzjoni. Ejja nħarsu lejhom:

  1. Il-browser jitlob fajl mis-server index.html (li, min-naħa tiegħu, tniżżel il-pakkett tal-applikazzjoni React).
  2. L-utent jinteraġixxi mal-applikazzjoni, dan jikkawża sejħa għall-applikazzjoni tal-web ibbażata fuq ir-Rebbiegħa.
  3. L-applikazzjoni tal-web tibgħat it-talba biex titwettaq analiżi tat-test lill-applikazzjoni Python.
  4. L-applikazzjoni Python twettaq analiżi tas-sentiment tat-test u tirritorna r-riżultat bħala tweġiba għat-talba.
  5. L-applikazzjoni tar-Rebbiegħa tibgħat tweġiba lill-applikazzjoni React (li, min-naħa tagħha, turi r-riżultat tal-analiżi tat-test lill-utent).

Il-kodiċi għal dawn l-applikazzjonijiet kollha jistgħu jinstabu hawn. Nirrakkomanda li tikkopja dan ir-repożitorju għalik innifsek issa, peress li hemm ħafna esperimenti interessanti magħha quddiemna.

Tmexxi applikazzjoni bbażata fuq mikroservizzi fuq il-magna lokali tiegħek

Sabiex l-applikazzjoni taħdem, irridu nibdew it-tliet mikroservizzi. Nibdew bl-aktar ħelu minnhom kollha - l-applikazzjoni front-end.

▍Twaqqaf React għall-iżvilupp lokali

Sabiex tħaddem applikazzjoni React, għandek bżonn tinstalla l-pjattaforma Node.js u NPM fuq il-kompjuter tiegħek. Ladarba jkollok dan kollu installat, uża t-terminal biex tinnaviga lejn il-folder tal-proġett tiegħek sa-frontend u mexxi l-kmand li ġej:

npm install

Billi tħaddem dan il-kmand fil-folder node_modules id-dipendenzi tal-applikazzjoni React se jiġu mgħobbija, li r-rekords tagħhom jinsabu fil-fajl package.json. Ladarba d-dipendenzi jitniżżlu fl-istess folder, mexxi l-kmand li ġej:

npm start

Dak kollox. Issa l-applikazzjoni React qed taħdem, tista' taċċessaha billi tmur fl-indirizz li ġej fil-browser tiegħek: localhost:3000. Tista 'tbiddel xi ħaġa fil-kodiċi tagħha. Inti se tara immedjatament l-effett ta 'dawn il-bidliet fil-browser. Dan huwa possibbli grazzi għall-hekk imsejħa sostituzzjoni "taħraq" tal-moduli. Dan jagħmel l-iżvilupp front-end esperjenza sempliċi u pjaċevoli.

▍Tħejjija ta' applikazzjoni React għall-produzzjoni

Għall-iskop li fil-fatt nużaw applikazzjoni React, irridu naqilbuha f'sett ta 'fajls statiċi u naqduhom lill-klijenti li jużaw server tal-web.

Biex tibni l-applikazzjoni React, għal darb'oħra billi tuża t-terminal, innaviga lejn il-folder sa-frontend u mexxi l-kmand li ġej:

npm run build

Dan se joħloq direttorju fil-folder tal-proġett build. Se jkun fih il-fajls statiċi kollha meħtieġa biex taħdem l-applikazzjoni React.

▍Jservu fajls statiċi bl-użu ta 'Nginx

L-ewwel trid tinstalla u tħaddem is-server tal-web Nginx. Hawnhekk tista' tniżżelha u ssib struzzjonijiet dwar kif tinstallaha u tħaddem. Imbagħad għandek bżonn tikkopja l-kontenut tal-folder sa-frontend/build għal folder [your_nginx_installation_dir]/html.

B'dan l-approċċ, il-fajl iġġenerat matul il-proċess tal-bini tal-applikazzjoni React index.html se jkunu disponibbli fuq [your_nginx_installation_dir]/html/index.html. Dan huwa l-fajl li, b'mod awtomatiku, is-server Nginx jipproduċi meta jaċċessah. Is-server huwa kkonfigurat biex jisma' fuq il-port 80, iżda jista 'jiġi personalizzat kif għandek bżonn billi teditja l-fajl [your_nginx_installation_dir]/conf/nginx.conf.

Issa tiftaħ il-browser tiegħek u mur fuq localhost:80. Se tara l-paġna tal-applikazzjoni React.

Kubernetes Tutorial Parti 1: Applikazzjonijiet, Mikroservizzi, u Kontenituri
React applikazzjoni moqdija mis-server Nginx

Jekk issa ddaħħal xi ħaġa fil-qasam Type your sentence u agħfas il-buttuna Send - xejn mhu se jiġri. Iżda, jekk tħares lejn il-console, tista 'tara messaġġi ta' żball hemmhekk. Sabiex nifhmu fejn iseħħu eżattament dawn l-iżbalji, ejja nanalizzaw il-kodiċi tal-applikazzjoni.

▍Analiżi tal-kodiċi tal-applikazzjoni ta 'quddiem

Nagħtu ħarsa lejn il-kodiċi tal-fajl App.js, nistgħu naraw li tagħfas il-buttuna Send jitlob metodu analyzeSentence(). Il-kodiċi għal dan il-metodu huwa mogħti hawn taħt. Jekk jogħġbok innota li għal kull linja li għandha kumment tal-formola # Номер, hemm spjegazzjoni mogħtija taħt il-kodiċi. Aħna se nanalizzaw frammenti oħra tal-kodiċi bl-istess mod.

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. Il-URL li għalih issir it-talba POST. Huwa preżunt li hemm applikazzjoni f'dan l-indirizz li tistenna tali talbiet.

2.Il-korp tat-talba mibgħut lill-applikazzjoni. Hawn hu eżempju ta' korp ta' talba:

{
    sentence: "I like yogobella!"
}

3.Meta tiġi riċevuta tweġiba għal talba, l-istat tal-komponent jiġi aġġornat. Dan jikkawża li l-komponent jerġa' jiġi mogħti. Jekk nirċievu dejta (jiġifieri oġġett JSON li fih id-dejta tal-input u l-punteġġ tat-test ikkalkulat), aħna noħorġu l-komponent Polarity, peress li se jintlaħqu l-kundizzjonijiet xierqa. Dan huwa kif niddeskrivu l-komponent:

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

Il-kodiċi jidher li jaħdem pjuttost tajjeb. X'hemm ħażin f'dan, xorta waħda? Jekk tassumi li fl-indirizz fejn l-applikazzjoni qed tipprova tibgħat talba POST, għad m'hemm xejn li jista 'jaċċetta u jipproċessa din it-talba, allura inti tkun assolutament raġun. Jiġifieri, biex tipproċessa talbiet riċevuti fi http://localhost:8080/sentiment, jeħtieġ li nħaddmu applikazzjoni tal-web ibbażata fuq ir-Rebbiegħa.

Kubernetes Tutorial Parti 1: Applikazzjonijiet, Mikroservizzi, u Kontenituri
Għandna bżonn applikazzjoni tar-Rebbiegħa li tista' taċċetta talba POST

▍Twaqqif ta' applikazzjoni tal-web ibbażata fuq ir-Rebbiegħa

Sabiex tiskjera applikazzjoni tar-Rebbiegħa, ser ikollok bżonn JDK8 u Maven u varjabbli ambjentali konfigurati sew. Ladarba jkollok dan kollu installat, tista' tkompli taħdem fuq il-proġett tagħna.

▍Ippakkjar applikazzjoni f'fajl vażett

Innaviga, billi tuża terminal, għall-folder sa-webapp u daħħal il-kmand li ġej:

mvn install

Wara li tmexxi dan il-kmand fil-folder sa-webapp se jinħoloq direttorju target. Dan huwa fejn l-applikazzjoni Java se tkun ippakkjata f'fajl vażett, rappreżentat mill-fajl sentiment-analysis-web-0.0.1-SNAPSHOT.jar.

▍Tmexxi applikazzjoni Java

Mur fil-folder target u mexxi l-applikazzjoni bil-kmand li ġej:

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

Se jseħħ żball waqt l-eżekuzzjoni ta' dan il-kmand. Biex nibdew nirranġawha, nistgħu nanalizzaw id-dettalji tal-eċċezzjoni fid-dejta tat-traċċa tal-munzell:

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

Għalina, l-iktar ħaġa importanti hawnhekk hija li tissemma l-impossibbiltà li tiġi ċċarata t-tifsira sa.logic.api.url. Ejja nanalizzaw il-kodiċi li fih iseħħ l-iżball.

▍Analiżi tal-kodiċi tal-applikazzjoni Java

Hawn hu s-snippet tal-kodiċi fejn iseħħ l-iżball.

@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. F'SentimentController hemm għalqa saLogicApiUrl. Il-valur tiegħu huwa speċifikat mill-proprjetà sa.logic.api.url.
  2. Linja saLogicApiUrl jikkonkatena mal-valur /analyse/sentiment. Flimkien jiffurmaw l-indirizz biex issir sejħa lill-mikroservizz li jwettaq analiżi tat-test.

▍Issettja valur tal-proprjetà

Fir-Rebbiegħa, is-sors standard tal-valuri tal-proprjetà huwa fajl application.properties, li tista' tinstab fuq sa-webapp/src/main/resources. Iżda l-użu tiegħu mhuwiex l-uniku mod biex jiġu stabbiliti l-valuri tal-proprjetà. Dan jista 'jsir ukoll bl-użu tal-kmand li ġej:

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

Il-valur ta 'din il-proprjetà għandu jindika l-indirizz tal-applikazzjoni Python tagħna.

Billi tikkonfiguraha, aħna ngħidu lill-applikazzjoni tal-web tar-Rebbiegħa fejn trid tmur biex twettaq talbiet għall-analiżi tat-test.

Sabiex ma nikkomplikawx ħajjitna, aħna se niddeċiedu li l-applikazzjoni Python tkun disponibbli fuq localhost:5000 u ejja nippruvaw ma ninsewx. Bħala riżultat, il-kmand biex titnieda l-applikazzjoni tar-Rebbiegħa se tidher bħal din:

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

Kubernetes Tutorial Parti 1: Applikazzjonijiet, Mikroservizzi, u Kontenituri
Is-sistema tagħna hija nieqsa minn applikazzjoni Python

Issa kull ma rridu nagħmlu hu li nħaddmu l-applikazzjoni Python u s-sistema taħdem kif mistenni.

▍Twaqqif ta' applikazzjoni Python

Biex tħaddem applikazzjoni Python, irid ikollok installati Python 3 u Pip, u l-varjabbli ambjentali xierqa għandhom jiġu ssettjati b'mod korrett.

▍L-installazzjoni tad-dipendenzi

Mur fil-folder tal-proġett tiegħek sa-logic/sa u mexxi l-kmandi li ġejjin:

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

▍Ibda l-applikazzjoni

Wara l-installazzjoni tad-dipendenzi, aħna lesti li nħaddmu l-applikazzjoni:

python sentiment_analysis.py

Wara li nħaddmu dan il-kmand se ngħidulna dan li ġej:

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

Dan ifisser li l-applikazzjoni qed taħdem u qed tistenna talbiet fuq localhost:5000/

▍Riċerka tal-Kodiċi

Ejja nħarsu lejn il-kodiċi tal-applikazzjoni Python biex nifhmu kif jirrispondi għat-talbiet:

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. Inizjalizza oġġett Flask.
  2. L-ispeċifikazzjoni ta' indirizz għat-twettiq ta' talbiet POST lilu.
  3. Irkupru ta 'Proprjetà sentence mill-korp tat-talba.
  4. Inizjalizzazzjoni Oġġett Anonimu TextBlob u jkollna l-valur polarity għall-ewwel sentenza li waslet fil-korp tat-talba (fil-każ tagħna, din hija l-unika sentenza mibgħuta għall-analiżi).
  5. Jirritorna tweġiba li l-korp tiegħu fih it-test tas-sentenza u l-indikatur ikkalkulat għaliha polarity.
  6. Tnedija applikazzjoni Flask, li se tkun disponibbli fuq 0.0.0.0:5000 (tista 'wkoll taċċessaha billi tuża kostruzzjoni tal-formola localhost:5000).

Il-mikroservizzi li jiffurmaw l-applikazzjoni issa qed jaħdmu. Huma sintonizzati biex jinteraġixxu ma 'xulxin. Hekk tidher id-dijagramma tal-applikazzjoni f'dan l-istadju tax-xogħol.

Kubernetes Tutorial Parti 1: Applikazzjonijiet, Mikroservizzi, u Kontenituri
Il-mikroservizzi kollha li jiffurmaw l-applikazzjoni jiddaħħlu fis-sod

Issa, qabel ma tkompli, iftaħ l-applikazzjoni React tiegħek f'brawżer u pprova teżamina xi sentenza magħha. Jekk kollox isir b'mod korrett - wara li tagħfas il-buttuna Send se tara r-riżultati tal-analiżi taħt il-qasam tat-test.

Fit-taqsima li jmiss, ser nitkellmu dwar kif inħaddmu l-mikroservizzi tagħna fil-kontenituri Docker. Dan huwa meħtieġ sabiex titħejja l-applikazzjoni biex taħdem fuq cluster Kubernetes.

Kontenituri Docker

Kubernetes hija sistema għall-awtomatizzazzjoni tal-iskjerament, l-iskala u l-ġestjoni tal-applikazzjonijiet fil-kontejners. Huwa msejjaħ ukoll "orkestratur tal-kontenitur". Jekk Kubernetes jaħdem b'kontenituri, allura qabel ma nużaw din is-sistema l-ewwel irridu nakkwistaw dawn il-kontenituri. Imma l-ewwel, ejja nitkellmu dwar x'inhuma l-kontenituri. Forsi l-aħjar tweġiba għall-mistoqsija dwar x'inhi tista' ssibha fiha dokumentazzjoni lil Docker:

Immaġini ta 'kontenitur hija pakkett ħafif, awtonomu, eżekutibbli li fih applikazzjoni, li jinkludi dak kollu meħtieġ biex titħaddem: kodiċi ta' applikazzjoni, ambjent ta 'eżekuzzjoni, għodod tas-sistema u libreriji, settings. Programmi f'kontenituri jistgħu jintużaw f'ambjenti Linux u Windows, u dejjem se jaħdmu l-istess irrispettivament mill-infrastruttura.

Dan ifisser li l-kontenituri jistgħu jitħaddmu fuq kwalunkwe kompjuter, inklużi servers ta 'produzzjoni, u l-applikazzjonijiet li jinsabu fihom se jaħdmu l-istess fi kwalunkwe ambjent.

Biex tesplora l-karatteristiċi tal-kontenituri u tqabbelhom ma 'modi oħra biex tħaddem l-applikazzjonijiet, ejja nħarsu lejn eżempju ta' kif sservi applikazzjoni React bl-użu ta 'magna virtwali u kontenitur.

▍Servi ta' fajls statiċi ta' applikazzjoni React bl-użu ta' magna virtwali

Nippruvaw norganizzaw is-servizz ta 'fajls statiċi bl-użu ta' magni virtwali, se niltaqgħu ma 'l-iżvantaġġi li ġejjin:

  1. Użu ineffiċjenti tar-riżorsi, peress li kull magna virtwali hija sistema operattiva sħiħa.
  2. Dipendenza tal-pjattaformi. Dak li jaħdem fuq kompjuter lokali jista 'ma jaħdimx fuq server ta' produzzjoni.
  3. Skalar bil-mod u li juża ħafna riżorsi ta' soluzzjoni bbażata fuq magni virtwali.

Kubernetes Tutorial Parti 1: Applikazzjonijiet, Mikroservizzi, u Kontenituri
Nginx web server li jservi fajls statiċi li jaħdmu fuq magna virtwali

Jekk il-kontenituri jintużaw biex isolvu problema simili, allura, meta mqabbla ma 'magni virtwali, jistgħu jiġu nnotati s-saħħiet li ġejjin:

  1. Użu effiċjenti tar-riżorsi: taħdem mas-sistema operattiva billi tuża Docker.
  2. Pjattaforma indipendenti. Kontenitur li żviluppatur jista 'jmexxi fuq il-kompjuter tiegħu se jaħdem kullimkien.
  3. Skjerament ħafif permezz tal-użu ta 'saffi tal-immaġni.

Kubernetes Tutorial Parti 1: Applikazzjonijiet, Mikroservizzi, u Kontenituri
Nginx web server li jservi fajls statiċi li jaħdmu f'kontenitur

Aħna qabblu biss magni virtwali u kontenituri fuq ftit punti, iżda anke dan huwa biżżejjed biex inħossu l-qawwiet tal-kontenituri. Hawnhekk Tista' ssib dettalji dwar il-kontenituri Docker.

▍Bini ta' immaġni ta' kontenitur għal applikazzjoni React

Il-blokka bażika ta' kontenitur Docker hija l-fajl Dockerfile. Fil-bidu ta 'dan il-fajl, isir rekord tal-immaġni bażi tal-kontenitur, imbagħad hemm sekwenza ta' struzzjonijiet li tindika kif toħloq kontenitur li se jissodisfa l-ħtiġijiet ta 'ċerta applikazzjoni.

Qabel ma nibdew naħdmu mal-fajl Dockerfile, ejja niftakru x'għamilna biex nippreparaw il-fajls tal-applikazzjoni React għat-tlugħ fis-server Nginx:

  1. Bini ta' pakkett ta' applikazzjoni React (npm run build).
  2. Jibda s-server Nginx.
  3. Ikkopjar kontenut tad-direttorju build mill-folder tal-proġett sa-frontend għall-folder tas-server nginx/html.

Hawn taħt tista 'tara l-paralleli bejn il-ħolqien ta' kontenitur u l-passi ta 'hawn fuq imwettqa fuq il-kompjuter lokali tiegħek.

▍Tħejjija tad-Dockerfile għall-applikazzjoni SA-Frontend

L-istruzzjonijiet li se jkun fihom Dockerfile għall-applikazzjoni SA-Frontend, jikkonsistu biss minn żewġ timijiet. Il-fatt hu li t-tim ta 'żvilupp ta' Nginx ħejja bażika immaġni għal Nginx, li se nużaw biex noħolqu l-immaġni tagħna. Dawn huma ż-żewġ passi li għandna bżonn niddeskrivu:

  1. Il-bażi tal-immaġni għandha tkun l-immaġni Nginx.
  2. Kontenut tal-folder sa-frontend/build jeħtieġ li tiġi kkupjata fil-folder tal-immaġni nginx/html.

Jekk tmur minn din id-deskrizzjoni għall-fajl Dockerfile, allura jidher bħal dan:

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

Kif tistgħu taraw, kollox hawnhekk huwa sempliċi ħafna, u l-kontenut tal-fajl saħansitra jirriżulta li jinqara u jinftiehem pjuttost. Dan il-fajl jgħid lis-sistema biex tieħu l-immaġni nginx b'dak kollu li diġà hemm fih, u kkopja l-kontenut tad-direttorju build għad-direttorju nginx/html.

Hawnhekk jista 'jkollok mistoqsija dwar kif naf fejn eżattament għandek bżonn tikkopja fajls mill-folder build, jiġifieri minn fejn ġiet it-triq /usr/share/nginx/html. Fil-fatt, m'hemm xejn ikkumplikat hawn lanqas. Il-fatt hu li l-informazzjoni rilevanti tista’ tinstab fi deskrizzjoni immaġni.

▍Il-bini tal-immaġni u t-tlugħ fir-repożitorju

Qabel ma nkunu nistgħu naħdmu bl-immaġni lesta, għandna bżonn nimbottawha għar-repożitorju tal-immaġni. Biex nagħmlu dan, se nużaw il-pjattaforma ta' hosting ta' immaġini tas-sħab b'xejn Docker Hub. F'dan l-istadju tax-xogħol trid tagħmel dan li ġej:

  1. Installa Docker.
  2. Irreġistra fuq il-websajt ta' Docker Hub.
  3. Idħol fil-kont tiegħek billi tħaddem il-kmand li ġej fit-terminal:
    docker login -u="$DOCKER_USERNAME" -p="$DOCKER_PASSWORD"

Issa għandek bżonn tuża t-terminal biex tmur fid-direttorju sa-frontend u mexxi l-kmand li ġej hemmhekk:

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

Hawn u aktar f'kmandi simili $DOCKER_USER_ID għandu jiġi sostitwit bl-isem tal-utent tad-Docker Hub tiegħek. Pereżempju, din il-parti tal-kmand tista' tidher bħal din: rinormaloku/sentiment-analysis-frontend.

F'dan il-każ, dan il-kmand jista 'jitqassar billi jitneħħa minnu -f Dockerfile, peress li dan il-fajl diġà jeżisti fil-folder li fih qed inwettqu dan il-kmand.

Sabiex nibagħtu l-immaġni lesta lir-repożitorju, għandna bżonn il-kmand li ġej:

docker push $DOCKER_USER_ID/sentiment-analysis-frontend

Wara li tlestiha, iċċekkja l-lista tar-repożitorji tiegħek fuq Docker Hub sabiex tifhem jekk it-tlugħ tal-immaġni fil-ħażna tal-cloud kienx suċċess.

▍Tmexxi kontenitur

Issa kulħadd jista' jniżżel u jmexxi l-immaġni, magħrufa bħala $DOCKER_USER_ID/sentiment-analysis-frontend. Sabiex tagħmel dan, għandek bżonn tmexxi s-sekwenza ta 'kmandi li ġejja:

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

Issa l-kontenitur qed jaħdem, nistgħu nkomplu naħdmu billi noħolqu stampi oħra li għandna bżonn. Imma qabel inkomplu, ejja nifhmu d-disinn 80:80, li jidher fil-kmand tat-tnedija tal-immaġni u jista 'jidher konfuż.

  • L-ewwel numru 80 — dan huwa n-numru tal-port ospitanti (jiġifieri, il-kompjuter lokali).
  • It-tieni numru 80 huwa l-port tal-kontejner li lejh għandha tintbagħat it-talba.

Ikkunsidra l-​illustrazzjoni li ġejja.

Kubernetes Tutorial Parti 1: Applikazzjonijiet, Mikroservizzi, u Kontenituri
Port Forwarding

Is-sistema tidderieġi mill-ġdid it-talbiet mill-port <hostPort> għal kull port <containerPort>. Jiġifieri aċċess għall-port 80 kompjuter huwa ridirett lejn il-port 80 kontenitur.

Peress li l-port 80 miftuħa fuq il-kompjuter lokali, imbagħad inti tista 'aċċess għall-applikazzjoni minn dan il-kompjuter fuq localhost:80. Jekk is-sistema tiegħek ma tappoġġjax Docker, l-applikazzjoni tista' titħaddem fuq magna virtwali Docker, li l-indirizz tagħha jkun jidher bħal <docker-machine ip>:80. Biex issir taf l-indirizz IP tal-magna virtwali Docker, tista 'tuża l-kmand docker-machine ip.

F'dan il-punt, wara li tniedi b'suċċess il-kontenitur tal-applikazzjoni ta 'quddiem, għandek tkun tista' tiftaħ il-paġna tagħha fil-browser.

▍Il-fajl .dockerignore

Ġbir ta 'immaġni ta' applikazzjoni SA-Frontend, nistgħu ninnutaw li dan il-proċess jirriżulta li huwa estremament bil-mod. Dan jiġri minħabba li l-kuntest tal-bini tal-immaġni għandu jintbagħat lid-daemon Docker. Id-direttorju li jirrappreżenta l-kuntest tal-bini huwa speċifikat bħala l-aħħar argument tal-kmand docker build. Fil-każ tagħna, hemm tikka fl-aħħar ta 'dan il-kmand. Dan jikkawża li l-istruttura li ġejja tiġi inkluża fil-kuntest tal-bini:

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

Iżda mill-folders kollha preżenti hawn, għandna bżonn biss il-folder build. It-tagħbija ta 'xi ħaġa oħra hija ħela ta' ħin. Tista' tħaffef il-bini billi tgħid lil Docker liema direttorji għandu jinjora. Huwa sabiex nagħmlu dan li għandna bżonn il-fajl .dockerignore. Inti, jekk inti familjari mal-fajl .gitignore, l-istruttura ta' dan il-fajl probabbilment tidher familjari. Jelenka direttorji li s-sistema tal-bini tal-immaġini tista' tinjora. Fil-każ tagħna, il-kontenut ta 'dan il-fajl jidher bħal dan:

node_modules
src
public

fajl .dockerignore irid ikun fl-istess folder bħall-fajl Dockerfile. Issa l-bini ta 'l-immaġni se jieħu kwistjoni ta' sekondi.

Ejja issa naħdmu fuq l-immaġni għall-applikazzjoni Java.

▍Bini ta' immaġni ta' kontenitur għal applikazzjoni Java

Taf xiex, diġà tgħallimt dak kollu li għandek bżonn tkun taf biex toħloq immaġini tal-kontejners. Huwa għalhekk li din it-taqsima se tkun qasira ħafna.

Iftaħ il-fajl Dockerfileli jinsab fil-folder tal-proġett sa-webapp. Jekk taqra t-test ta 'dan il-fajl, se tara biss żewġ kostruzzjonijiet ġodda fih, li jibdew bil-kliem kjavi ENV и EXPOSE:

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

Kelma ewlenija ENV Jippermettilek tiddikjara varjabbli ambjentali ġewwa kontenituri Docker. B'mod partikolari, fil-każ tagħna, jippermettilek li tispeċifika URL biex taċċessa l-API tal-applikazzjoni li twettaq analiżi tat-test.

Kelma ewlenija EXPOSE jippermettilek tgħid lil Docker biex tiftaħ port. Aħna se nużaw dan il-port waqt li nħaddmu l-applikazzjoni. Hawnhekk tista’ tinnota li fi Dockerfile għall-applikazzjoni SA-Frontend m'hemm l-ebda kmand bħal dan. Dan huwa biss għal skopijiet ta 'dokumentazzjoni, fi kliem ieħor, din il-kostruzzjoni hija maħsuba għal dak li se jaqra Dockerfile.

Il-bini tal-immaġni u l-imbuttar tagħha lejn ir-repożitorju jidher eżattament l-istess bħal fl-eżempju preċedenti. Jekk għadek m'intix kunfidenti ħafna fil-kapaċitajiet tiegħek, il-kmandi korrispondenti jistgħu jinstabu fil-fajl README.md fil-folder sa-webapp.

▍Bini ta' immaġni ta' kontenitur għal applikazzjoni Python

Jekk tħares lejn il-kontenut tal-fajl Dockerfile fil-folder sa-logic, allura ma ssib xejn ġdid għalik innifsek hemmhekk. Il-kmandi biex tinbena l-immaġni u tintbagħatha lir-repożitorju għandhom ukoll ikunu diġà familjari għalik, iżda, bħal fl-applikazzjonijiet l-oħra tagħna, jistgħu jinstabu fil-fajl README.md fil-folder sa-logic.

▍Ittestjar ta' applikazzjonijiet f'kontejners

Tista' tafda xi ħaġa li ma ttestjajtx? Jien ma nistax ukoll. Ejja nittestjaw il-kontenituri tagħna.

  1. Ejja nniedu l-kontenitur tal-applikazzjoni sa-logic u kkonfiguraha biex tisma 'fuq il-port 5050:
    docker run -d -p 5050:5000 $DOCKER_USER_ID/sentiment-analysis-logic
  2. Ejja nniedu l-kontenitur tal-applikazzjoni sa-webapp u kkonfiguraha biex tisma 'fuq il-port 8080. Barra minn hekk, irridu nikkonfiguraw il-port li fuqu l-applikazzjoni Python se tisma’ għal talbiet mill-applikazzjoni Java billi nassenjaw mill-ġdid il-varjabbli ambjentali 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

Biex titgħallem kif issir taf l-indirizz IP ta’ kontenitur Docker jew magna virtwali, irreferi għall-fajl README.

Ejja nniedu l-kontenitur tal-applikazzjoni sa-frontend:

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

Issa kollox lest biex imur fl-indirizz fil-browser localhost:80 u ipprova l-applikazzjoni.

Jekk jogħġbok innota li jekk bdilt il-port għal sa-webapp, jew jekk qed tħaddem magna virtwali Docker, ikollok bżonn teditja l-fajl App.js mill-folder sa-frontendbilli tbiddel l-indirizz IP jew in-numru tal-port fil-metodu analyzeSentence(), li tissostitwixxi informazzjoni kurrenti minflok data skaduta. Wara dan, għandek bżonn terġa 'tiġbor l-immaġni u tużaha.

Hekk tidher id-dijagramma tal-applikazzjoni tagħna issa.

Kubernetes Tutorial Parti 1: Applikazzjonijiet, Mikroservizzi, u Kontenituri
Il-mikroservizzi jaħdmu f'kontenituri

Sommarju: għaliex għandna bżonn cluster Kubernetes?

Għadna kemm eżaminajna l-fajls Dockerfile, tkellem dwar kif tibni immaġini u timbottahom għal repożitorju Docker. Barra minn hekk, tgħallimna kif tħaffef l-assemblaġġ tal-immaġni billi tuża l-fajl .dockerignore. Bħala riżultat, il-mikroservizzi tagħna issa jaħdmu f'kontenituri Docker. Hawnhekk jista 'jkollok mistoqsija kompletament ġustifikata dwar għaliex għandna bżonn Kubernetes. It-tieni parti ta 'dan il-materjal se tkun iddedikata biex twieġeb din il-mistoqsija. Sadanittant, ikkunsidra l-mistoqsija li ġejja:
Ejja nassumu li l-applikazzjoni tal-web tagħna għall-analiżi tat-test saret popolari mad-dinja kollha. Miljuni ta’ talbiet jaslu lilu kull minuta. Dan ifisser li mikroservizzi sa-webapp и sa-logic se jkun taħt tagħbija enormi. Kif tiskala kontenituri li jħaddmu mikroservizzi?

Kubernetes Tutorial Parti 1: Applikazzjonijiet, Mikroservizzi, u Kontenituri

Sors: www.habr.com

Żid kumment